
Beispielanwendung, anfällig für CVE-2023-32692 (Validierungsregel-Injektion im PHP-Framework CodeIgniter)
CVE-2023-32692 ist eine Code-Injection-Schwachstelle im CodeIgniter 4 PHP-Framework, die die Versionen 4.0.0 bis 4.3.4 betrifft. Behoben wurde sie in 4.3.5 (veröffentlicht im Juni 2023). Dies ist eine Demo-Umgebung für alle, die damit herumspielen möchten.
Weitere Details zur Schwachstelle finden sich im MOGWAI LABS Blog.
Dieses Repository enthält eine minimale CodeIgniter-4-Anwendung, die die Schwachstelle demonstriert. Es wird eine Dev Container-Konfiguration mitgeliefert, sodass du sie direkt aus VS Code (oder einem beliebigen kompatiblen Editor) starten kannst, ohne dass eine lokale PHP-Installation erforderlich ist.
Der zugrunde liegende Docker-Container verwendet PHP 8.3 und installiert die XDebug-Erweiterung, um Debugging zu ermöglichen. Zusätzliche PHP-Module, die das CodeIgniter-Framework benötigt, werden als lokale „Devcontainer-Features“ installiert, hauptsächlich weil ich diese Funktion ausprobieren wollte.
Die folgenden VS-Code-Erweiterungen sind enthalten (alle im Container installiert, nicht in deiner VS-Code-Instanz):
| Erweiterung | Zweck |
|---|---|
xdebug.php-debug | PHP-XDebug-Unterstützung — Schritt-für-Schritt durch den verwundbaren Codepfad |
bmewburn.vscode-intelephense-client | PHP Intelephense für die Codenavigation |
humao.rest-client | HTTP-Client zum Ausführen der enthaltenen Anforderungsvorlagen |
composer installiert, hier ist kein Eingriff nötig.cp env .env
Der Dev Container enthält Apache, aber der in PHP integrierte Entwicklungsserver ist für diesen PoC ausreichend. Öffne ein Terminal in VS Code und führe Folgendes aus:
./spark serve --host 0.0.0.0
Die Anwendung ist unter http://localhost:8080 erreichbar. Du kannst sie außerhalb des Containers mit deinem normalen Webbrowser aufrufen.
Die Datei .vscode/launch.json konfiguriert XDebug so, dass es auf TCP-Port 9003 lauscht (ebenfalls im Dockerfile des Dev Containers festgelegt):
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
Starte den Debug-Listener bevor du den PHP-Entwicklungsserver startest: Klicke in der VS-Code-Seitenleiste auf das Symbol „Run and Debug“ und drücke die Play-Taste neben „Listen for Xdebug“.

Der verwundbare Endpunkt ist in app/Controllers/Poc.php implementiert. Er stellt zwei Routen bereit:
| Route | Beschreibung |
|---|---|
POST /poc/update | Verwundbarer Endpunkt — verwendet stringbasierte Validierungsregeln |
POST /poc/updateSafe | Sicherer Endpunkt — verwendet arraybasierte Validierungsregeln |
Setze einen Haltepunkt in Poc::update() und verfolge, wie der Platzhalter {id} innerhalb der CodeIgniter-Validierungsengine zur Regelzeichenfolge erweitert wird. Der relevante Framework-Code befindet sich in vendor/codeigniter4/framework/system/Validation/Validation.php.
Der Ordner http_requests/ enthält einsatzbereite Vorlagen für die VS-Code-REST-Client-Erweiterung:
| Datei | Beschreibung |
|---|---|
Öffne eine beliebige .http-Datei und klicke über dem Anforderungsblock auf Send Request, um sie auszuführen.
reqular_request.http| Legitime Standardanfrage — keine Injektion, Validierung läuft normal durch |
basic_poc.http | Injiziert zusätzliche Validierungsregeln über den Parameter id |
system_call.http | Nutzt die Injektion aus, um system() aufzurufen und einen OS-Befehl auszuführen (touch /tmp/pwn) |