
PHP getimagesize() CVE-2025-14177 - Генератор эксплойта утечки памяти кучи Полностью рабочая цепочка эксплойта на Python
| Поле | Значение |
|---|
| CVE | CVE-2025-14177 |
| CWE | CWE-524 (Использование неинициализированного ресурса) |
| Серьёзность | УМЕРЕННАЯ — CVSS 6.3 |
| Основная причина | php_read_stream_all_chunks() записывает последовательные блоки в buffer[0], перезаписывая предыдущие данные неинициализированной памятью кучи |
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
Вредоносный JPEG-файл содержит увеличенный маркер APP1 (16 КБ), чтобы принудительно запустить чтение нескольких блоков. Возвращаемое поле APP1 раскрывает память кучи, которая может содержать учётные данные, токены, данные сессий или указатели ASLR.
[1] RECON Find PHP app exposing getimagesize() output (APP1 field)
[2] PREP Craft malicious.jpg (APP1 = 16KB)
[3] EXPLOIT Upload → trigger getimagesize($file, $info)
[4] EXTRACT Parse $info['APP1'] for leaked heap data
[5] IMPACT Credential theft / token extraction / ASLR bypass
python3 CVE-2025-14177.py [режим]
| Режим | Действие |
|---|---|
demo | Полная демонстрация эксплойта (по умолчанию) |
gen | Создание вредоносного JPEG + кода эксплойта PHP |
test | Генерация тестового JSON |
analyze | Создание JPEG + симуляция + анализ утечки |
flow | Вывод схемы порядка атаки |
./exploit_output/)exploit_output/
├── malicious.jpg # crafted JPEG payload (APP1 = 16KB)
├── exploit_standalone.php # deployable PHP exploit
├── exploit_report.json # full analysis report
└── test_cases.json # 3 test scenarios
| Сценарий | Вектор |
|---|---|
| 1 | Прямая загрузка → getimagesize($_FILES[…], $info) |
| 2 | Фильтр потока + LFI (php://filter/read=.../resource=...) |
| 3 | URL удалённого изображения (/preview.php?url=attacker.com/malicious.jpg) |
$infogetimagesize() с обёртками php://filterОбновите PHP до исправленной версии. Обходных путей нет — требуется исправление.
php -v # verify version
Если обновление заблокировано: удаляйте APP1 из $info перед возвратом клиенту или отключайте php://filter в allow_url_fopen.
Этот инструмент предназначен только для авторизованного тестирования безопасности. Несанкционированное использование против систем, которые вам не принадлежат или на тестирование которых у вас нет явного письменного разрешения, незаконно.