
CVE-2026-109618 / CVE-2026-109619 감사: 세션 포이즈닝에서 명령 실행까지 재현됨; BGCTX OOM 전제 조건 재현됨; 주장된 progress-array UAF는 스톡 빌드에서 재현되지 않음.
"php2shell" 주장에 대한 감사와, 동작하는 로컬 PoC 하나.
中文 · PHP 8.5.4 · 실험실 전용
MITRE:
CVE_RECORD_DNE· NVD: 기록 없음 · php.net: 사전 공지만 있음. 이 저장소는 기술적 주장을 감사하며, 식별자를 확인하지는 않습니다.
| 질문 | 답변 |
|---|---|
| 셸을 얻을 수 있는가? | ✅ 로컬에서 가능 — unserialize() 싱크 + __destruct 가젯이 있을 때 |
| 그것이 CVE 자체인가? | ⚠️ 아마 아님 — CVE는 BG 컨텍스트 고아(노트 08)로 보임 |
| 사전 인증인가? | ❌ 사전 인증 경로는 우리 테스트에서 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) 고아 | ⚠️ ASAN에서 UAF 3/3 · 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 | 자기 위치 탐지 UAF → RCE PoC |
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 프로세스 사용자로 실행되며, 가젯 전제 조건은 실제입니다.