Seguridad en Golang: vulnerabilidad que permite omitir restricciones de acceso en JWT
Leeya Shaltiel
22 de diciembre de 2020
0 minutos de lecturaEn julio, el equipo de seguridad de Snyk recibió una alerta sobre un posible problema de seguridad en el paquete JWT. Este paquete ofrece una implementación de JSON Web Tokens en Go. El problema detectado estaba relacionado con una función llamada VerifyAudience, que no funcionaba según lo esperado. La función permitía pasar un valor de comillas dobles (“”), lo que podía hacer que la verificación de la audiencia tuviera éxito cuando no debía.
Curiosamente, la vulnerabilidad se corrigió seis meses before de que se reportara el problema (la corrección incluyó validación adicional para el valor aud mediante la función ValidateAudienceAgainst). Sin embargo, la corrección se incorporó a una versión específica (v4.0.0-preview1) disponible en pkg.go.dev, pero no a la rama master del repositorio.
Al igual que en otros ecosistemas, muchos desarrolladores de Go prefieren simplemente clonar la rama master de un repositorio de GitHub. En este caso, eso implicó dos cosas:
¡El problema se reportó
afterde que ya estaba disponible una versión corregida!La cantidad de proyectos afectados por esta vulnerabilidad siguió siendo alta, principalmente porque la mayoría usa la rama master y no la etiqueta específica que incluye la corrección disponible.
Una vez que se confirmó y verificó que se trataba de una vulnerabilidad, se notificó a la persona encargada del mantenimiento del paquete. Como no recibimos respuesta y el equipo de investigación de seguridad concluyó que el problema era demasiado riesgoso, Snyk asignó un CVE y lo publicó a principios de septiembre.
Esta vulnerabilidad es solo un ejemplo de los cientos de vulnerabilidades de seguridad propias de Golang que el equipo de investigación de seguridad de Snyk descubrió este año. En este artículo, analizamos los procesos utilizados y las tendencias que Snyk observa en este ecosistema, cuya popularidad crece rápidamente.
La popularidad de Golang y el creciente riesgo de seguridad
Es difícil no impresionarse con las cifras de crecimiento que Golang ha mostrado en los últimos años. Año tras año, Golang —o Go, como se le conoce con más frecuencia— aparece entre los cinco lenguajes más queridos y más solicitados en las encuestas anuales para desarrolladores de Stack Overflow. La actividad en GitHub también es alta: Go ocupa el puesto n.º 4 en pull requests e issues, el n.º 3 en estrellas y el n.º 7 en pushes.
La practicidad, la facilidad de uso y el rendimiento son algunos de los motivos principales por los que los desarrolladores disfrutan crear con Go. Pero ¿qué pasa con la seguridad? Según la encuesta de la comunidad de Go de 2019, el 75 % de los desarrolladores de Go afirma que la seguridad es importante. Además, el equipo de Go anunció recientemente sus planes de crear una base de datos de vulnerabilidades conocidas junto con escáneres de seguridad para Golang. El riesgo de seguridad en Golang es muy real y estos son pasos importantes para que desarrollar en este lenguaje sea más seguro.
En Snyk, también hemos invertido mucho para alcanzar este mismo objetivo. Gracias al trabajo del equipo de investigación de seguridad de Snyk, desde 2019 se agregaron cientos de nuevas vulnerabilidades de seguridad de Golang a la base de datos de vulnerabilidades Snyk Intel. Cada vez más usuarios de Snyk utilizan esta información para analizar y monitorear sus proyectos de Golang en busca de vulnerabilidades de seguridad. Sin embargo, conseguirla no fue fácil: este es un ecosistema relativamente nuevo y el proceso de descubrimiento difiere considerablemente del de lenguajes de programación más consolidados.
Qué hace tan singular la investigación de seguridad en Golang
En cuanto al descubrimiento de nuevas vulnerabilidades y la investigación de seguridad en general, Go destaca por varias razones.
Primero, está la cantidad total de vulnerabilidades de seguridad. En un período relativamente corto, hemos observado un aumento significativo en su número. En comparación con lenguajes de programación más consolidados, como Java y JavaScript, el ecosistema de Go no tiene una trayectoria especialmente larga de vulnerabilidades. Sin embargo, los datos que recopilamos muestran un aumento tanto en la cantidad de paquetes y módulos como en la conciencia sobre los problemas de seguridad dentro de la comunidad de Go. ¡La cantidad de vulnerabilidades de seguridad de Golang agregadas a la base de datos de vulnerabilidades Snyk Intel en 2020 casi duplica la cantidad total de vulnerabilidades agregadas entre 2015 y 2019!

Otro dato destacable es que la variedad de tipos de vulnerabilidades también es considerablemente mayor que en otros lenguajes. ¡Solo las vulnerabilidades agregadas en 2020 abarcan 44 CWE diferentes! Esta amplia distribución, sumada a la gran cantidad de vulnerabilidades, hace que la investigación de seguridad sea muy interesante.
Más allá de los CVE: la investigación de Snyk sobre las vulnerabilidades de seguridad de Golang
No todas las vulnerabilidades se divulgan ni reciben un CVE. Además de rastrear los CVE nuevos, el equipo de seguridad de Snyk puede identificar vulnerabilidades que aún no se han divulgado oficialmente, pero que, por ejemplo, podrían estar comentándose en foros públicos. Esta investigación es uno de los pilares que hacen tan completa y singular la base de datos de vulnerabilidades Snyk Intel: ofrece una cobertura de seguridad exhaustiva que va más allá de la información pública y los informes oficiales de CVE.
Estas vulnerabilidades suelen ser las más peligrosas. Los actores maliciosos aprovechan el conocimiento anticipado de la vulnerabilidad y el período entre el momento en que se empieza a hablar de ella y el momento en que se reconoce públicamente. Saben que, una vez divulgada, es solo cuestión de tiempo para que haya una corrección disponible.
Para reducir este período, Snyk consulta diversas fuentes en línea, como foros técnicos, issues y pull requests de GitHub e incluso publicaciones en redes sociales, a fin de identificar nuevas vulnerabilidades lo antes posible y en una etapa muy temprana de su ciclo de vida. Clasificamos las vulnerabilidades y evaluamos su gravedad y si hay una corrección disponible mediante una actualización. Una vez confirmadas, las agregamos a nuestra base de datos y notificamos a los usuarios.
En el caso de Go, Snyk recibe decenas de alertas al día sobre posibles vulnerabilidades de seguridad recién identificadas. La alerta es solo el primer indicio: luego investigamos el problema a fondo para determinar si se trata de una vulnerabilidad. Al analizar el informe de seguridad, realizamos una prueba de concepto (POC) del problema y, si se confirma, asignamos un CVE a la vulnerabilidad. También nos ponemos en contacto con la persona encargada del mantenimiento del paquete de código abierto correspondiente para que tome las medidas adecuadas y mitigue el problema de seguridad lo antes posible.
La investigación que permite descubrir estas vulnerabilidades propias cumple un papel clave en la protección de las aplicaciones. De hecho, de las 10 vulnerabilidades de seguridad de Go más comunes que se encuentran entre los clientes de Snyk, 7 son vulnerabilidades propias descubiertas por Snyk que no aparecían en ninguna base de datos de CVE.
Snyk para Golang
Snyk ofrece a los equipos de desarrollo y seguridad que buscan proteger sus aplicaciones de Golang una solución fácil de implementar, que facilita las correcciones rápidas y está respaldada por información precisa sobre seguridad:
Fácil para desarrolladores: Snyk se integra sin problemas en los flujos de trabajo de desarrollo existentes, analiza proyectos en cuestión de segundos (¡incluso proyectos del tamaño de Kubernetes!) y es muy fácil de usar, lo que favorece una adopción amplia y maximiza la productividad.
Cobertura integral: Snyk identifica vulnerabilidades de seguridad Y problemas de licencias en las distintas etapas del SDLC. Es compatible con aplicaciones de Go Modules, incluidas las que se ejecutan en contenedores.
Profundidad en seguridad: desde 2019, Snyk agregó cientos de vulnerabilidades de seguridad propias de Go a la base de datos de vulnerabilidades Snyk Intel. La mayoría de estas vulnerabilidades son propias, no aparecen en la NVD y se descubrieron gracias al trabajo del equipo de investigación de seguridad de Snyk.
¿Usas Go y quieres comenzar? ¡Prueba Snyk gratis!
Comienza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.



