Un repaso a las mejores técnicas de hacking web que nos dejó el 2018 (I)

martes, 12 de marzo de 2019

Nos encantan las listas, ¿verdad? En seguridad de aplicaciones web tenemos la muy conocida OWASP TOP 10, en la que un grupo de expertos en seguridad web de varias organizaciones colaboradoras discuten y votan cada cierto tiempo los riesgos más importantes que afectan a estas. La última revisión corresponde a la publicada en el año 2017.

Si bien se trata de una lista que refleja muy bien cómo van evolucionando los riesgos en el ámbito web, el rapidísimo ritmo al que evolucionan las tecnologías web hace que “la foto” que nos muestra quede obsoleta en un breve espacio de tiempo. Además, el top de OWASP no se centra en ataques concretos sino en categorías, abstracciones de diversas clases de vulnerabilidades que poseen uno o varios elementos en común.

Años antes, en 2006, el experto en seguridad web Jeremiah Grossman, junto con otros (no menos expertos en la materia) iniciaron un ranking de las mejores técnicas de ataques web aparecidas a lo largo del año, era un compendio de todo lo presentado y publicado en vulnerabilidades web. No se hablaba aquí de CVEs concretos sino de técnicas novedosas que podían dar lugar en algunos casos, a familias de vulnerabilidades (como lo fue el Cross-site scripting en sus inicios).

No podemos dejar pasar la oportunidad, con cierta nostalgia, de nombrar algunas de las técnicas que entonces (han pasado 13 años, pero equivalen a casi un siglo en Internet) dieron que hablar en los medios y foros especializados en seguridad, como por ejemplo, el escaneo de puertos a través de JavaScript o el “robo” del historial de navegación a través de la obtención del atributo color del estilo CSS aplicado a una lista de enlaces. Así que, cuando el usuario había visitado el sitio, el navegador se lo “chivaba” al JavaScript al cambiar los colores de los enlaces.

Esta iniciativa fue continuada año tras años hasta 2015, última edición del ranking. Afortunadamente, la gente de PortSwigger, creadores de la popular herramienta de auditoría web Burp Suite, recuperó la lista de técnicas más importante del año, iniciando una nueva singladura desde 2017. De nuevo tenemos la oportunidad de poder ponernos al día en las técnicas empleadas, así como de realizar un análisis comparativo para observar cómo está evolucionando la seguridad en la tecnología web.

Hace unas semanas se votó la lista de técnicas correspondientes al año 2018. Vamos a echar un vistazo a las técnicas que han conseguido entrar en el ranking y comentaremos brevemente su caracterización, vectores y riesgos más importantes. Comenzamos partiendo desde la décima técnica.

10 - XS-Searching Google's bug tracker to find out vulnerable source code
Se trata de una curiosa técnica encontrada en el gestor de bugs usado por Google para Chrome. Luan Herrera, su descubridor, dio con un curioso método de consultas booleanas que permiten discernir la existencia de un elemento en el sistema, en base a la respuesta que este último da a una consulta ciega.

Dicho gestor, llamado "Monorail", ofrece la posibilidad de exportar los resultados de una búsqueda a ciertos formatos, por ejemplo, CSV. Además, permite indicar los campos de dicha consulta a modo de columnas y, aún más curioso, permite repetir dichos campos. Observando una consulta a modo de URL se entenderá mejor:
hxxps://bugs.chromium.org/p/chromium/issues/csv?can=1&q=id:51337&colspec=ID+Summary+Summary+Summary

Esto hace que el sistema cree un archivo CSV para que lo descarguemos con 3 copias del sumario de cierto bug. Como nos podemos imaginar, si dicho bug existe, el sistema tardará en componer dicho archivo, frente al tiempo que tardaría en crear uno para una consulta que no devuelve nada.

Así, podemos ir preguntando al sistema mediante todos los parámetros de búsqueda que nos interesen hasta dar con las rutas de ciertos elementos restringidos (código fuente de bugs privados, etc). La lógica booleana de las consultas nos permitirá ir afinando parámetros hasta dar con algo valioso.

Eso sí, en este caso la técnica venía condicionada, ya que determinadas búsquedas con cierta complejidad necesitan de una sesión con los privilegios adecuados, algo que el investigador disponía, al no estar esas consultas protegidas frente a ataques de CSRF.

Aunque se trata de técnicas que en este caso afectan al gestor de bugs de Google, de forma general podrían ser aplicadas a otros sistemas que permitan dilucidar, a través del tiempo de respuesta a consultas, contenido restringido.

9 – Data exfiltration via Formula Injection
El ataque se centra en cómo inyectar expresiones en las fórmulas de las hojas de cálculo de Google Sheets y LibreOffice para conseguir información, tal como la lectura de partes no compartidas de la hoja de cálculo o incluso la lectura arbitraria de archivos del sistema (en el caso de LibreOffice). Este tipo de ataque se centra en aprovechar cierta funcionalidad de las hojas de cálculo (los investigadores excluyen a Microsoft Excel del ámbito de su trabajo) que permite importar archivos externos a través de un enlace.

Supongamos, por ejemplo, que indicamos en una parte de la hoja de cálculo que queremos importar un CVS que cuelga de "hxxp://pruebas.noexiste/archivo_que_no_existe.csv?v=". Esto lo podemos hacer con fórmulas del tipo "IMPORTFEED" o "IMPORTHTML", tal y como señalan los investigadores. Ahora bien, a la vez que usamos esta fórmula, acoplamos a ese parámetro suelto (es, obviamente, arbitrario), “v=”, el resultado de concatenar ciertas columnas, por ejemplo, usando “CONCATENATE()”.

El resultado es que se generará una consulta a un servidor web que se llevará toda la información de ese rango de columnas hacia los logs del servidor, provocando que se filtre información a la cual podría no tenerse privilegios de acceso. El escenario de ataque es estrecho, ya que se trataría de poder tener ciertos permisos que faciliten la inclusión de contenido con fórmulas en un documento que guarde información restringida. No obstante, ya se puede vislumbrar el poder que este tipo de funciones, debidamente combinadas, puede poseer a medida que este tipo de documentos se abre cada vez más a grupos de usuarios y nuevas funcionalidades de compartición.

El ataque en LibreOffice posee un elemento potencialmente más dañino porque usando la misma técnica, se puede extraer archivos del sistema (con el debido permiso de lectura). Con todo, es necesario enviar el documento al usuario y que este lo abra y acepte la advertencia de apertura de enlaces externos. No comentan si esta técnica funciona en la versión para Windows de LibreOffice, tan solo se ciñen a la versión de sistemas GNU/Linux.

8 - Prepare(): Introducing novel Exploitation Techniques in WordPress 
Se trata de la explotación de una técnica exclusiva para la plataforma WordPresss. Es bastante curiosa, porque mientras que todos tomamos por segura “la técnica de sentencias preparadas” para realizar consultas SQL en el código, es imprescindible que la implementación subyacente lo sea. Robin Peraglia desgrana en la charla cómo explotar este tipo de sentencias y, además, empleando objetos serializados en PHP, lo que abre la puerta a la ejecución de código arbitrario; a su vez, técnica esta última dentro del ranking de este año.

7 - Exploiting XXE with local DTD files
Una vuelta de tuerca a la ya conocida técnica de inyección de entidades externas en XML, XXE. En ella, el autor Arseniy Sharoglazov, de forma ingeniosa, aprovecha los documentos DTD locales que suelen existir en los sistemas para evadir posibles políticas de cortafuegos que impidan al procesador XML el acceso a dominios externos.

Por ejemplo, al explotar XXE es común hacer referencia a un DTD externo, por ejemplo:
A pesar de que exista la posibilidad de inyectar entidades XML al documento, el procesador no podrá acceder al dominio referido y provocará o bien un error o una respuesta vacía.

En el caso propuesto por el investigador, hacemos referencia a una DTD que puede existir en el sistema, por ejemplo, Windows:


O en algunos Linux:


Interesante también la respuesta a su técnica en Twitter, que mejora el ataque insertando una DTD en la petición.

6 - It's A PHP Unserialization Vulnerability Jim But Not As We Know It
Un ranking sin una (nueva) técnica de serialización no es un ranking. Y es que si hay una técnica que es compleja de explotar y también de evitar es ese curioso truco de “teletransportación” de objetos al puro estilo de Star Trek, que cuando son devueltos a la vida en el servidor poseen un elemento dañino: la serialización de objetos maliciosos.

En esta investigación, nos presentan el abanico de técnicas de serialización a usar en PHP, además de una extensiva explicación del manejador phar:// que permite hacer referencia a aplicaciones completas en PHP enlatadas en un solo tipo de archivo. Es un concepto similar a los jar de Java, pero al estilo PHP y explotables en determinados escenarios.

En la siguiente entrega analizaremos el resto de las entradas de este nuevo ranking de técnicas para hacking web.

Segunda parte del análisis:
» Un repaso a las mejores técnicas de hacking web que nos dejó el 2018 (II)

David García
Innovación y laboratorio en ElevenPaths

1 comentario: