
PHP 8.5.11 - 치명적 - 원격 - UAF - CVE-2026-109619 PHP2Shell. Apache mod_php에서 동일 워커 치명적 백트레이스 후 INI 진단. 실험실 대 8.5.12. 권고 RCE 추정.
인터넷상의 누구든 비밀번호 없이 브라우저와 동일한 방식으로 여러분의 PHP 사이트와 통신할 수 있습니다. 마지막으로 영향을 받는 PHP 8.5에서 공격자는 하나의 요청을 치명적 오류로 강제 종료시킨 뒤, 동일한 워커에 두 번째 요청을 보낼 수 있습니다. PHP 8.5는 요청 힙이 사라진 후에도 해당 치명적 오류의 백트레이스를 워커 전역 메모리에 유지합니다. 두 번째 요청은 엔진이 스스로를 리셋하기 전에 남아 있는 INI 플래그를 적용하는 과정에서 이 백트레이스를 읽습니다. 이 실습 환경에서 두 번째 요청은 Apache 자식 프로세스를 죽입니다. PHP Group은 동일한 패턴이 웹 워커 권한으로 원격 코드 실행(RCE)으로 이어질 수 있음을 보여주었습니다.
분류: UAF / 크래시 도달 범위: 원격
PHP 8.5.11 (php:8.5.11-apache) 대 패치된 8.5.12 - php.net
CVE-2026-109619는 오래된 워커 전역 상태(stale worker-global state)입니다. 실습 환경은 Apache prefork를 하나의 자식 프로세스로 고정하고, fatal_error_backtraces=On으로 치명적 오류를 발생시킨 뒤, php_request_startup() 이전에 적용되는 디렉터리별 php_flag auto_detect_line_endings on / report_memleaks off로 이를 소비합니다. 8.5.11: 생산자(producer) 200 치명적 오류, 소비자(consumer) 연결 재설정, Apache 로그 zend_mm_heap corrupted. 8.5.12: 동일한 2단계가 정상 유지됨(consumer-ok). Apache 워커 권한의 RCE는 GHSA에서 추론된 것입니다.
| ID | CVE-2026-109619 |
| 권고 | GHSA-6wmf-4rv5-p3rp |
| 분류 | UAF / 크래시 (권고상 RCE 추론) |
| 도달 범위 | 원격 (인증 없는 HTTP, 동일 워커) |
| CWE | CWE-416 / CWE-825 |
| CVSS | 치명적: 9.2 CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H (PHP Group) |
| 제품 | PHP |
| 영향 받음 | PHP 8.2 8.2.35 이전, 8.3 8.3.36 이전, 8.4 8.4.27 이전, 8.5 8.5.12 이전 (실습 고정 8.5.11, 백트레이스 경로는 8.5) |
| 수정됨 | 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 (2026년 10월 21일) |
| 인증 | 없음 |
| 라이선스 | GNU Affero GPL v3.0 |
| 실습 환경 | 127.0.0.1 전용 |
자매 취약점: CVE-2026-109618 OOM longjmp (PHP2Shell 쌍).
| 방법 | 싱크 | 권한 |
|---|---|---|
동일한 Apache prefork 자식 프로세스에서 인증 없는 GET /producer.php 후 GET /consumer.php | 8.5 fatal_error_backtraces가 종료 시 리셋되지 않음; php_request_startup() 이전의 INI 진단 | 가용성 (실습 입증): 8.5.11에서 해당 자식 프로세스 종료(zend_mm_heap corrupted, 연결 재설정). 무결성 (추론): 댕글링 백트레이스 포인터; 벤더는 www-data 권한의 RCE를 보여주었음. 정찰 (추론): 남은 요청 힙 노출. |
| 8.5.12에서 동일한 2단계 | 완전한 상태 리셋 | 차단됨 (실습 입증): 소비자 본문 consumer-ok, 워커 정상 유지. |
error_reporting / display_errors / @ | 경고가 여전히 오래된 상태를 소비함 | 완화책으로서 차단됨. 전역 상태는 PHP가 진단을 보고할지 결정하기 전에 접근됨. |
FPM 풀 .user.ini | 정상 초기화 이후 적용됨 | 이 조기 소비자로서 차단됨. FPM은 프런트엔드 PHP_VALUE / PHP_ADMIN_VALUE가 필요함. 세션 업로드 진행률은 두 번째로 확인된 벤더 경로(mod_php 및 FPM); 이 실습 환경은 8.5 백트레이스 경로를 사용함. |
로그인, 리버스 셸, 사용자 정의 .so | 해당 없음 | 차단됨. RIP 제어는 시도되지 않음. |
실습 입증 vs 추론: 동일 워커 UAF/크래시 대 패치된 대조군은 실습으로 입증됨. RCE는 GHSA-6wmf-4rv5-p3rp에서 추론됨.
요구 사항: 하나의 워커로 고정된 Apache apache2handler prefork. PHP 8.5 fatal_error_backtraces=On. 디렉터리별 INI 진단. 공식 php:8.5.11-apache 대 php:8.5.12-apache.
python3 php-stale-global-uaf-Abraxas-Labs.py
또는 cd lab && ./run.sh. 루프백 127.0.0.1:18222 (8.5.11) 대 127.0.0.1:18223 (8.5.12). Compose 프로젝트 cve-2026-109619. Witness CVE-2026-109619-UAF-WITNESS. 마지막 줄:
SUCCESS CVE-2026-109619 vuln-uaf=yes vuln-crash=yes patched-ok=yes sapi=apache2handler pin=same-worker vuln-image=php:8.5.11-apache patched-image=php:8.5.12-apache how=backtrace crash=connection-reset CVE-2026-109619-UAF-WITNESS
승인된 실험실 전용입니다. 루프백과 통신합니다.
PHP 8.5.12(또는 8.2.35 / 8.3.36 / 8.4.27)로 업데이트하세요. 그때까지는: 8.5에서 fatal_error_backtraces=0(이 프로듀서에만 해당); session.upload_progress.enabled=0(세션 경로에만 해당); 요청별 deprecated INI 제거; 가능하다면 pm.max_requests=1. 완전한 범용 구성 완화 방법은 없습니다.
Abraxas Labs [email protected]