Categories
Seguridad WordPress

WordPress: protección contra ataques CSRF

Para aquellos que desconocen, WordPress utiliza (desde la versión 2 si mal no recuerdo) las funciones wp_create_nonce y wp_verify_nonce como sistema de protección para ataques de tipo CSRF. Más allá de algunos problemas no relacionados con la implementación de estas funciones, ha funcionado bastante bien a lo largo del tiempo.

Entrando un poco más en detalle sobre esta funcionalidad, lo que parecería que se usa es algo que se conoce como nonce en el mundo de la seguridad informática. Un nonce viene de la abreviación en inglés number used once, un número pseudo-aleatorio que normalmente se usa para evitar ataques de repetición (mala traducción para replay attacks) cuando se definen y verifican protocolos criptográficos. Volviendo al principio, lo que se usa en WordPress no son estrictamente nonces puesto que estos valores tienen una duración de 24 horas más o menos y que naturalmente puede ser usado para realizar las mismas acciones múltiples veces.

En circunstancias normales, si ese valor generado es seguro y un atacante no tiene la posibilidad de generarlo o interceptarlo, pues todavía es en cierta forma aceptable. El protocolo de manera simplificada es el siguiente.

WP  -> B  : nonce( time.action.user_id )
B   -> WP : pair( nonce( time.action.user_id ), action )

WP representa a WordPress, que envía al navegador B un valor encriptado conteniendo el timestamp, la acción relacionada y el identificador del usuario. Por su lado el navegador debe enviar el valor generado por WP y la acción que desea realizar. WP al recibir el mensaje comprueba que el numero enviado por B no ha sido modificado y corresponde exactamente a la acción a realizar. Sin embargo, una vez más, esto no se cumple siempre debido a que el valor que puede tomar action, puede ser modificado por B. ¿Las consecuencias? pues simplemente que este mecanismo puede actualmente ser evadido bajo ciertas condiciones. En el caso de un blog, puede que no sea importante, pero para otro tipo de aplicaciones hay que tener bastante más cuidado.

Categories
Seguridad WordPress

WordPress, tres años después

WordpressAunque nunca haya sido un gran colaborador de WordPress, recuerdo que desde los primeros tickets que abrí relacionados a su seguridad, llegué a conocer relativamente bien el código que formaba parte de las versiones 2.0.x a 2.3.x. Solía seguir de manera regular los cambios que se iban haciendo y reporté unas cuantas fallas de seguridad.

Por esos azares de la vida, el 2008 tuve que abandonar todo. Incluyendo familia, amigos, ciudad, país y obviamente las actividades que solía hacer. Seguramente podría haber continuado, pero lamentablemente nunca se dieron las condiciones. En la segunda mitad del 2009, me contactaron para auditar el código de WordPress y una lista de los plugins más usados --- no recuerdo exactamente que versión era. Llegué a enviar en privado unos cuantos fallos, uno que permitía subir archivos php y otros típicos XSS o CSRF. Tuve que abandonar ese trabajo porque, aunque había compensación económica de por medio, requería demasiado tiempo y en ese entonces, eso era lo que más me faltaba.

Este año, concretamente desde hace menos de un mes, he estado viendo un poco de código. Por lo que he podido ver, los desarrolladores del núcleo suelen poner un poco más de énfasis en la seguridad. Si bien esto es un indicador bastante positivo, hay que ser consciente también que las nuevas funcionalidades implican la aparición de nuevos problemas, o principalmente de nuevas formas de aprovechar (¿alguna traducción mejor para exploit?) las fallas de seguridad. El código es más complejo que antes y un cambio inocuo en una parte del código, puede ser la causa de un problema serio en otro lado. Sin embargo, tampoco hay que desesperar. Al ser un proyecto con una comunidad bastante grande, siempre habrán ojos que descubran este tipo de fallos y que nos permitan gozar de un blog relativamente más seguro.

Estén atentos los días a venir, antes de la publicación de la versión 3.2, se viene una actualización menor que corregirá algunos problemas de seguridad, unos serios y otros algo más triviales.

Categories
Varios

Pequeño susto

Últimamente me ha dado por darle una mirada a los vestigios de este blog, para ver si durante los más de tres años de ausencia no se ha colado nada raro, como nos sucedió años atrás. Simplemente para ver si no se le escapó nada al gran Braulio.

Mientras estaba viendo las utilidades que provee el panel de administración de nuestro hosting, me dió por probar primero si había por ahí algún virus. Así que sin perder más tiempo ejecuté ClamAv, todo parecía andar bien hasta que me salen algunos reportes indicando la presencia de algunos exploits en los backups de nuestra base de datos, como pueden ver en la imagen.

Con un poco de angustia y temiendo algo malo veo que el exploit ese estaba relacionado al bug SA22542 de Internet Explorer 7. Una búsqueda del exploit relacionado, me da algo concreto para poder buscar dentro de nuestra base de datos. La calma vino cuando me di cuenta que fui yo quien había publicado una copia del exploit hace bastante tiempo. 😀

Como lamentablemente no tenemos acceso por SSH, seguramente tenga que descargar todo para hacer la limpieza, probablemente la semana que viene o quien sabe, tal vez se me pasen las ganas 🙂 . Por el momento, he estado colaborando nuevamente con el equipo de WordPress en ciertos temas. En una siguiente entrada comentaré seguramente mis impresiones sobre el código y tal vez algunas de las correcciones que estarán presentes en la siguiente versión menor, me refiero a la 3.1.3.

Categories
Miniposts Seguridad

Seguridad de las compras en línea

Interesante artículo (pdf) donde comentan algunas fallas de algunas plataformas de comercio electrónico. Recuerdo que hace unos años, me había tocado integrar ese tipo de cosas en aplicaciones existentes. En ese entonces habían bastantes cosas que las daba por seguras, haciendo evidentemente la aplicación propensa a los problemas que se describen en ese artículo.

Ahora veo necesario el uso de herramientas que permitan verificar formalmente este tipo de protocolos, si bien es cierto que puede que no sea perfecto o que haya errores al definir los modelos, al menos da cierto grado de garantía de que las propiedades que se prueban en este tipo de herramientas, se mantienen.

Categories
Programación

Eclipse XText

Hace un año, algo menos me parece, me enteré de la existencia de Eclipse Xtext. A pesar de haber visto en ese entonces un vídeo mostrando sus características, hasta ahora no había tenido la oportunidad de probarlo realmente. XText es un framework destinado a facilitar el desarrollo de lenguajes de programación o DSLs. Ofrece la posibilidad de crear los compiladores y de poder integrarlos dentro de Eclipse; permitiendo entre otras, la coloración de código, la verificación instantánea de sintaxis, completado de código, etc. Para una pequeña introducción, vean mejor el siguiente video.

Internamente usa AntLR para generar el parser. De ahí que la sintaxis usada para definir la gramática en Xtext sea casi la misma que la de AntLR. A pesar de haber tenido algunas limitaciones mientras intentaba definir la gramática de un lenguaje existente, me dejado una grata impresión.