Compartir:
¡Hola estimados lectores! ¿Alguna vez os habéis preguntado cómo realiza investigación de seguridad el GitHub Security Lab? En este artículo, aprenderás cómo aprovechamos productos y características de GitHub como el escaneo de código, CodeQL, Codespaces y la notificación privada de vulnerabilidades. Para cuando terminemos, habrás dominado el arte de configurar rápidamente un entorno limpio y temporal para el descubrimiento, verificación y divulgación de vulnerabilidades en software de código abierto (OSS).
Al explorar el contenido de este artículo, notarás que cubrimos una amplia gama de herramientas de GitHub. Si tienes comentarios o preguntas, te animamos a participar en nuestras discusiones de la comunidad. Ten la certeza de que este artículo está diseñado para ser accesible a lectores independientemente de su familiaridad previa con las herramientas mencionadas. ¡Así que embarquémonos en este viaje juntos!
El concepto de un «objetivo interesante» puede tener diferentes significados para cada uno de vosotros basado en el objetivo de vuestra investigación. Para encontrar un «objetivo interesante» y también para que esto sea divertido, tendrás que establecer algunos filtros primero, a menos que realmente quieras sumergirte en cualquier cosa. Desde el lenguaje en el que está escrito el proyecto, hasta la superficie que revela (¿es una aplicación? ¿un marco de trabajo?), cada aspecto es importante para tener un objetivo claro.
Muchas veces, necesitamos buscar extensamente el uso de un método o biblioteca específico. Ya sea para obtener inspiración para usarlo, o para vulnerarlo, la búsqueda de código de GitHub está ahí para nosotros. Podemos usar esta característica para buscar en todos los repositorios públicos de GitHub con filtros de lenguaje, ruta y expresiones regulares.
Por ejemplo, generalmente uno de estos aspectos es la cantidad de personas que usan el proyecto (es decir, los que se verían afectados si ocurriera una vulnerabilidad), lo cual es proporcionado por la red de dependencias de GitHub, pero no termina allí: también nos interesa la frecuencia con la que se actualiza el proyecto, la cantidad de estrellas, los contribuidores recientes, etc. Afortunadamente para nosotros, algunas mentes muy inteligentes en la Open Source Security Foundation (OpenSSF) ya han hecho un trabajo considerable en este tema.
La OpenSSF creó el Open Source Project Criticality Score, que «define la influencia e importancia de un proyecto. Es un número entre 0 (menos crítico) y 1 (más crítico)». Para obtener más información sobre los detalles del algoritmo de puntuación, se pueden encontrar en el repositorio ossf/criticality_score. Unos meses después del lanzamiento, Google recopiló información para los 100 mil repositorios de GitHub más importantes y la compartió en una hoja de cálculo.
En el GitHub Security Lab, estamos continuamente analizando proyectos OSS con el objetivo de mantener el ecosistema de software seguro, enfocándonos en proyectos de alto perfil en los que todos dependemos y confiamos. Para encontrar estos, basamos nuestras listas de objetivos en la puntuación de criticidad de OpenSSF.
Publicamos nuestra revisión de código de Frigate en la que explotamos una deserialización de datos controlados por el usuario usando el cargador por defecto de PyYaml. Es un gran proyecto para usar como ejemplo en este artículo, dado sus más de 1,6 millones de descargas del contenedor Frigate en el momento de escribir y la facilidad del proceso de configuración.
Una vez que hemos identificado nuestro objetivo, bifurquemos el repositorio.
Cuando el escaneo de código está “conectado” con una herramienta de análisis estático como CodeQL de GitHub, es cuando sucede la magia. CodeQL es el motor de análisis de código estático desarrollado por GitHub para automatizar verificaciones de seguridad. CodeQL realiza análisis semántico y de flujo de datos, «permitiéndote consultar el código como si fuera datos». La curva de aprendizaje de CodeQL al principio puede ser algo empinada, pero vale la pena el esfuerzo ya que sus bibliotecas de flujo de datos permiten una solución para cualquier tipo de situación.
Con la configuración predeterminada de CodeQL ya encontrarás problemas impactantes. Sin embargo, si eres un equipo de seguridad como el GitHub Security Lab, puedes preferir utilizar un conjunto diferente de modelos de auditoría y consultas que tengan una baja tasa de falsos negativos, o modelos personalizados impulsados por la comunidad para tu objetivo específico o metodología. Con eso en mente, recientemente publicamos nuestros CodeQL Community Packs, y usarlos es tan fácil como una línea en tu archivo de flujo de trabajo.
Pocos minutos después, los resultados se muestran en la pestaña de Seguridad; ¡veámoslo más de cerca!
Mientras que podrías pensar que ejecutar CodeQL localmente sería más fácil, el escaneo de código proporciona mecanismos adicionales integrados para evitar alertas duplicadas, priorizarlas o descartarlas. También, la cantidad de información proporcionada por una sola página de alerta puede ahorrarte mucho tiempo. Esta vista responde a algunas preguntas clave instantáneamente: qué, dónde, cuándo y cómo. Para ver todo el flujo, haz clic en «Mostrar caminos».
Ahora que estamos seguros acerca de la explotabilidad del problema, podemos pasar a la fase de explotación.
Codespaces es la solución de GitHub para entornos de desarrollo instantáneos y personalizables en la nube basados en Visual Studio Code. Usaremos Codespaces como nuestro entorno de explotación debido a su naturaleza segura (aislada) y efímera, ya que estamos a un clic de crear y eliminar un espacio de código. Aunque esta característica tiene su propia facturación, usaremos las 120 horas núcleo gratuitas al mes.
Una vez que hemos validado la vulnerabilidad y construido una prueba de concepto (PoC), podemos usar el reporte privado de vulnerabilidades para comunicarnos de manera privada con los mantenedores de Frigate.
Informar vulnerabilidades en proyectos de código abierto nunca ha sido un tema fácil por muchas razones: encontrar una forma privada de comunicarse con los mantenedores, obtener su respuesta y ponerse de acuerdo en tantos temas que una vulnerabilidad cubre es bastante desafiante en un canal de texto. Eso es lo que el reporte privado de vulnerabilidades (PVR) soluciona: un único lugar privado e interactivo en el que investigadores de seguridad y mantenedores trabajan juntos para hacer su software más seguro y sus consumidores más conscientes.
En el entorno técnico actual, GitHub sirve como un recurso valioso para los investigadores de seguridad. Con herramientas como el escaneo de código, Codespaces y la notificación privada de vulnerabilidades integradas en la plataforma, los investigadores pueden identificar y abordar eficazmente las vulnerabilidades de principio a fin.
Esta estrategia integral no solo facilita la investigación, sino que también mejora la comunidad global de ciberseguridad. Al ofrecer una plataforma segura, colaborativa y eficiente para detectar y enfrentar amenazas potenciales, GitHub empodera tanto a profesionales de seguridad experimentados como a investigadores en ciernes. Es el destino ideal para impulsar la seguridad y mantenerse al día con el panorama de amenazas en constante cambio. ¡Feliz codificación e investigación!