
Ein Tool zur Variantenanalyse und Visualisierung, das Codebasen auf ähnliche Schwachstellen scannt.
![]()
C0deVari4nt ist ein Werkzeug zur Variantenanalyse und Visualisierung, das Codebasen auf ähnliche Sicherheitslücken untersucht. Es nutzt CodeQL, eine semantische Code-Analyse-Engine, um Code basierend auf benutzerdefinierten CodeQL-Abfragevorlagen abzufragen und die Ergebnisse an unsere mit vis.js und React erstellte Clientschnittstelle zur weiteren Erkundung und Visualisierung weiterzuleiten. Dies ermöglicht eine schnelle und umfassende Variantenanalyse auf Basis früherer Sicherheitsberichte. Die vis.js-Visualisierungsfunktion bietet Entwicklern zusätzliche Einblicke in verwundbare Codepfade und ermöglicht ihnen, potenzielle Varianten effektiv zu priorisieren.

Der Log4Shell-Vorfall im Dezember 2021 zeigte die Schwierigkeiten auf, mit denen Open-Source-Entwickler bei der Reaktion auf Sicherheitsmeldungen konfrontiert sind. Nach dem anfänglichen Patch für CVE-2021-44228, der es nicht authentifizierten entfernten Angreifern ermöglichte, die Kontrolle über Geräte mit verwundbaren Versionen von Log4j 2 zu übernehmen, veröffentlichte Apache drei zusätzliche Patches, um verwandte Schwachstellen und nicht abgedeckte Grenzfälle zu beheben.
Open-Source-Entwickler haben oft keine Schulung in umfassender Code-Überprüfung und haben Probleme bei der Identifizierung von Varianten einer Schwachstelle, was zu unvollständigen Patches führt. Obwohl CodeQL-Abfragesammlungen existieren, um eine schnelle Analyse der Codebasis zu ermöglichen, können die Ergebnisse dieser Sammlungen zu erheblichen Fehlalarmraten führen. Darüber hinaus basieren diese Sammlungen auf vordefinierten Abfragen, die keine Variantenanalyse unterstützen und nicht für einzelne Codebasen angepasst sind. Daher reagieren Open-Source-Projekte oft stückweise auf Sicherheitsmeldungen und übersehen dabei potenzielle Varianten.
C0deVari4nt bietet eine Plattform für Entwickler, um Variantenanalyse einfach durchzuführen, ohne den erheblichen Aufwand, eigene CodeQL-Abfragen zu schreiben. Dies gibt Entwicklern die Flexibilität, CodeQL-Vorlagen anzupassen, indem sie codebasisspezifische Informationen wie eine bestimmte Quelle und Senke einer Schwachstelle bereitstellen. Die Ergebnisse werden in einer von vis.js unterstützten Graphdatenbankansicht visualisiert, damit Entwickler schnell potenzielle Varianten identifizieren können. So können Entwickler ganze Klassen von Fehlern aus einem einzigen Sicherheitsbericht effektiv beheben.
C0deVari4nt wurde mit Python, CodeQL, vis.js und React erstellt, um eine interaktive GUI-Anwendung zu schaffen, die Benutzereingaben entgegennimmt und Beziehungen zwischen verschiedenen verwundbaren Codepfaden aufzeigt.

C0deVari4nt besteht aus den folgenden 2 Hauptkomponenten:
Weitere Details zur Client-Schnittstelle sind unten zu sehen:

dbextractor.py <codeql db zip file> aus, um den Inhalt der CodeQL-Datenbank zu entpacken.pip install -r requirements.txtuvicorn main:app --reload aus, um den lokalen Entwicklungsserver auf Port 8000 zu starten.npm inpm start aus, um den lokalen Entwicklungsserver zu starten.
strcat-Funktionen ohne Grenzprüfungen des Quellargumentsstrncpy-Funktionen ohne Grenzprüfungen des Quellargumentssnprintf
malloc, calloc oder realloc ohne ausreichende Speicherzuweisung, um eine Instanz des Zeigertyps aufzunehmen.isAdditionalTaintStep, um Kontaminationen zwischen 2 nicht verbundenen Funktionen zu übertragen.isAdditionalTaintStep, um Kontaminationen zwischen Zeigern zu übertragen, die zur Laufzeit dieselben Werte haben.Das Folgende zeigt die CodeQL-Ergebnisse für eine Abfrage mit recvfrom als Quelle, mempool_alloc als zusätzlichem Kontaminationsschritt und memcpy als Senke:

Dieses Ergebnis liefert insgesamt 180 Knoten in 27 verschiedenen Codepfaden. Die Ergebnisse werden unten in einer einfachen neo4j-Oberfläche dargestellt:

Indem wir diese Abfrage durch unser Tool laufen ließen, konnten wir doppelte Vorkommen jedes Knotens, jeder Quelle und jeder Senke identifizieren und die Beziehungen der Knoten zusammenführen. Dies führte zu einem deutlich saubereren Graphen mit insgesamt 11 eindeutigen Knoten, während alle 27 eindeutigen Codepfade erhalten blieben:

Die Ergebnisse können durch unsere Pfadkennzeichnungsfunktion weiter in ihre jeweiligen Pfade kategorisiert werden:

