Unpatched. PHP fix due 14:00 UTC today. Mitigate now.
PHP release: 14:00 UTC
Auto-refreshes every 10s. Last updated 12:55 UTC.
php2shell, short version
- What: two critical RCEs in PHP itself, CVE-2026-109618 and CVE-2026-109619. CVSS v4.0 9.2 (PHP's rating). Memory corruption; likely in session upload progress during multipart parsing. Not officially confirmed.
- Who: leak claims PHP 5.4+. Unconfirmed. Mod_php and php-fpm both reported. Your app code can't fix it.
- Fix: out-of-cycle release at 14:00 UTC (10:00 ET) today, maybe earlier. Only 8.2–8.5 get patches. Expected 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35, unconfirmed.
- Do now: block
multipart/form-dataat the web server, or go read-only or offline. Setsession.upload_progress.enabled=0too, but it is not enough alone. Patch the minute it ships.
Live updates
-
Dozens of “php2shell PoC” repos on GitHub since midnight. Validity unknown. Don't run them on anything you care about.
-
Precautionary takedowns in NL: Tweakers, Tweede Kamer, NCSC, Security.NL all offline. Sansec
-
On Remi's repo (RHEL/Fedora)? No update today, per the PHP Foundation. Switch to distro packages or build from source now.
-
Cloudflare reports early attacks and has pushed WAF rules to every plan, free included. Only helps if your origin rejects non-Cloudflare IPs.
-
GMO Flatt Security: exploit code claiming to work is circulating. Disabling
session.upload_progressmitigates but does not stop it. Flatt (JA) -
PHP core dev Gina Peter Banyard: patching is the only mitigation. If you can afford it, take PHP offline for the day.
-
PHP security team: two criticals, CVSS v4 9.2, release Wed 14:00 UTC, earlier if details leak or exploitation appears. php.net
-
HN post says two PHP RCEs drop Thursday. Pulled fast; screenshots spread. watchTowr confirms the leak is real.
Mitigate now
Stopgaps until you can patch. None of these is a fix. Remove them after you update PHP.
1. Block multipart at the web server
PHP parses multipart bodies before your code runs, so app-level fixes and maintenance modes don't help. Reject them in front of PHP.
nginx: every server block that passes to PHP, then nginx -t && systemctl reload nginx
if ($http_content_type ~* "multipart/form-data") {
return 403;
} Apache: every <VirtualHost> serving PHP, then reload
RewriteEngine On
RewriteCond %{HTTP:Content-Type} multipart/form-data [NC]
RewriteRule ^ - [F] Breaks every file upload, plus any form sent as multipart (some carts and checkouts). Place a test order. Allowlist only upload routes you can't live without.
2. Or go read-only, or offline
Can you go a day without PHP? Stop php-fpm and serve a static page. That's the safest move. Otherwise allow only GET and HEAD:
if ($request_method !~ ^(GET|HEAD)$) {
return 503;
} 3. Put it behind Cloudflare
Cloudflare's managed WAF rules cover the known exploits on every plan. They do nothing if attackers can reach your origin directly. Firewall HTTP/HTTPS to Cloudflare's IP ranges.
4. Harden PHP settings
These reduce exposure but do not prevent the attack. Use them in addition to the steps above, never instead of them.
session.upload_progress.enabled = 0
session.use_strict_mode = 1 php-fpm ignores the CLI php.ini. Set it per pool, then reload php8.x-fpm:
; e.g. /etc/php/8.3/fpm/pool.d/www.conf, every pool
php_admin_flag[session.upload_progress.enabled] = off
php_admin_flag[session.use_strict_mode] = on 5. Verify from outside
# expect 403 (or 503 if read-only)
curl -s -o /dev/null -w '%{http_code}\n' -F probe=1 https://example.com/
# expect 200 still
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/ Check the web SAPI, not php -i. Drop this in, load it, delete it:
<?php echo ini_get('session.upload_progress.enabled') ? 'ON' : 'off'; 6. Get ready to patch
- Inventory every PHP: appliances, cPanel/Plesk, bundled
php-cgi.exe, old VMs. - On 8.1 or older? No upstream fix. Upgrade, isolate, or get a vendor backport.
- On Remi's repo? No update today. Line up distro packages or a source build.
- Managed hosting? Ask your host now to stand by for 14:00 UTC.
Watch for compromise
- Alert when
php-fpm,php-cgi,httpd, orapache2spawnssh,bash,python,perl,curl,wget,nc. - Grep for
/dev/tcp/,mkfifo,fsockopen, and quick recon likeidoruname -arun from the web user. - No EDR on Linux? Florian Roth's process-watcher logs what PHP starts. It blocks nothing.
- Hit? Isolate the box. Keep web and PHP logs. Check for new files in the web root, cron jobs, and accounts.
Send in your updates
Seen a release, an exploit in the wild, or a mitigation that works (or breaks)? Tell us. Links help. We post what we can confirm.