
Una herramienta de análisis de variantes y visualización que escanea bases de código en busca de vulnerabilidades similares.
![]()
C0deVari4nt es una herramienta de análisis de variantes y visualización que inspecciona bases de código en busca de vulnerabilidades similares. Aprovecha CodeQL, un motor de análisis semántico de código, para consultar código basado en plantillas de consulta CodeQL controladas por el usuario y pasa los resultados a nuestra interfaz cliente construida con vis.js y React para su posterior exploración y visualización. Esto permite un análisis de variantes rápido y completo basado en informes de vulnerabilidades anteriores. La función de visualización de vis.js proporciona información adicional a los desarrolladores sobre las rutas de código vulnerables y les permite priorizar eficazmente las variantes potenciales.

El incidente Log4Shell en diciembre de 2021 puso de relieve las dificultades que enfrentan los desarrolladores de código abierto para responder a informes de vulnerabilidades. Después del parche inicial para CVE-2021-44228, que permitía a atacantes remotos no autenticados tomar el control de dispositivos que ejecutan versiones vulnerables de Log4j 2, Apache lanzó 3 parches adicionales para abordar vulnerabilidades relacionadas y casos límite no mitigados.
Los desarrolladores de código abierto a menudo carecen de formación en revisiones exhaustivas de código y enfrentan problemas para identificar variantes de una vulnerabilidad, lo que lleva a parches incompletos. Aunque existen suites de consultas CodeQL para facilitar el análisis rápido de la base de código, los resultados devueltos por estas suites pueden generar tasas de falsos positivos significativas. Además, estas suites se basan en consultas predefinidas que no admiten análisis de variantes y no están personalizadas para bases de código individuales. Como resultado, los proyectos de código abierto a menudo responden a informes de vulnerabilidades de manera fragmentada, omitiendo variantes potenciales.
C0deVari4nt proporciona una plataforma para que los desarrolladores realicen fácilmente análisis de variantes sin la sobrecarga significativa de escribir sus propias consultas CodeQL. Esto brinda a los desarrolladores la flexibilidad de personalizar plantillas CodeQL proporcionando información específica de la base de código, como una fuente y un sumidero particulares de una vulnerabilidad. Los resultados se visualizarán en una vista de base de datos de gráficos impulsada por vis.js para que los desarrolladores identifiquen rápidamente variantes potenciales. De esta manera, los desarrolladores podrán abordar eficazmente clases enteras de errores a partir de un solo informe de vulnerabilidad.
C0deVari4nt está construido con Python, CodeQL, vis.js y React para crear una aplicación GUI interactiva que toma la entrada del usuario y muestra las relaciones entre diferentes rutas de código vulnerables.

C0deVari4nt consta de los siguientes 2 componentes principales:
Más detalles de la interfaz de cliente se pueden ver a continuación:

dbextractor.py <archivo zip de la base de datos codeql> para descomprimir el contenido de la base de datos codeqlpip install -r requirements.txtuvicorn main:app --reload para iniciar el servidor de desarrollo local en el puerto 8000npm inpm start para iniciar el servidor de desarrollo local
strcat sin comprobaciones de límites en el argumento fuentestrncpy sin comprobaciones de límites en el argumento fuentesnprintf
malloc, calloc o realloc sin suficiente memoria asignada para contener una instancia del tipo del punteroisAdditionalTaintStep para transferir contaminación entre 2 funciones desconectadasisAdditionalTaintStep para transferir contaminación entre punteros que tienen los mismos valores en tiempo de ejecuciónLo siguiente muestra los resultados de CodeQL para una consulta con recvfrom como fuente, mempool_alloc como paso de contaminación adicional y memcpy como sumidero:

Este resultado arroja un total de 180 nodos en 27 rutas de código diferentes. Los resultados se muestran en una interfaz neo4j simple a continuación:

Al pasar esta consulta a través de nuestra herramienta, pudimos identificar ocurrencias duplicadas de cada nodo, fuente y sumidero y fusionar las relaciones de los nodos.
Esto resultó en un gráfico significativamente más limpio con un total de 11 nodos únicos mientras aún se conservan las 27 rutas de código únicas:

Los resultados se pueden categorizar aún más en sus respectivas rutas a través de nuestra función de etiquetado de rutas:

