Whitepaper, das fehlerbasierte und boolesche fehlerbasierte Blind-Techniken für SSTI und Code Injection vorstellt, mit universellen Payloads für sechs Programmiersprachen und Integration in SSTImap.
[!NOTE] Dies ist die zweite Version des Whitepapers auf Basis der Ergebnisse, die ich vor der Veröffentlichung von SSTImap Version 1.3.1 vorgestellt habe. Weitere Verbesserungen werden zu einem späteren Zeitpunkt als Version 1.2 der Forschung an dieses Format angepasst.
Einige Kategorien von Schwachstellen erscheinen auf den ersten Blick vielleicht bekannt und etwas offensichtlich. Es könnte scheinen, dass alle möglichen Techniken für diese Schwachstellen bekannt sind, sodass nur noch Payloads für ungewöhnliche Fälle entdeckt werden könnten. Server-Side Template Injection (SSTI) und Code Injection werden oft als diese bekannten Kategorien betrachtet.
Manchmal werden neue Techniken mit selbsterklärenden Namen für diese Schwachstellen angetroffen. Viele Forscher könnten diese Techniken ebenfalls als bekannt betrachten oder sich sogar erinnern, sie verwendet zu haben, aber in Wirklichkeit existiert die Technik möglicherweise nur als allgemein verstandener Name ohne Forschung, Beschreibungen oder universelle Payloads. Sie wird vielleicht ein paar Mal zusammen mit Payloads für sehr spezifische Fälle erwähnt, aber nicht systematisch getestet, und das wahre Potenzial dieser Technik könnte jahrelang unentdeckt bleiben.
Diese Forschung stellt zwei solcher Techniken für Code Injection und SSTI vor: Error-Based (fehlerbasiert) und Boolean Error-Based Blind (boolesch fehlerbasiert blind). Ich werde Payloads für Code Injection und SSTI in sechs Programmiersprachen bereitstellen: Python, PHP, Java, Ruby, NodeJS und Elixir. Darüber hinaus werde ich universelle Erkennungs-Payloads bereitstellen, die in der Lage sind, selbst blinde Injektionen schnell zu erkennen.
Ich werde den vollständigen Zeitplan meiner Forschung darlegen, vom Finden der ersten Hinweise bis zu den endgültigen Schlussfolgerungen. Ich werde auch den Prozess der Erstellung neuer Payloads für Programmiersprachen und Templates untersuchen, die in dieser Forschung nicht erwähnt werden.
In dieser Forschung werde ich Beispiele für praktische Anwendungen der neuen Techniken zeigen und potenzielle Bereiche für weitere Forschung teilen. Alle bereitgestellten Payloads können verwendet werden, um Schwachstellen in realen Anwendungen zu erkennen und auszunutzen. Zusätzlich wurden alle bereitgestellten Payloads zum Open-Source-Tool SSTImap hinzugefügt, was die Anwendung der Ergebnisse dieser Forschung auf reale Ziele erleichtert.
Server-Side Template Injection-Schwachstellen treten auf dynamischen Websites auf, die Template-Engines für serverseitiges Rendering verwenden, wenn die nicht vertrauenswürdige Benutzereingabe in das Template eingefügt wird, bevor es von der Template-Engine verarbeitet wird. Ein böswilliger Akteur kann gültige Template-Syntax einfügen, die während des Seiten-Renderings von einer Template-Engine verarbeitet wird. Viele Template-Engines bieten eine Form von Code-Ausführungsfunktionalität, was oft zu Remote Code Execution (RCE) auf dem Zielserver führt. Diese Forschung konzentriert sich auf Template-Engines, die im Falle einer Ausnutzung solche Fähigkeiten bereitstellen.
SSTI-Schwachstellen sind seit 2015 bekannt, und in dieser Zeit wurden viele Payloads entdeckt, die Informationsdiebstahl, Filterumgehungen und Sandbox-Escape ermöglichen. Trotzdem geben die meisten Payloads entweder das Ergebnis direkt auf der Seite aus oder konzentrieren sich auf die Tatsache der Code-Ausführung selbst, ohne die von diesem Code produzierten Ergebnisse zu berücksichtigen.

Eine weitere bekannte SSTI-Technik ist die Time-Based Blind (zeitbasierte blinde), bei der eine Verzögerung zum ausgeführten Shell-Befehl hinzugefügt wird. Diese Technik erlaubt es, den Erfolg der injizierten Code-Ausführung zu bestimmen, erfordert jedoch das Erraten des Payloads für die OS-Befehlsausführung, was es schwieriger macht, blinde SSTI in einer dem Forscher unbekannten Template-Engine zu erkennen.

Die SSTI-Schwachstellenklasse und beide bekannten Ausnutzungstechniken wurden 2015 von James Kettle entdeckt. Diese Techniken werden in seiner Forschung "Server-Side Template Injection: RCE For The Modern Web App" detailliert beschrieben. [^1] In den zehn Jahren seitdem wurden keine neuen Ausnutzungstechniken dokumentiert. Nur eine Erkennungstechnik wurde 2023 entdeckt, die Polyglot-Payloads verwendet, um mehrere Template-Engines auf einmal zu testen. Diese Technik wurde von Maximilian Hildebrand entdeckt und in seiner Forschung "Improving the Detection and Identification of Template Engines for Large-Scale Template Injection Scanning" beschrieben. [^2] Die Technik konzentriert sich darauf, die Template-Engines mit einer minimalen Anzahl von Anfragen zu bestimmen, funktioniert aber nur für einfache Injektionskontexte.

Die meisten Template-Engines, die auf interpretierten Programmiersprachen wie PHP, NodeJS und Python basieren, erlauben direkt die Auswertung von Ausdrücken der entsprechenden Programmiersprachen. Diese Fähigkeit erlaubt es uns, Payloads für eine breitere Kategorie von Code-Injection-Schwachstellen zu verwenden, indem wir sie in das korrekte Format des Template-Tags einwickeln.
Code Injection kann auch ohne SSTI auftreten, wenn nicht vertrauenswürdige Benutzereingaben an eval() oder eine ähnliche gefährliche Funktion gelangen.
Es wird oft angenommen, dass die Ausnutzung von Code Injection nur das Programmieren in der entsprechenden Sprache ist,
daher werden Techniken und Payloads nur für spezifische Schwachstellenbeispiele dokumentiert, die eine Anpassung des Codes an die Zielanwendung erfordern.
Das Fehlen allgemeinerer Erkennungstechniken für Code Injection und SSTI führt zur Ineffizienz von Black-Box-Scans für blinde Code- und Template-Injektionen.