=== ТЕСТ 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 воркер не умирает между запросами