=== ТЕСТ CVE-2026-109619: Use-After-Free — Шаг 1 (Создание stale state) === { "timestamp": 1792772528.2644, "step": 1, "description": "🟢 НАЧАЛО: Получен POST-запрос с заголовком session upload progress", "memory_used": 524288, "memory_peak": 524288, "data": { "request_headers": "Content-Type: multipart\/form-data, PHP_SESSION_UPLOAD_PROGRESS" }, "php_version": "5.6.40" }
Notice: ob_flush(): failed to flush buffer. No buffer to flush in /var/www/html/index.php on line 30
{ "timestamp": 1792772528.2649, "step": 2, "description": "🟡 СРАБАТЫВАЕТ CALLBACK: session.upload_progress (до выполнения кода)", "memory_used": 524288, "memory_peak": 524288, "data": { "callback": "rfc1867_callback()", "note": "Этот callback запускается ДО вашего PHP-кода!" }, "php_version": "5.6.40" }
Notice: ob_flush(): failed to flush buffer. No buffer to flush in /var/www/html/index.php on line 30
{ "timestamp": 1792772528.2651, "step": 3, "description": "🟡 Создан ГЛОБАЛЬНЫЙ УКАЗАТЕЛЬ на данные прогресса", "memory_used": 524288, "memory_peak": 524288, "data": { "global_pointer": "PS(upload_progress) = 0xa2806f", "session_data": "{\"name\":\"file_upload\",\"bytes_processed\":0,\"content\":\"MARKER_UAF_DATA_6adb89b040b8d\"}", "note": "Эти данные живут в памяти, доступной между запросами" }, "php_version": "5.6.40" }
Notice: ob_flush(): failed to flush buffer. No buffer to flush in /var/www/html/index.php on line 30
{ "timestamp": 1792772528.2652, "step": 4, "description": "🔴 Симулируем FATAL ERROR (например, превышение memory_limit)", "memory_used": 524288, "memory_peak": 524288, "data": { "error": "Fatal error в середине обработки запроса" }, "php_version": "5.6.40" }
Notice: ob_flush(): failed to flush buffer. No buffer to flush in /var/www/html/index.php on line 30
{ "timestamp": 1792772528.2653, "step": 5, "description": "🔴 longjmp() пропускает стандартную cleanup-процедуру", "memory_used": 524288, "memory_peak": 524288, "data": { "cleanup_skipped": "PHP_RSHUTDOWN_FUNCTION(session) НЕ ВЫЗВАН", "note": "Это и есть корень проблемы CVE-2026-109619" }, "php_version": "5.6.40" }
Notice: ob_flush(): failed to flush buffer. No buffer to flush in /var/www/html/index.php on line 30
{ "timestamp": 1792772528.2653, "step": 6, "description": "💀 ГЛОБАЛЬНЫЙ УКАЗАТЕЛЬ остаётся висящим (dangling pointer)", "memory_used": 524288, "memory_peak": 524288, "data": { "pointer_status": "Указывает на уже ОСВОБОЖДЁННУЮ память", "memory_freed": "true", "pointer_valid": "false" }, "php_version": "5.6.40" }
Notice: ob_flush(): failed to flush buffer. No buffer to flush in /var/www/html/index.php on line 30
{ "timestamp": 1792772528.2653, "step": 7, "description": "🟡 Воркер (worker process) остаётся активным для следующего запроса", "memory_used": 524288, "memory_peak": 524288, "data": { "worker_pid": 21, "note": "В mod_php\/FPM воркер не умирает между запросами" }, "php_version": "5.6.40" }
Notice: ob_flush(): failed to flush buffer. No buffer to flush in /var/www/html/index.php on line 30
=== ШАГ 1 ЗАВЕРШЁН: Создано состояние для UAF-атаки === Следующий запрос к этому же воркеру обратится к освобождённой памяти! Нажмите 'Шаг 2' чтобы увидеть эксплуатацию. Шаг 1: 🟢 НАЧАЛО: Получен POST-запрос с заголовком session upload progress request_headers: Content-Type: multipart/form-data, PHP_SESSION_UPLOAD_PROGRESS Шаг 2: 🟡 СРАБАТЫВАЕТ CALLBACK: session.upload_progress (до выполнения кода) callback: rfc1867_callback() note: Этот callback запускается ДО вашего PHP-кода! Шаг 3: 🟡 Создан ГЛОБАЛЬНЫЙ УКАЗАТЕЛЬ на данные прогресса global_pointer: PS(upload_progress) = 0xa2806f session_data: {"name":"file_upload","bytes_processed":0,"content":"MARKER_UAF_DATA_6adb89b040b8d"} note: Эти данные живут в памяти, доступной между запросами Шаг 4: 🔴 Симулируем FATAL ERROR (например, превышение memory_limit) error: Fatal error в середине обработки запроса Шаг 5: 🔴 longjmp() пропускает стандартную cleanup-процедуру cleanup_skipped: PHP_RSHUTDOWN_FUNCTION(session) НЕ ВЫЗВАН note: Это и есть корень проблемы CVE-2026-109619 Шаг 6: 💀 ГЛОБАЛЬНЫЙ УКАЗАТЕЛЬ остаётся висящим (dangling pointer) pointer_status: Указывает на уже ОСВОБОЖДЁННУЮ память memory_freed: true pointer_valid: false Шаг 7: 🟡 Воркер (worker process) остаётся активным для следующего запроса worker_pid: 21 note: В mod_php/FPM воркер не умирает между запросами