
Аудит CVE-2026-109618 / CVE-2026-109619: воспроизведено отравление сессии, приводящее к выполнению команд; воспроизведено предусловие OOM в BGCTX; заявленный UAF массива прогресса не воспроизведён на стандартных сборках.
Аудит утверждений о "php2shell", плюс один рабочий локальный PoC.
中文 · PHP 8.5.4 · только для лаборатории
MITRE:
CVE_RECORD_DNE· NVD: записи нет · php.net: только предварительное объявление. Этот репозиторий проверяет технические утверждения; он не подтверждает идентификаторы.
| Вопрос | Ответ |
|---|---|
| Может ли он дать шелл? | ✅ локально — с приёмником unserialize() + гаджетом __destruct |
| Это и есть сама CVE? | ⚠️ вероятно нет — CVE выглядит как осиротевшие BG-контексты (заметка 08) |
| Это pre-auth? | ❌ путь pre-auth останавливается на ARM / падении в наших тестах |
| Верен ли утёкший бандл? | ❌ post_bytes_processed UAF не воспроизводится |
multipart POST ──► php_hash_environment() ← before RINIT
│
├─ serialize encode ──► OOM ──► BG(serialize) orphaned (64 B)
└─ unserialize decode ──► OOM ──► BG(unserialize) orphaned (8208 B)
│
▼
SAPI survives? ── yes ──► next request reuses the freed context
│ │
no ├─ Bug S: crash / leak
▼ └─ Bug U: RCE class
DoS only
Отдельный баг, используемый нашим PoC:
var_destroy() ──► frees back-ref chunks ──► dtor walk (no serialize_lock)
└─ __destruct ──► inner unserialize ──► R:N reads freed chunk
└─ fake closure ──► zif_system(cmd)
php exploit/var_destroy_uaf_rce.php "id > /tmp/proof"
cat /tmp/proof # uid=... gid=...
Требуется: уязвимый PHP (проверено на 8.5.4) · unserialize() на данных атакующего · класс с
__destruct · Linux /proc/self/mem · смещения для конкретной сборки из nm.
| Утверждение | Результат |
|---|---|
Утёкший бандл: post_bytes_processed UAF | ❌ не воспроизведено (Z_TRY_ADDREF) |
Bug S — осиротевший BG(serialize) | ⚠️ UAF 3/3 под ASAN · arm воспроизведён · RCE нет |
Bug U — осиротевший BG(unserialize) | ⚠️ arm воспроизведён · kill / system не воспроизведены |
| var_destroy UAF → RCE | ✅ работает, 10/10, самоопределение адресов |
Отравление сессии → include | ✅ воспроизведено (существующая техника) |
Несовпадение обработчика → __destruct | ✅ воспроизведено (нужен класс-гаджет) |
| Смещения демонстрационного бинарника | ✅ совпадают с 8.5.4-0ubuntu1.3 (delta 0xbe3f0) |
| Путь | Что |
|---|---|
exploit/var_destroy_uaf_rce.php | PoC UAF → RCE с самоопределением адресов |
analysis/01-05 | время жизни · абляция · версии · утёкший бандл · достижимость |
analysis/06 | путь BG(serialize) + отчёт ASAN |
analysis/07 | отравление сессии → выполнение команд |
analysis/08 | осиротевшие BG-контексты (пакет повторного воспроизведения) |
analysis/09 | var_destroy UAF → RCE (смещения, самоопределение адресов) |
evidence/ | трассы ASAN · логи OOM · смещения бинарников · запуски |
lab/ | скрипты сборки · триггеры · матрица · абляция |
PROVENANCE.md | URL артефактов · даты · хеши |
Локальные сборки, локальные лаборатории Apache / php-fpm / Docker и указанный пакет Ubuntu. PoC выполняется от имени пользователя процесса PHP; предусловие наличия гаджета реально.