
PHP getimagesize() CVE-2025-14177 - Générateur d'exploit de fuite de mémoire de tas Chaîne d'exploitation entièrement fonctionnelle en Python
getimagesize()Réservé aux tests de pénétration autorisés et à la recherche en sécurité.
| Champ | Valeur |
|---|---|
| CVE | CVE-2025-14177 |
| CWE | CWE-524 (Utilisation d'une ressource non initialisée) |
| Sévérité | MODÉRÉE — CVSS 6.3 |
| Cause racine | php_read_stream_all_chunks() écrit des blocs successifs dans buffer[0], écrasant les données précédentes avec de la mémoire heap non initialisée |
getimagesize("php://filter/.../resource=malicious.jpg", $info)
└─ php_read_stream_all_chunks()
├─ Chunk 1 (8KB) → memcpy(buffer+0, chunk1, 8192)
├─ Chunk 2 (8KB) → memcpy(buffer+0, chunk2, 8192) ← overwrites!
└─ $info['APP1'] = chunk2 + uninitialized heap garbage
Un JPEG malveillant contient un marqueur APP1 surdimensionné (16 Ko) pour forcer le chemin de lecture multi-blocs. Le champ APP1 retourné fuit la mémoire heap qui peut contenir des identifiants, jetons, données de session ou pointeurs ASLR.
[1] RECON Trouver une application PHP exposant la sortie de getimagesize() (champ APP1)
[2] PREP Préparer un JPEG malveillant (APP1 = 16 Ko)
[3] EXPLOIT Téléverser → déclencher getimagesize($file, $info)
[4] EXTRACT Analyser $info['APP1'] pour les données heap divulguées
[5] IMPACT Vol d'identifiants / extraction de jetons / contournement d'ASLR
python3 CVE-2025-14177.py [mode]
./exploit_output/)exploit_output/
├── malicious.jpg # fichier JPEG conçu (APP1 = 16 Ko)
├── exploit_standalone.php # exploit PHP déployable
├── exploit_report.json # rapport d'analyse complet
└── test_cases.json # 3 scénarios de test
| Cas | Vecteur |
|---|---|
| 1 | Téléversement direct → getimagesize($_FILES[...], $info) |
| 2 | Filtre de flux + LFI (php://filter/read=.../resource=...) |
| 3 | URL d'image distante (/preview.php?url=attacker.com/malicious.jpg) |
$infogetimagesize() avec des wrappers php://filterMettre à jour PHP vers la version corrigée. Aucune solution de contournement — correctif requis.
php -v # verify version
Si la mise à jour est bloquée : supprimer APP1 de $info avant de le renvoyer au client, ou désactiver php://filter dans allow_url_fopen.
Cet outil est uniquement destiné aux tests de sécurité autorisés. Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite est illégale.
| Mode | Action |
|---|
demo | Démonstration complète de l'exploit (par défaut) |
gen | Générer un JPEG malveillant + code PHP d'exploit |
test | Générer un fichier JSON de test |
analyze | Générer JPEG + simuler + analyser la fuite |
flow | Afficher le diagramme de la chaîne d'attaque |