Curated security research, vulnerabilities, advisories and tools for practitioners.

php2shell-zeros: Unpatched 0-Day RCE Flaws and Weaponized Exploit Chains in PHP and NativePHP

github.com | vulnerability | Critical | #rce | #zero-day | #github | #php | #windows | #red-team | #vulnerability | #php2shell

Summary

# php2shell-zeros Publication-ready security research: unpatched vulnerabilities in PHP, NativePHP Mobile, and Windows PHP builds. Turnkey repro scripts, raw receipts, weaponized exploit chains....

Why it matters

These surviving flaws bypass earlier patches and demonstrate that core PHP deserialization and memory management remain fundamentally fragile, posing critical unauthenticated RCE risks to WordPress and production PHP services.
Vendor
PHP
Product
PHP
Affected versions
<= 8.5.12
CVSS
9.8
Published
Collected

📦 Full-Text Content Snapshot

R2 Archive · Full Article Preserved122 lines · 6.2 KB
📄 Raw .md⬇️ Download .md

Authors: @acd421 · @J4ck3LSyN · @ArchKnight23 | Date: 2026-10-24 | Source: github.com/ACD421/PHP

Publication-ready security research: unpatched vulnerabilities in PHP, NativePHP Mobile, and Windows PHP builds. Turnkey repro scripts, raw receipts, weaponized exploit chains.

First defensive report on the surviving flaws:Red Eye Security — Coordinated Vulnerability Disclosure They broke the story first.


Vulnerability Inventory

#FindingCVSSAttack VectorStatusFolder
1var_destroy re-entry UAF9.8Remote via unserialize() — WordPress, Docker, public URL🔴 Not fixedzero4/
2serialize-side mirror UAF9.8Remote via serialize()🔴 Not fixedzero5/
3Enum-autoload E: UAF9.8Remote via session decode🔴 Not fixedzero7/shape5/
4NativePHP bridge RCE9.8Remote via bridge API🔴 Not fixedzero6/
5Session serialize_handler RCE8.1Remote (config-dependent, CVE-2026-115560)🔴 Not fixedzero1/
6php_binary format injection8.1Remote (third delivery format)🔴 Not fixedzero1/shape10/
7Windows O_NOFOLLOW=0 RCE7.7Local (no privilege needed)🔴 Not fixedzero9/
8GC double-free → controlled call7.5Remote crash + attacker-chosen call🔴 Not fixedzero2/
9C: format crasher7.5Remote DoS (141 classes)🔴 Not fixedzero7/
10Session-wipe7.5Remote unauth DoS🔴 Not fixedzero1/
11Slow-bleed TOCTOU7.5Remote DoS + RCE insertion window🔴 Not fixedzero10/
12Jammy fleet composition—Ubuntu 22.04 LTS — all above, chained🔴 Not fixedzero8/

CVSS 3.1 computed from formula. Full details: CVE_COUNT.txt


Weapons

WeaponWhat it does
php2shell.pyRecon → option list → fire. 7 chain modules. Target / local / Docker.
pwn_unserialize.pyStandalone var-layer UAF ripper. One command → uid=0.
pwn_zero4_live.phpASLR-on, in-band bootstrap. No gdb. Heap leak → forge → zif_system.
shape12_gen.pyPayload generator: --format O|C — both entry formats.
bash
python3 weapons/php2shell.py --target http://host/
python3 weapons/pwn_unserialize.py --local --php /path --chain zero4 --cmd 'id'
bash RUN_ALL_ZEROS.sh

Live-Fire Receipts

TargetChainReceipt
Public Cloudflare URL (WordPress, php:8.5.11)zero4 full chainuid=33(www-data) via HTTP
WordPress on PHP 8.3.36 (real app, vanilla)zero4 + zero5uid=0(root) ×2
php:8.5.11 Docker (official, stripped)zero4 + zero5uid=0(root) ×2
Ubuntu jammy 8.1.2 (never-patched LTS)jammy compositionuid=0(root) all 4 stages
PHP 8.5.12 (fully patched)zero4 + zero5uid=0(root) ×2
WordPress HTTP endpointzero4 trigger10/10 kills, unauth POST
FPM flock-drop injectionzero4 delivery6/6 kills, no unserialize surface
3v4l.org (live third-party)C: crasherSIGSEGV
Windows 8.5.12 + 8.1.34 (stock)zero9 hardlinkWP4_RCE_OK zero privilege
NativePHP bridge labzero6 full chainuid=0 via in-band bootstrap
Enum E: session decodezero7/shape54/4 uid=0, distinct ASLR each shot

Build

bash
curl -sLO https://www.php.net/distributions/php-8.5.12.tar.gz && tar xzf php-8.5.12.tar.gz
mkdir b && cd b && ../php-8.5.12/configure \
  --disable-all --enable-session --enable-xml --enable-libxml --with-libxml \
  --enable-dom --enable-simplexml --enable-cli --with-readline=/usr
make -j$(nproc)

Credits

First defensive report on the surviving flaws:Red Eye Security — CVD

ContributionCredited toHow our work differs
All findings, receipts, weapons@acd421, @J4ck3LSyN, @ArchKnight23—
var_destroy UAF (zero4)dinosn (May 2026)They published first; we weaponized on vanilla stripped binaries, added C: entry, WordPress HTTP, flock-drop, public URL chain
Serialize re-entry (zero5)janhelke (GH-24373)They reported the crash; we built the first escalation to full RCE
GC regression (zero2)evankford (GH-24488)They found the bug; we receipted remote kill + controlled indirect call
Gap namingWiz research teamThey named gaps without demonstration; we provided the first receipts
CVE-2026-109618/19Calif, OpenAI, Wiz, lcfr-hax, tomash-areionThose are the patched bugs; ours covers what survived
Patch teamarnaud-lb, iluuu1994, bukka, ndossche—

Session injection technique class: prior research (Exploit-DB #50157) used LFI to include the session file. We use serialize_handler format confusion — no LFI, different delivery vector. The php_binary variant, session-wipe, cross-tenant takeover, and stock-ini race are novel to this package.


Disclosure

Findings emailed to sec@php.net after public release. Awaiting response.


📦 Full-Text Markdown Snapshot archived by Phying News · Original source: github.com