10/28/2026
🚨 𝗧𝗵𝗲 𝗕𝘂𝗴 𝗜𝘀𝗻’𝘁 𝗔𝗹𝘄𝗮𝘆𝘀 𝗶𝗻 𝗬𝗼𝘂𝗿 𝗔𝗽𝗽: 𝗪𝗵𝗮𝘁 𝗣𝗛𝗣𝟮𝗦𝗵𝗲𝗹𝗹 𝗮𝗻𝗱 𝗡𝗼𝗱𝗲𝟮𝗦𝗵𝗲𝗹𝗹 𝗥𝗲𝘃𝗲𝗮𝗹 𝗔𝗯𝗼𝘂𝘁 𝗥𝘂𝗻𝘁𝗶𝗺𝗲 𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆
Your SAST is green, your auth middleware is well tested and your dependencies are pinned. Yet unauthenticated requests can reach vulnerable native code. In one confirmed PHP2Shell path on Apache mod_php, that meant RCE during request parsing, before application code ran. Node2Shell exposes a different risk in Brotli decompression.
🧠 𝗪𝗵𝗮𝘁 𝗦𝘂𝗿𝘃𝗶𝘃𝗲𝘀 𝘁𝗵𝗲 𝗥𝗲𝗾𝘂𝗲𝘀𝘁?
In CVE-2026-109619, PHP worker globals can retain pointers after request-owned memory is freed. A later request handled by the same worker can act on them. Session upload progress is one confirmed attack path and PHP warns that other variants exist.
CVE-2026-109618 is another lifecycle failure. An OOM error triggers longjmp() while request memory is partly initialised and shutdown can then process invalid state. RCE was demonstrated in Apache mod_php during parsing, before application code. PHP's analysis says PHP-FPM is susceptible but no complete exploit was shown for this flaw.
⚙️ 𝗪𝗵𝗲𝗻 𝗮 𝗙𝗼𝗿𝗺𝗮𝘁 𝗘𝗿𝗿𝗼𝗿 𝗕𝗲𝗰𝗼𝗺𝗲𝘀 𝗮 𝗠𝗲𝗺𝗼𝗿𝘆 𝗘𝗿𝗿𝗼𝗿
Node2Shell (CVE-2026-111497, also called HTTP2Shell) is a flaw in Brotli decompression. An invalid block switch was treated as a need for more input rather than a format error, so the decoder kept writing into an eight-byte buffer. That out-of-bounds write can lead to a crash, memory disclosure or code ex*****on.
Express 5 body parsers, once enabled, decompress Brotli request bodies by default. On PHP Windows builds, cURL can reach the same library when response decompression is enabled.
🔎 𝗧𝗵𝗲 𝗔𝘀𝘀𝘂𝗺𝗽𝘁𝗶𝗼𝗻 𝗧𝗵𝗮𝘁 𝗕𝗿𝗲𝗮𝗸𝘀
These are different flaws with different prerequisites. Yet each has a moment when processing carries on with state whose validity has changed: freed request memory, partially initialised cleanup data or a malformed compressed stream.
🛠️ 𝗧𝗿𝗮𝗰𝗲 𝘁𝗵𝗲 𝗥𝘂𝗻𝘁𝗶𝗺𝗲, 𝗡𝗼𝘁 𝗝𝘂𝘀𝘁 𝘁𝗵𝗲 𝗖𝗼𝗱𝗲𝗯𝗮𝘀𝗲
• Inventory PHP and Node.js executables, SAPIs and bundled Brotli libraries, including container images.
• Trace untrusted multipart data and compressed request or response bodies to actual processing paths.
• Examine OOM handling, shutdown and cross-request worker state.
• Apply fixed PHP (8.2.35/8.3.36/8.4.27/8.5.12, Windows -1 rebuilds) and Node.js (22.23.4/24.22.1/26.12.1), update Brotli to 1.0.10, 1.1.1 or 1.2.1, then restart or redeploy.
• Plan upgrades for end of life lines. PHP 7.4 to 8.1 only got source backports, while PHP 7.3 and older and Node.js 25, 23, 20 and older have no fix.
🛡️ Disabling session upload progress in php.ini or the FPM pool can block documented paths before patching and PHP also advises it for the separate CVE-2026-115560. It doesn't replace the update and ini_set() in application code runs too late.