
Exemple d'application, vulnérable à CVE-2023-32692 (Injection de règles de validation dans le framework PHP CodeIgniter)
CVE-2023-32692 est une vulnérabilité d'injection de code dans le framework PHP CodeIgniter 4, affectant les versions 4.0.0 à 4.3.4. Elle a été corrigée dans la version 4.3.5 (publiée en juin 2023). Il s'agit d'un environnement de démonstration pour toute personne souhaitant l'expérimenter.
Les détails de la vulnérabilité sont disponibles sur le blog MOGWAI LABS.
Ce dépôt contient une application CodeIgniter 4 minimale qui démontre la vulnérabilité. Il est livré avec une configuration de Dev Container afin que vous puissiez le lancer directement depuis VS Code (ou tout éditeur compatible) sans installation PHP locale requise.
Le conteneur Docker sous-jacent utilise PHP 8.3 et installe l'extension XDebug pour permettre le débogage. Les modules PHP supplémentaires requis par le framework CodeIgniter sont installés en tant que fonctionnalités locales de Devcontainer, essentiellement parce que je voulais tester cette fonctionnalité.
Les extensions VS Code suivantes sont incluses (toutes installées à l'intérieur du conteneur, pas dans votre instance VS Code) :
| Extension | Objectif |
|---|
xdebug.php-debug | Support PHP XDebug — parcourez pas à pas le chemin de code vulnérable |
bmewburn.vscode-intelephense-client | PHP Intelephense pour la navigation dans le code |
humao.rest-client | Client HTTP pour exécuter les modèles de requêtes inclus |
composer lors de la construction du conteneur, aucune action supplémentaire n'est nécessaire.cp env .env
Le Dev Container inclut Apache, mais le serveur de développement intégré de PHP est suffisant pour ce PoC. Ouvrez un terminal dans VS Code et exécutez :
./spark serve --host 0.0.0.0
L'application sera disponible à l'adresse http://localhost:8080. Vous pouvez y accéder depuis l'extérieur du conteneur, en utilisant votre navigateur web habituel.
Le fichier .vscode/launch.json configure XDebug pour écouter sur le port TCP 9003 (également défini dans le Dockerfile du Dev Container) :
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
Démarrez l'écouteur de débogage avant de lancer le serveur de développement PHP : cliquez sur l'icône "Run and Debug" dans la barre latérale de VS Code et appuyez sur le bouton play à côté de "Listen for Xdebug".

Le point d'accès vulnérable est implémenté dans app/Controllers/Poc.php. Il expose deux routes :
| Route | Description |
|---|---|
POST /poc/update | Point d'accès vulnérable — utilise des règles de validation basées sur des chaînes |
POST /poc/updateSafe | Point d'accès sûr — utilise des règles de validation basées sur des tableaux |
Placez un point d'arrêt dans Poc::update() et tracez la façon dont le marqueur {id} est développé dans la chaîne de règle à l'intérieur du moteur de validation CodeIgniter. Le code pertinent du framework se trouve dans vendor/codeigniter4/framework/system/Validation/Validation.php.
Le dossier http_requests/ contient des modèles prêts à l'emploi pour l'extension REST Client de VS Code :
| Fichier | Description |
|---|---|
reqular_request.http | Requête légitime de base — pas d'injection, validation passe normalement |
basic_poc.http | Injecte des règles de validation supplémentaires via le paramètre id |
system_call.http | Exploite l'injection pour appeler system() et exécuter une commande OS (touch /tmp/pwn) |
Ouvrez n'importe quel fichier .http et cliquez sur Send Request au-dessus du bloc de requête pour l'exécuter.