{"id":6248,"date":"2026-10-22T04:22:54","date_gmt":"2026-10-22T07:22:54","guid":{"rendered":"https:\/\/tucumandevelopers.com\/index.php\/2026\/10\/22\/php2shell-how-the-vulnerabilities-were-found-and-what-developers-should-check\/"},"modified":"2026-10-22T04:22:54","modified_gmt":"2026-10-22T07:22:54","slug":"php2shell-how-the-vulnerabilities-were-found-and-what-developers-should-check","status":"publish","type":"post","link":"https:\/\/tucumandevelopers.com\/index.php\/2026\/10\/22\/php2shell-how-the-vulnerabilities-were-found-and-what-developers-should-check\/","title":{"rendered":"PHP2Shell: How the Vulnerabilities Were Found\u2014and What Developers Should Check"},"content":{"rendered":"<div>\n<div>\n<p>PHP lists PHP-FPM, Apache with <code>mod_php<\/code>, <code>php-cgi<\/code>, FrankenPHP and LiteSpeed among the affected web-serving setups. It identifies <code>mod_php<\/code> as the highest-risk setup, with a demonstrated attack that runs before application code. <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\" target=\"_blank\" rel=\"noopener noreferrer\">PHP&#8217;s security advisory<\/a><\/p>\n<p>This is a runtime security issue. A vulnerable installation and a confirmed compromise are different findings; discovering an affected version does not establish that an attacker has used it.<\/p>\n<h2> <a name=\"how-the-vulnerabilities-were-found\" href=\"#how-the-vulnerabilities-were-found\"> <\/a> How the vulnerabilities were found <\/h2>\n<h3> <a name=\"earlier-investigation-provided-clues\" href=\"#earlier-investigation-provided-clues\"> <\/a> Earlier investigation provided clues <\/h3>\n<p>The PHP Foundation describes a 2024 audit performed by Quarkslab through OSTIF. While fixing an audit finding, a PHP core developer found signs of the OOM problem later associated with CVE-2026-109618.<\/p>\n<p>At that stage, a potential exploit had been theorized, but concrete attack vectors had not been found. The Foundation describes difficult compatibility and implementation trade-offs, limited specialist capacity and a decision process that delayed a fix. That is more precise than saying nobody had noticed anything before 2026. <a href=\"https:\/\/thephp.foundation\/blog\/2026\/10\/21\/todays-php-security-release-and-how-were-strengthening-php-security\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHP Foundation&#8217;s account<\/a><\/p>\n<h3> <a name=\"calif-revisited-fatalerror-behavior\" href=\"#calif-revisited-fatalerror-behavior\"> <\/a> Calif revisited fatal-error behavior <\/h3>\n<p>In its own account, Calif dates the start of its audit to <strong>30 July 2026<\/strong> and its first discovery to <strong>1 August<\/strong>. Researcher Ryan Austin examined memory-limit failures and the points where they could interrupt PHP&#8217;s native operations.<\/p>\n<p>One finding involved bookkeeping becoming visible before an operation had fully initialized its data. If an allocation failed at that point, later cleanup could treat unfinished data as valid. Calif then used the observed pattern to guide AI-assisted searches for related failure paths.<\/p>\n<p>Its timeline separates discovery from reporting: the first bug was reported to PHP on <strong>11 August<\/strong>, followed by an RCE proof of concept on <strong>14 August<\/strong>. <a href=\"https:\/\/calif.io\/php2shell\/\" target=\"_blank\" rel=\"noopener noreferrer\">Calif&#8217;s original write-up<\/a><\/p>\n<h3> <a name=\"wiz-independently-found-related-vulnerabilities\" href=\"#wiz-independently-found-related-vulnerabilities\"> <\/a> Wiz independently found related vulnerabilities <\/h3>\n<p>Wiz records its first discovery on <strong>19 August<\/strong>, RCE validation against Drupal on <strong>20 August<\/strong> and WordPress on <strong>21 August<\/strong>, and reporting to PHP on <strong>24 August<\/strong>.<\/p>\n<p>Its write-up describes four exploitable instances grouped into the two CVEs, including memory disclosure and memory corruption. WordPress, Drupal and Joomla were demonstration targets, rather than the location of the underlying PHP engine flaws. <a href=\"https:\/\/www.wiz.io\/blog\/php2shell-php-rce\" target=\"_blank\" rel=\"noopener noreferrer\">Wiz&#8217;s research and timeline<\/a><\/p>\n<p>These accounts describe overlapping work. They should not be compressed into a story about a single researcher, company or model finding everything.<\/p>\n<h2> <a name=\"what-role-did-ai-actually-play\" href=\"#what-role-did-ai-actually-play\"> <\/a> What role did AI actually play? <\/h2>\n<p>The published accounts describe researchers directing AI-assisted investigation, testing and validation. OpenAI says Calif identified a critical flaw using GPT-5.6 Sol through Patch the Planet, while Wiz independently discovered and reported both vulnerabilities. PHP&#8217;s maintainers led the fixes and release. <a href=\"https:\/\/openai.com\/index\/coordinated-disclosure-of-critical-vulnerabilities\/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenAI&#8217;s coordination account<\/a><\/p>\n<p>Wiz reports using Wiz Atlas, Gemini 4 Argon and GPT-5.6 Sol. It says adapting working exploit chains required repeated testing and debugging across different memory layouts and that frontier models reduced that effort. Those are the research team&#8217;s reported results, not a benchmark we independently reproduced. <a href=\"https:\/\/www.wiz.io\/blog\/php2shell-php-rce\" target=\"_blank\" rel=\"noopener noreferrer\">Wiz&#8217;s description of AI&#8217;s role<\/a><\/p>\n<p>The useful engineering lesson is to examine interrupted operations as carefully as successful ones: <\/p>\n<div>\n<pre><code>Operation begins \u2193 Some state becomes visible \u2193 A failure interrupts initialization \u2193 Cleanup or a later request trusts incomplete or stale state <\/code><\/pre>\n<div>\n<\/p><\/div>\n<\/p><\/div>\n<p>This is a conceptual explanation of the failure pattern, not an exploit recipe or a model of every affected path.<\/p>\n<h2> <a name=\"does-this-mean-every-wordpress-or-laravel-site-is-exposed\" href=\"#does-this-mean-every-wordpress-or-laravel-site-is-exposed\"> <\/a> Does this mean every WordPress or Laravel site is exposed? <\/h2>\n<p>The application name alone cannot answer that question. The runtime build, hosting environment and applied fixes matter.<\/p>\n<p>For example, Automattic stated on 21 October that WordPress.com, WordPress VIP, WP Cloud, Pressable and Tumblr were already protected. That prevents a misleading conclusion that every WordPress installation still requires its owner to patch PHP personally. Automattic also explains that application, theme and plugin updates alone do not replace a runtime fix. <a href=\"https:\/\/automattic.com\/2026\/10\/21\/php2shell\/\" target=\"_blank\" rel=\"noopener noreferrer\">Automattic&#8217;s notice<\/a><\/p>\n<p>Keep maintaining the application. Also establish who maintains its runtime: your team, your hosting provider or another platform operator.<\/p>\n<h2> <a name=\"which-releases-contain-the-upstream-fixes\" href=\"#which-releases-contain-the-upstream-fixes\"> <\/a> Which releases contain the upstream fixes? <\/h2>\n<p>PHP&#8217;s 21 October security releases are:<\/p>\n<div>\n<table>\n<thead>\n<tr>\n<th>PHP branch<\/th>\n<th>Fixed upstream release<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>8.5<\/td>\n<td>8.5.12<\/td>\n<\/tr>\n<tr>\n<td>8.4<\/td>\n<td>8.4.27<\/td>\n<\/tr>\n<tr>\n<td>8.3<\/td>\n<td>8.3.36<\/td>\n<\/tr>\n<tr>\n<td>8.2<\/td>\n<td>8.2.35<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Distribution and LTS vendors may backport the fix while retaining an older upstream version number. PHP 8.1 and older have no routine upstream updates; vendor fixes and exceptional minimal source backports for 7.4, 8.0 and 8.1 require checking the relevant guidance. <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\" target=\"_blank\" rel=\"noopener noreferrer\">PHP release and update guidance<\/a><\/p>\n<p>Ubuntu illustrates why the full package version matters: its notice lists fixed distribution builds, including <code>8.3.6-0ubuntu0.24.04.13<\/code> for Ubuntu 24.04. It also states that applications using PHP may need restarting after the update; installing packages alone may leave old processes running. <a href=\"https:\/\/ubuntu.com\/blog\/php2shell-vulnerability-fixes-available\" target=\"_blank\" rel=\"noopener noreferrer\">Ubuntu&#8217;s package and restart guidance<\/a><\/p>\n<h2> <a name=\"a-practical-checklist-for-your-team\" href=\"#a-practical-checklist-for-your-team\"> <\/a> A practical checklist for your team <\/h2>\n<p>Use the following as a working record for each deployment:<\/p>\n<ul>\n<li> <strong>Inventory:<\/strong> hostname or application, owner, hosting provider, PHP branch, full package\/image version and web-serving runtime.<\/li>\n<li> <strong>Patch evidence:<\/strong> the applicable upstream release or vendor advisory confirming the backport. Record the complete build, not just \u201cPHP 8.3.\u201d<\/li>\n<li> <strong>Deployment:<\/strong> the package or image that was installed, where it was deployed and when the relevant workers were restarted or replaced.<\/li>\n<li> <strong>Verification:<\/strong> confirmation that web traffic is reaching the updated deployment, followed by normal application smoke checks.<\/li>\n<\/ul>\n<p>Check the serving environment explicitly. A local terminal&#8217;s PHP binary is not evidence about every FPM pool, Apache instance, container or replica.<\/p>\n<p>For a managed host, ask:<\/p>\n<blockquote>\n<p>Have CVE-2026-109618 and CVE-2026-109619 been fixed in the PHP runtime serving our site? Which package or build contains the fix, and have all relevant workers been restarted or replaced?<\/p>\n<\/blockquote>\n<p>This makes the response auditable without asking a website owner to diagnose engine internals.<\/p>\n<h2> <a name=\"if-you-cannot-patch-immediately\" href=\"#if-you-cannot-patch-immediately\"> <\/a> If you cannot patch immediately <\/h2>\n<p>CERT-EU recommends considering isolation of internet-facing applications from public networks until the fix is applied and verified. It also emphasizes that temporary measures cover specific paths and do not make an installation safe. <a href=\"https:\/\/cert.europa.eu\/publications\/security-advisories\/2026-018\" target=\"_blank\" rel=\"noopener noreferrer\">CERT-EU advisory<\/a><\/p>\n<p>Choose interim controls with the operator responsible for that environment. Avoid copying a configuration change without understanding its availability effects and the attack paths it does not address.<\/p>\n<h2> <a name=\"what-developers-can-take-from-this\" href=\"#what-developers-can-take-from-this\"> <\/a> What developers can take from this <\/h2>\n<p>Our practical interpretation of the published research is:<\/p>\n<ol>\n<li> <strong>Review failure paths.<\/strong> Ask which state remains visible when initialization stops halfway through.<\/li>\n<li> <strong>Keep discovery and proof separate.<\/strong> A suspicious pattern, a crash and demonstrated RCE provide different levels of evidence.<\/li>\n<li> <strong>Make runtime ownership explicit.<\/strong> Application maintenance and runtime maintenance need named owners and separate verification.<\/li>\n<li> <strong>Close the deployment loop.<\/strong> \u201cThe fix exists\u201d and \u201cour serving processes use it\u201d are different milestones.<\/li>\n<\/ol>\n<p>For this incident, prioritize patching and verifying the PHP deployment. A change of programming language is a separate architectural decision.<\/p>\n<hr>\n<p><strong>Need help with the PHP runtime behind your website? Contact <a href=\"https:\/\/techwebster.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">TechWebster<\/a> to discuss your setup and next steps.<\/strong><\/p>\n<p><em>This article summarizes the linked primary disclosures and separates reported research from our operational recommendations. We have not independently reproduced the exploits. Recheck the official advisories before applying changes, as guidance may evolve.<\/em><\/p>\n<\/p><\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Fuente: <a href=\"https:\/\/dev.to\/techwebster\/php2shell-how-the-vulnerabilities-were-found-and-what-developers-should-check-458p\">Art\u00edculo original<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP lists PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed among the affected web-serving setups. It identifies mod_php as the highest-risk setup, with a demonstrated attack that runs before application code. PHP&#8217;s security advisory This is a runtime security issue. A vulnerable installation and a confirmed compromise are different findings; discovering an affected version does [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6247,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"webixso_pending_account_ids":""},"categories":[41],"tags":[],"class_list":["post-6248","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devto"],"jetpack_publicize_connections":[],"_links":{"self":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts\/6248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/comments?post=6248"}],"version-history":[{"count":0,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts\/6248\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/media\/6247"}],"wp:attachment":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/media?parent=6248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/categories?post=6248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/tags?post=6248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}