Escritura arbitraria de archivos mediante extracción de archivos comprimidos (Zip Slip) en go-rpmutils
20 de julio de 2020
0 minutos de lecturaTe damos la bienvenida al perfil mensual de vulnerabilidades de Snyk. En esta serie, Snyk repasa las vulnerabilidades descubiertas por nuestro equipo de investigación de seguridad o reportadas a este. Elegimos una vulnerabilidad destacada del último mes y contamos la historia detrás de su descubrimiento, investigación y divulgación. Destacamos a los investigadores, desarrolladores y usuarios que ayudan a identificar y corregir vulnerabilidades en la comunidad de código abierto.
Este mes analizamos una de una serie de vulnerabilidades Zip Slip que el equipo de investigación de seguridad de Snyk identificó en paquetes de Golang.
Vulnerabilidad: Escritura arbitraria de archivos mediante extracción de archivos comprimidos (Zip Slip) CVE asignados:CVE-2020-7667Analista de Snyk: George GkitsasDescubierta por: Equipo de investigación de Snyk
El 5 de junio de 2020, el equipo de investigación de Snyk publicó los detalles de una vulnerabilidad de escritura arbitraria de archivos que podía explotarse mediante un archivo zip malicioso. La vulnerabilidad se identificó en el paquete de Golang go-rpmutils y fue descubierta por investigadores de Snyk como parte de un esfuerzo más amplio para identificar vulnerabilidades Zip Slip en todo el ecosistema de código abierto. George Gkitsas, analista sénior de seguridad, fue quien identificó inicialmente la vulnerabilidad en el paquete rpmutils. Finalmente, se reportó al responsable del mantenimiento del paquete, se corrigió rápidamente y se publicó en el CVE y en la Snyk Vulnerability Database una vez que se lanzó la versión corregida del paquete.
Antes de profundizar en la investigación que permitió descubrir esta vulnerabilidad, repasemos brevemente en qué consiste una vulnerabilidad Zip Slip. Para explotarla, se aprovecha el recorrido de directorios mediante un archivo comprimido creado de forma maliciosa. Cuando un método vulnerable extrae el archivo, se pueden sobrescribir archivos en ubicaciones no previstas. Esto podría permitir que un atacante sobrescriba archivos del sistema y, en última instancia, ejecute comandos maliciosos de forma remota o incluso obtenga acceso remoto al sistema. Para conocer más detalles técnicos sobre la vulnerabilidad Zip Slip y cómo prevenirla, consulta la guía rápida de Zip Slip.
Como miembro del equipo de investigación de Snyk, George intentaba encontrar patrones que pudieran identificarse rápidamente en distintos repositorios para detectar paquetes potencialmente vulnerables. Como parte de su investigación, decidió enfocarse inicialmente en el ecosistema de Golang. En la primera ronda, el equipo seleccionó alrededor de 60 paquetes y analizó cada uno para detectar la posible vulnerabilidad. Se identificaron varios falsos positivos, lo que ayudó al equipo a ajustar mejor sus algoritmos; sin embargo, la investigación permitió descubrir cinco vulnerabilidades. Tres de ellas, incluida la del paquete go-rmputils vulnerable, recibieron CVE y se publicaron en la Snyk Vulnerability Database. Snyk sigue trabajando con los responsables del mantenimiento de los otros dos paquetes vulnerables para garantizar que haya una corrección disponible antes de divulgar públicamente las vulnerabilidades.

En el caso de go-rpmutils, después de descubrir y confirmar que la vulnerabilidad podía explotarse, George intentó comunicarse con el responsable del mantenimiento del paquete, que en este caso era una organización: SAS Software. El primer contacto se realizó por correo electrónico a la dirección indicada en el perfil de la organización para el repositorio. Aunque finalmente se comprobó que esa no era la dirección adecuada para este tipo de reportes, la notificación de George se reenvió rápidamente a una persona dedicada a gestionar este tipo de divulgaciones. Más adelante, Snyk supo que SAS Software sí tenía una dirección de correo electrónico específica para reportar vulnerabilidades. Muchos miembros de las comunidades de seguridad y desarrollo consideran que esta es una buena práctica.
En cualquier caso, SAS Software respondió durante todo el proceso; la respuesta inicial a la divulgación llegó en cuestión de horas. George colaboró con el personal de seguridad para garantizar la divulgación pública responsable de la vulnerabilidad una vez que hubiera una corrección disponible. El equipo del proveedor respondió rápidamente con una corrección, que George pudo probar y validar para confirmar que remediaba la vulnerabilidad de manera suficiente. La vulnerabilidad se publicó finalmente el 5 de junio de 2020, solo seis días después de la notificación inicial al proveedor.
Este caso es un excelente ejemplo de la colaboración entre investigadores y responsables del mantenimiento que puede darse cuando todas las partes se comprometen a abordar los problemas de seguridad de manera responsable y eficiente. En este caso, el responsable del mantenimiento, SAS Software, respondió con rapidez y tomó medidas contundentes para resolver el problema. Snyk y SAS Software pudieron colaborar para garantizar que la corrección solucionara por completo el problema y que los detalles de la vulnerabilidad se hicieran públicos solo después de que hubiera una corrección disponible. Si hay algo que podemos aprender de esta historia para mejorar de cara al futuro, es que conviene tener un canal específico para reportar vulnerabilidades. También deberías facilitar su acceso publicándolo en los archivos README y en el perfil del repositorio.
El objetivo de Snyk es verificar la validez y la posibilidad de explotar las vulnerabilidades, y ofrecer a los responsables del mantenimiento divulgaciones responsables y orientación detallada para corregirlas. Para obtener más información sobre esta vulnerabilidad o saber cómo reportar una vulnerabilidad que hayas descubierto en un proyecto de código abierto, consulta los enlaces que aparecen a continuación.
Empieza con los retos de Capture the Flag
Aprende a resolver retos de Capture the Flag viendo nuestro taller virtual de nivel básico a pedido.