
Un outil d'analyse de variantes et de visualisation qui scanne les bases de code pour des vulnérabilités similaires.
![]()
C0deVari4nt est un outil d'analyse de variantes et de visualisation qui inspecte les bases de code à la recherche de vulnérabilités similaires. Il utilise CodeQL, un moteur d'analyse sémantique de code, pour interroger le code sur la base de modèles de requêtes CodeQL contrôlés par l'utilisateur et transmet les résultats à notre interface client construite avec vis.js et React pour une exploration et une visualisation approfondies. Cela permet une analyse de variantes rapide et complète basée sur des rapports de vulnérabilité antérieurs. La fonctionnalité de visualisation vis.js offre aux développeurs un aperçu supplémentaire des chemins de code vulnérables et leur permet de trier efficacement les variantes potentielles.

L'incident Log4Shell en décembre 2021 a mis en évidence les difficultés rencontrées par les développeurs open-source pour répondre aux rapports de vulnérabilité. Après le correctif initial pour CVE-2021-44228, qui permettait à des attaquants distants non authentifiés de prendre le contrôle des appareils exécutant des versions vulnérables de Log4j 2, Apache a publié 3 correctifs supplémentaires pour traiter les vulnérabilités connexes et les cas limites non traités.
Les développeurs open-source manquent souvent de formation en revue de code complète et rencontrent des problèmes pour identifier les variantes d'une vulnérabilité, ce qui conduit à des correctifs incomplets. Bien qu'il existe des suites de requêtes CodeQL pour faciliter l'analyse rapide de la base de code, les résultats renvoyés par ces suites peuvent entraîner des taux de faux positifs significatifs. De plus, ces suites reposent sur des requêtes prédéfinies qui ne prennent pas en charge l'analyse de variantes et ne sont pas personnalisées pour des bases de code individuelles. Ainsi, les projets open-source répondent souvent aux rapports de vulnérabilité de manière fragmentaire, ce qui omet les variantes potentielles.
C0deVari4nt fournit une plateforme permettant aux développeurs de mener facilement une analyse de variantes sans la surcharge significative liée à l'écriture de leurs propres requêtes CodeQL. Cela donne aux développeurs la flexibilité de personnaliser les modèles CodeQL en fournissant des informations spécifiques à la base de code, comme une source et un puits particuliers d'une vulnérabilité. Les résultats seront visualisés dans une vue de base de données graphique alimentée par vis.js pour que les développeurs puissent rapidement identifier les variantes potentielles. Ainsi, les développeurs pourront traiter efficacement des classes entières de bugs à partir d'un seul rapport de vulnérabilité.
C0deVari4nt est construit en utilisant Python, CodeQL, vis.js et React pour créer une application GUI interactive qui prend les entrées utilisateur et présente les relations entre différents chemins de code vulnérables.

C0deVari4nt se compose des 2 composants principaux suivants :
Plus de détails sur l'interface client peuvent être vus ci-dessous :

dbextractor.py <fichier zip db codeql> pour décompresser le contenu de la base de données codeqlpip install -r requirements.txtuvicorn main:app --reload pour démarrer le serveur de développement local sur le port 8000npm inpm start pour démarrer le serveur de développement local
strcat sans vérification de limites sur l'argument sourcestrncpy sans vérification de limites sur l'argument sourcesnprintf
malloc, calloc ou realloc sans mémoire suffisante allouée pour contenir une instance du type du pointeurisAdditionalTaintStep pour transférer les contaminations entre 2 fonctions déconnectéesisAdditionalTaintStep pour transférer les contaminations entre des pointeurs qui ont les mêmes valeurs à l'exécutionCe qui suit représente les résultats CodeQL pour une requête avec recvfrom comme source, mempool_alloc comme étape de contamination supplémentaire et memcpy comme puits :

Ce résultat donne un total de 180 nœuds dans 27 chemins de code différents. Les résultats sont présentés dans une interface neo4j simple ci-dessous :

En passant cette requête dans notre outil, nous avons pu identifier les occurrences en double de chaque nœud, source et puits, et fusionner les relations des nœuds.
Cela a donné un graphique nettement plus clair avec un total de 11 nœuds uniques tout en conservant les 27 chemins de code uniques :

Les résultats peuvent être davantage catégorisés dans leurs chemins respectifs grâce à notre fonctionnalité d'étiquetage des chemins :

