
Ein CodeQL-Workshop zu CVE-2021-21380
In diesem Workshop werden wir syntaktische und semantische Schlussfolgerungen verwenden, um eine SQL-Injection in der Rating-Komponente der XWiki-Plattform zu finden, die durch CVE-2021-21380 dokumentiert ist.
Bitte arbeiten Sie diesen Abschnitt, wenn möglich, vor dem Workshop durch.
Installieren Sie Visual Studio Code.
Installieren Sie die CodeQL-Erweiterung für Visual Studio Code.
Sie müssen die CodeQL-CLI nicht installieren: Die Erweiterung übernimmt dies für Sie.
Klonen Sie dieses Repository:
git clone https://github.com/advanced-security/codeql-workshop-cve-2021-21380.git
xwiki-platform-CVE-2021-21380.zip in der Explorer-Ansicht und wählen Sie den Befehl CodeQL: Set Current Database.Cmd/Ctrl+Shift+P) nach dem Befehl CodeQL: Install Pack Dependencies und führen Sie ihn aus.github in das Feld ein, um die Liste zu filtern.cve-2021-21380-exercises, cve-2021-21380-exercises-tests, cve-2021-21380-solutions und cve-2021-21380-solutions-tests.Der Workshop ist in mehrere Übungen unterteilt, die die QL-Sprachunterstützung für Java vorstellen, und endet mit einer abschließenden Abfrage, um die bekannte SQL-Injection zu finden. In diesen Übungen lernen Sie:
In diesem Workshop suchen wir nach bekannten SQL-Injection-Schwachstellen in der Rating-API-Komponente der XWiki Platform. Solche Schwachstellen können in Anwendungen auftreten, wenn Informationen, die von einem externen Benutzer kontrolliert werden, in Anwendungscode gelangen, der auf unsichere Weise eine SQL-Abfrage erstellt und ausführt.
Die in diesem Workshop behandelte bekannte SQL-Injection wird in GHSA-79rg-7mv3-jrr5 in der GitHub Advisory Database überprüft. Um die SQL-Injection und mögliche Varianten zu finden, gehen wir die folgenden Teilprobleme an:
In den ersten Übungen werden wir mithilfe des abstrakten Syntaxbaums (AST) über syntaktische Informationen schlussfolgern, um Folgendes zu identifizieren:
Finden Sie alle Methoden mit dem Namen getAverageRating und ihrem deklarierenden Typ im Programm, indem Sie die Abfrage exercise1.ql vervollständigen.
java-Modul stellt eine Klasse Method bereit, um über Methoden in einem Programm zu schlussfolgern.Method stellt die Member-Prädikate getName und hasName bereit, um über den Namen einer Methode zu schlussfolgern.Method stellt das Member getDeclaringType bereit, um über den Typ zu schlussfolgern, der die Methode deklariert.Eine Lösung finden Sie in der Abfrage exercise1.ql
Eine Lösung zu Übung 1 gibt eine Liste von Methoden zurück. Einige davon sind in einem Interface namens RatingsManager definiert, andere in den Klassen AbstractRatingsManager und RatingsScriptService.
Aus den von der Abfrage zurückgegebenen Informationen und der XWiki-Komponentendokumentation können wir ableiten:
Role annotiert ist, und einer Implementierung, die mit Component annotiert ist.ScriptService erweitert, wird Wiki-Seiten über Scripting zugänglich gemacht.Finden Sie alle Klassen, die mit der Annotation Component annotiert sind, indem Sie die Abfrage exercise2.ql vervollständigen.
Beachten Sie, dass der voll qualifizierte Name des Typs der Annotation org.xwiki.component.annotation.Component ist.