
CVE-2026-109618 / CVE-2026-109619 Audit: Session-Poisoning bis zur Befehlsausführung reproduziert; BGCTX-OOM-Voraussetzung reproduziert; behauptete Progress-Array-UAF auf Standard-Builds nicht reproduziert.
Prüfung der "php2shell"-Behauptungen, plus ein funktionierender lokaler PoC.
中文 · PHP 8.5.4 · nur für Laborumgebungen
MITRE:
CVE_RECORD_DNE· NVD: kein Eintrag · php.net: nur Vorankündigung. Dieses Repo prüft die technischen Behauptungen; es bestätigt die Identifikatoren nicht.
| Frage | Antwort |
|---|---|
| Kann es eine Shell liefern? | ✅ lokal — mit einer unserialize()-Senke + einem __destruct-Gadget |
| Ist das die CVE selbst? | ⚠️ wahrscheinlich nicht — die CVE scheint den BG-Kontext-Waisen zu betreffen (Anmerkung 08) |
| Ist es pre-auth? | ❌ der Pre-Auth-Pfad endet in unseren Tests bei ARM / einem Absturz |
| Ist das geleakte Bundle korrekt? | ❌ der post_bytes_processed-UAF lässt sich nicht reproduzieren |
multipart POST ──► php_hash_environment() ← vor RINIT
│
├─ serialize encode ──► OOM ──► BG(serialize) verwaist (64 B)
└─ unserialize decode ──► OOM ──► BG(unserialize) verwaist (8208 B)
│
▼
SAPI überlebt? ── ja ──► nächste Anfrage verwendet den freigegebenen Kontext wieder
│ │
nein ├─ Bug S: Absturz / Leak
▼ └─ Bug U: RCE-Klasse
nur DoS
Separater Fehler, der von unserem PoC genutzt wird:
var_destroy() ──► gibt Back-Ref-Chunks frei ──► Dtor-Durchlauf (kein serialize_lock)
└─ __destruct ──► inneres unserialize ──► R:N liest freigegebenen Chunk
└─ gefälschte Closure ──► zif_system(cmd)
php exploit/var_destroy_uaf_rce.php "id > /tmp/proof"
cat /tmp/proof # uid=... gid=...
Voraussetzungen: verwundbares PHP (8.5.4 verifiziert) · unserialize() auf Angreiferdaten · eine
__destruct-Klasse · Linux /proc/self/mem · build-spezifische Offsets aus nm.
| Behauptung | Ergebnis |
|---|---|
Geleaktes Bundle: post_bytes_processed-UAF | ❌ nicht reproduziert (Z_TRY_ADDREF) |
Bug S — BG(serialize)-Waise | ⚠️ UAF 3/3 unter ASAN · arm reproduziert · kein RCE |
Bug U — BG(unserialize)-Waise | ⚠️ arm reproduziert · kill / system nicht reproduziert |
| var_destroy UAF → RCE | ✅ funktioniert, 10/10, selbstlokalisierend |
Session-Poisoning → include | ✅ reproduziert (bereits bestehende Technik) |
Handler-Mismatch → __destruct | ✅ reproduziert (benötigt eine Gadget-Klasse) |
| Demo-Binary-Offsets | ✅ stimmen mit 8.5.4-0ubuntu1.3 überein (delta 0xbe3f0) |
| Pfad | Inhalt |
|---|---|
exploit/var_destroy_uaf_rce.php | selbstlokalisierender UAF → RCE-PoC |
analysis/01-05 | Lebensdauer · Ablation · Versionen · geleaktes Bundle · Erreichbarkeit |
analysis/06 | BG(serialize)-Pfad + ASAN-Nachweis |
analysis/07 | Session-Poisoning → Befehlsausführung |
analysis/08 | BG-Kontext-Waisen (Re-up-Paket) |
analysis/09 | var_destroy UAF → RCE (Offsets, selbstlokalisierend) |
evidence/ | ASAN-Traces · OOM-Logs · Binary-Offsets · Läufe |
lab/ | Build-Skripte · Trigger · Matrix · Ablation |
PROVENANCE.md | Artefakt-URLs · Daten · Hashes |
Lokale Builds, lokale Apache- / php-fpm- / Docker-Labore und das genannte Ubuntu- Paket. Der PoC läuft als Benutzer des PHP-Prozesses; die Gadget-Voraussetzung ist real.