Critical CVSS v4.0 9.2Disclosed No authentication neededExploitation attempts in the wild

CVE-2026-109618 · CVE-2026-109619

PHP2Shell: patch PHP today

Two flaws in PHP itself let an attacker run code on a web server or read its memory without logging in. They are in the language runtime, not in your application, so a fully updated WordPress, Drupal or Laravel site is still exposed until the PHP underneath it is updated and restarted. The fix shipped on 21 October 2026.

php2shell.eu is an independent guide maintained by the OffSeq security team in Riga. It is not affiliated with the PHP project or the researchers who found the flaws.

Is this server affected?

Paste the output of php -v, a phpinfo() heading or an X-Powered-By header. The verdict comes from the PHP project's fixed-version table and is worked out in your browser: what you paste is not sent anywhere, and your server is never contacted.

Check the version your web server actually runs: the command-line php -v can differ from PHP-FPM or Apache mod_php. Run php-fpm -v (or php-fpm8.3 -v), or load a temporary phpinfo() page and delete it afterwards.

Try:

How PHP is served (optional)

Exposure differs by server interface. If you are not sure, leave it on "Not sure".

Verdict

Paste a version above to see the verdict and what to do next.

A version check is a starting point, not an assessment. It cannot see distribution backports, which server interface you run, or whether the server was compromised before it was patched.

Find every exposed PHP runtime with OffSeq

The interactive checker needs JavaScript. Compare your version with the table below instead: on each branch, any release lower than the one in the last column is affected. PHP 8.1 and older are affected and get no official fixed release.

  • PHP 8.2 to 8.5: anything below 8.2.35, 8.3.36, 8.4.27 or 8.5.12 on its branch is affected. Upgrade to that release or your distribution's patched package, then restart every PHP worker.
  • Distribution builds such as 8.3.6-0ubuntu0.24.04.13 may carry a backported fix with the old number. Compare the package version with your distribution's security notice.
  • PHP 7.4, 8.0 and 8.1: no official release. The PHP security team published minimal source backports, and several distributions and vendors ship fixed packages.
  • PHP 7.3 and older: affected, with no fix from the PHP project. Restrict internet access to the server and plan the upgrade.
Vulnerable and first fixed releases, per the PHP security advisories
BranchVulnerableFirst fixed release
PHP 8.5< 8.5.128.5.12
PHP 8.4< 8.4.278.4.27
PHP 8.3< 8.3.368.3.36
PHP 8.2< 8.2.358.2.35

Two flaws in PHP's own engine

PHP2Shell is the name the researchers gave to a family of memory-safety bugs in how PHP handles fatal errors, out-of-memory errors above all. A request that ends abruptly can leave corrupted or stale internal state behind, and a later request handled by the same worker can trip over it. The PHP project tracks them as two CVEs.

CVE-2026-109618

Out-of-memory corruption

When an allocation fails, PHP aborts the request. If that happens while internal request data is only partly set up, the clean-up that follows treats the half-built data as valid and corrupts memory.

Impact
Code execution as the PHP web worker, without authentication
Demonstrated
Apache mod_php with default limits, before any application code runs
Advisory
GHSA-w8hw-w9fx-j79w
CVSS v4.0
9.2 Critical

CVE-2026-109619

Stale global state

Some internal state survives after the request that owned its memory has finished. A later request on the same worker can use that state before PHP resets it, which is a use-after-free.

Impact
Code execution, or disclosure of worker memory including other users' data
Demonstrated
Apache mod_php and PHP-FPM through session upload progress (on FPM it needs a suitable application operation); on PHP 8.5, mod_php also via fatal error backtraces
Advisory
GHSA-6wmf-4rv5-p3rp
CVSS v4.0
9.2 Critical
What the researchers demonstrated
WhoScopeResult
Wiz ResearchWordPress, Drupal and Joomla, latest container images at the time of testingUnauthenticated remote code execution; memory disclosure that does not depend on the application
CalifWordPress, Drupal, Joomla, MediaWiki, Roundcube, Magento, phpMyAdmin, Nextcloud, Laravel, Symfony, WHMCSUnauthenticated remote code execution, including against Nginx with PHP-FPM
OpenAI Codex SecurityReported the same root cause independently, and further attack vectors laterPublished a defensive version checker, not an exploit
The applications are examples, not a complete list. Wiz states that even a simple "Hello World" application on an affected PHP version can be vulnerable.

Field data

What attackers are already sending

OffSeq, which maintains this site, runs a fleet of decoy servers called Mirage. Here is what PHP2Shell looked like on it in the first 48 hours.

16 h
between the first full memory-pressure request (21:57 UTC, 20 October) and the fix
9
source addresses in seven countries sent PHP2Shell-shaped requests
2
techniques: the session upload progress route and oversized memory-pressure bodies
0
times the trigger field appeared on the fleet in the six weeks before 20 October

The traffic is automated: nine sources, the five using the session route each with its own variant, and the lead tool repeating its run overnight and labelling itself with the string p2shell. The guide lists the indicators and log signals to search for.

Decoys cannot be exploited, so they show attempts, not whether an attack succeeds against a real server.

Response plan

Six steps, in order

This is the order of work the PHP advisories, the researchers and CERT.LV point to. Do not wait for a complete inventory: start step 2 on your most exposed servers straight away and run the rest in parallel.

  1. First hour

    Find every PHP runtime

    The flaws are in PHP, so the inventory is of PHP runtimes, not of websites. One server can run several PHP versions side by side, and the command-line version is often not the one serving web requests.

    • List every host, container image and hosting account that serves PHP, including staging, intranet portals and forgotten microsites, and mark which are internet-facing.
    • On each, record the version the web server uses: php-fpm -v, the Apache module, or a temporary phpinfo() page that you delete afterwards.
    • Note how PHP is served (Apache mod_php, PHP-FPM, php-cgi, FrankenPHP, LiteSpeed): it decides your exposure and how to restart.
    • Ask every hosting provider and agency that runs PHP for you to confirm, in writing, the version and patch date.
    • Do not trust a scanner that reads the CVE records literally: the records list only the 8.2 to 8.5 branches and mark everything else unaffected. PHP 8.1 and older are affected too.
    • Include appliances and vendor products that embed PHP, such as management interfaces and network devices, and ask those vendors for their fix.
    php -v
    php-fpm -v            # or php-fpm8.3 -v, php-fpm83 -v
    apachectl -M | grep -i php
    dpkg -l 'php*' | grep ^ii      # Debian, Ubuntu
    rpm -qa 'php*'                 # RHEL, Alma, Rocky, Fedora
    
  2. Today

    Install the fixed release

    Upgrade to 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or your distribution's patched package. The PHP project gave Linux distributions and long-term support vendors the patches in advance. Updating WordPress, Drupal or your framework does not update the PHP runtime beneath it.

    • Patch internet-facing servers first, starting with mod_php servers: the PHP project rates their risk highest.
    • Rebuild container images from an updated base image and redeploy them; a running container does not update itself.
    • Distribution packages often keep the old version number with the fix backported: compare the package version with your vendor's advisory. The platform guide lists where each distribution, panel and host stood.
    • For PHP 8.1 and older, follow the end-of-life guide.

    Fixed versions: php.net security advisory, 21 Oct 2026

  3. Straight after

    Restart, then verify

    Installing a package does not replace code that is already running. PHP-FPM pools, Apache processes and long-running workers keep the vulnerable binary in memory until they are restarted.

    • Restart PHP-FPM, Apache and any long-running PHP worker or queue process. LiteSpeed keeps PHP processes running across a web server restart, so restart its PHP processes separately.
    • Check the version the web server now reports, through the same route you used in step 1.
    • Confirm that no old process survived: ps -eo pid,lstart,cmd | grep -i '[p]hp' shows when each worker started.
    • Test the application. The fix adds a hard memory limit, by default twice memory_limit, or memory_limit plus 1 GB for limits above 1 GB, that kills a worker outright with exit code 137, without running shutdown handlers or destructors. A few regressions are being tracked in php-src; see the platform guide.
    sudo systemctl restart php8.3-fpm    # unit name varies by distribution
    sudo systemctl restart apache2       # or httpd
    ps -eo pid,lstart,cmd | grep -i '[p]hp'
    
  4. If you cannot patch

    Shrink the exposure

    Where an update is impossible today, the PHP project lists configuration changes that reduce exposure to specific attack paths but do not make an installation safe. CERT.LV goes further: a system that cannot be updated to a safe version should not be publicly reachable until the risk is removed.

    • Restrict access from the internet with a VPN or an IP allow-list, or take the service offline.
    • Apply the stop-gap settings in the mitigations table, in configuration that applies before request parsing, and restart every worker.
    • Make sure your WAF or CDN rule is actually in block mode, and that the origin cannot be reached directly around it.
    • Set a deadline for the real fix. A stop-gap is not a fix.
  5. This week

    Look for signs of exploitation

    Patching closes the hole; it does not tell you whether someone came through it first. Amazon recorded an exploitation attempt on 17 October, four days before disclosure, and advises investigating from at least that date. Anything exposed before you patched deserves a look.

    • Search PHP and web server error logs for memory exhaustion reported in Unknown on line 0, and for bursts of worker crashes.
    • Look for PHP or web server processes starting shells or download tools, new PHP files in upload or cache directories, and unexpected outbound connections.
    • If a server held credentials, API keys or certificates, rotate them: memory disclosure may leave no trace in application logs.
    • If anything points to compromise, isolate the host and preserve its disk and memory before you rebuild it.
  6. As you go

    Record it, and report if required

    Write down what you found, what you patched and when. If you find a compromise, regulatory clocks may already be running. Under NIS2, the early warning to your CSIRT is due within 24 hours of becoming aware of a significant incident. Under the GDPR, a personal data breach must be notified to the supervisory authority within 72 hours where feasible.

    • Keep the inventory from step 1, with patch dates and versions, as evidence of due diligence.
    • In Latvia, report incidents to CERT.LV; elsewhere, to your national CSIRT.
    • Tell customers whose data or services you run if a compromise affects them.
    • Review why any PHP runtime was missed or unpatched, and fix that process.

Stop-gaps, if you cannot patch today

These are the measures the PHP project published for systems that cannot be updated immediately. Each one blocks particular attack paths, some affect availability, and none of them makes an installation safe. Apply them in configuration that takes effect before PHP parses the request, then restart every worker.

Partial mitigations published by the PHP project
MeasureAgainstWhat it doesWatch out for
session.upload_progress.enabled=0CVE-2026-109619Blocks the confirmed session upload progress paths. Set it in php.ini, the FPM pool or the server configuration.Do not rely on ini_set() or FPM .user.ini: they apply too late. Breaks upload progress bars, if you use them.
fatal_error_backtraces=0CVE-2026-109619, PHP 8.5 onlyBlocks the confirmed fatal error backtrace path.Covers that one path only.
memory_limit=-1, enforced with php_admin_valueCVE-2026-109618Removes the controllable PHP memory-limit failure.An underlying allocation failure can still reach the vulnerable path, and a runaway request can now exhaust the machine. Contain each worker with a cgroup or container limit. Check that no pool or application restores a finite limit.
Low post_max_sizeCVE-2026-1096188M where no uploads are needed, 32M where they are, with upload_max_filesize below it.Breaks larger legitimate uploads.
Request limits at the web server or proxyCVE-2026-109618Cap decoded request size, field count, multipart part count, header count and nesting depth.The limits must also cover requests without a usable Content-Length.
Fix fatal errors and timeouts attackers can reachCVE-2026-109619Removes ways to end a request abruptly, including in callbacks, upload or import handling and clean-up.Application work; not a quick switch.
Source: the php.net security advisory and the GitHub advisories GHSA-w8hw-w9fx-j79w and GHSA-6wmf-4rv5-p3rp. The PHP advisory for CVE-2026-109619 also suggests leaving session.upload_progress.enabled=0 after patching if you do not need the feature.

What does not help

  • RLIMIT_AS or RLIMIT_DATA as a memory cap. The PHP project warns they can trigger the very allocation failure the attack needs.
  • Hiding errors. Turning off display_errors, lowering error_reporting or using @ does not protect against CVE-2026-109619; the stale state is touched before PHP decides whether to show anything.
  • Updating only the application. A patched WordPress or Drupal on an unpatched PHP is still exposed.
  • Trusting a WAF alone. Vendors stress that their rules cover only known paths, and an origin that can be reached directly bypasses them entirely.

Signs of exploitation

No single signal proves an attack, and the absence of one proves nothing: the vulnerable code runs below your application, often before it has logged anything. Treat these as leads for an investigation, and look at everything exposed before you patched.

  1. Memory errors "in Unknown on line 0"

    A PHP Fatal error: Allowed memory size of … exhausted that names Unknown on line 0 instead of a file means the limit was hit before any script ran, during request parsing. An out-of-memory error from your own code names a real file and line.

    PHP error log · web server error log

  2. Bursts of worker crashes

    Clusters of segmentation faults or PHP-FPM children exiting on a signal within a short window, followed by a slow successful response. A few isolated crashes are normal; dozens in minutes are not.

    Apache error log · php-fpm log · systemd journal

  3. The p2shell boundary string

    OffSeq's decoy fleet saw the lead attack tool put the literal string p2shell in the multipart boundary of its requests. OffSeq reports that no legitimate traffic contains it, so a match in a Content-Type header is worth investigating at once. Tools change, so its absence proves nothing.

    Access logs with headers · WAF · CDN analytics

  4. Unusual multipart and form requests

    Multipart uploads carrying a PHP_SESSION_UPLOAD_PROGRESS field on pages with no upload progress bar, very long field names, deeply nested [ brackets, or URL-encoded POST bodies above one or two megabytes. The field is a legitimate PHP feature, so context matters.

    Access logs with request bodies · WAF · IDS

  5. Oversized session cookies

    A Set-Cookie: PHPSESSID response value far longer than your normal session IDs. Wiz and Imperva describe memory being returned to the attacker this way.

    Response logs · WAF · CDN analytics

  6. PHP starting shells

    A PHP-FPM, php-cgi, Apache or LiteSpeed process launching sh, bash, curl, wget, python or nc. Baseline first: PHP's own mail() starts sendmail through /bin/sh. An unexplained shell from a PHP worker is post-exploitation, and one of the strongest signals available.

    EDR · auditd · process accounting

  7. What attackers leave behind

    New .php files in upload, cache or temporary directories, new cron jobs or accounts, and outbound connections from the web server shortly after inbound POST requests.

    File integrity monitoring · netflow · cron and account audit

How it unfolded

Early signs surfaced in 2024; the exploitable paths were reported in August 2026 and fixed in October. Exploitation attempts began before the fix: the earliest known is from 17 October.

  1. 2024

    A PHP core developer working on findings from a funded security audit spots the first signs of the out-of-memory problem. An exploit is theorised, but no concrete attack vector is found, and the problem is left unfixed.

  2. 11 Aug 2026

    Calif and OpenAI independently report an unauthenticated remote code execution flaw with the same root cause.

  3. 24 Aug 2026

    Wiz Research, which found the issues independently, reports them to the PHP security team. OpenAI reports further attack vectors on 18 September.

  4. 17 Oct 2026

    Amazon's MadPot honeypots record a PHP2Shell exploitation attempt from an anonymisation network, four days before disclosure. Amazon reports it on 21 October and advises investigating from at least 17 October.

  5. 20 Oct, around 15:00 UTC

    The two CVE numbers start circulating online, with a wrong release time and a wrong score of 10.0. No technical detail leaks.

  6. 20 Oct, 19:30 UTC

    The PHP project pre-announces the release and moves it forward by a day, to 21 October at 14:00 UTC.

  7. 20 Oct, evening

    One of the research firms mistakenly publishes a demonstration video, then deletes it. Copies circulate and speed up the development of proof-of-concept code.

  8. 20 Oct, 21:57 UTC

    OffSeq's Mirage decoy fleet records its first PHP2Shell-shaped request, about sixteen hours before the fix ships.

  9. 21 Oct, 02:00 to 08:00 UTC

    Amazon identifies the first proof-of-concept exploits, and sees further attempts against its honeypots from what it judges to be multiple actors.

  10. 21 Oct, 07:41 UTC

    A container image vendor publishes fixed images more than six hours before the coordinated release, letting anyone study the fix early.

  11. 21 Oct, 13:30 to 14:00 UTC

    PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 are released, with minimal source backports for PHP 7.4, 8.0 and 8.1. Full advisories are published.

  12. 21 Oct, from mid-morning

    Governments across Europe start taking sites offline as a precaution, many before the fix is out. After the release, the EU institutions and national CSIRTs issue a joint statement urging immediate action.

  13. 21 Oct, evening

    Latvia's National Cyber Security Centre restricts access to affected state systems to Latvian IP addresses, possibly until Monday 26 October. CERT.LV reports isolated, unsuccessful exploitation attempts.

  14. 22 Oct

    CERT.LV says about 95% of important Latvian state digital resources have been updated. Cloudflare's chief executive reports millions of attempts across its network. No vendor or CERT has publicly confirmed a successful compromise, and neither CVE is in CISA's Known Exploited Vulnerabilities catalogue. The PHP project's issue tracker lists the first regressions in the fixed releases.

Europe's response

Many public bodies did not wait for the release. Across the EU, websites were taken offline as a precaution, and the national CERTs that published advice said much the same: patch now, and isolate what you cannot patch.

Latvia · state services

Restricted from abroad, switched off for an evening

On 21 October the Ministry of Defence's National Cyber Security Centre limited access to state information systems running the affected PHP to Latvian IP addresses until they are fixed. The shared state and municipal website platform was switched off for about three and a half hours that evening, in Latvia as well, and the public broadcaster's portal LSM.lv for about five hours; both were back for users in Latvia by 23:00. On 22 October CERT.LV said about 95% of important state digital resources had been updated and were fully reachable from Latvia, and that access from abroad should return for most of them by Monday 26 October.

Latvia · CERT.LV

Attempts seen, none successful so far

CERT.LV's deputy head said on 21 and 22 October that mostly automated attempts, by bots and small groups, had been seen against private and state systems in Latvia and that none was known to have succeeded, though he expects some poorly protected sites to fall. CERT.LV estimates that about 6,000 digital resources in Latvia could be affected, several hundred of them in the public sector. CERT.LV calls on companies to check their systems and install the updates immediately, starting with public websites, online shops and customer portals.

EU · joint statement

One message from Brussels

The European Commission, ENISA, CERT-EU, Europol's cybercrime centre and the network of national CSIRTs issued a joint statement urging immediate action and, where remediation is not feasible, consideration of isolating exposed applications from public networks until fixes are applied. It also reminded manufacturers that actively exploited vulnerabilities in their products must now be reported under the Cyber Resilience Act.

National CERTs, and beyond Europe

Isolate what you cannot patch

Germany's BSI rated the situation orange, meaning act without delay. It advises considering disconnection from the internet where patches cannot be installed, and rebuilding Docker images. CERT-FR advises isolating end-of-life PHP and migrating. The UK NCSC asks organisations that cannot update to check for compromise and backdoors first. CISA advises taking PHP systems offline if they cannot be updated immediately or run PHP 8.1 or earlier.

Across Europe

Websites went dark, most came back

Reported closures on 21 October included Dutch government portals and the Port of Rotterdam, all Flemish government websites, Finland's central government public internet services and French prefecture websites. Many were back within hours, including the Dutch NCSC's own website. Recovery was slower elsewhere: on 22 October Finland's state IT provider said full restoration could take days or even weeks, and a UK minister said 32 government services were unavailable and four partially, as a precaution. None of the closures was attributed to a breach, and Germany's digital minister said there was no sign that federal systems had been compromised.

Beyond websites

PHP hides in appliances

The Dutch NCSC notes that PHP is also embedded in appliances, network devices, management interfaces and other vendor products where administrators may not be able to update PHP directly. It maintains a public, admittedly incomplete list of potentially affected third-party products, which CERT-EU and the UK NCSC both point to. On 21 October Palo Alto Networks said the management interface of every PAN-OS and Panorama version is affected, with no fixed version yet; restrict management interfaces to trusted networks. Ask your vendors directly.

Go deeper

Each guide takes one part of the response and goes through it in full, with sources.

  1. Patching PHP2Shell: platform by platform

    Where the fixed PHP packages are for Debian, Ubuntu, RHEL and its rebuilds, Fedora, SUSE, Alpine, Amazon Linux, Docker, control panels and managed hosts, and how to make sure the new binary is the one running.

    Read the guide
  2. PHP2Shell on PHP 8.1, 8.0, 7.x and older

    There is no official fixed release below PHP 8.2. What the PHP project provided for 7.4, 8.0 and 8.1, where distribution fixes come from, and what to do with anything older.

    Read the guide
  3. PHP2Shell mitigations when you cannot patch yet

    The configuration changes the PHP project published for systems that cannot be updated today, what each one blocks, what it breaks, and the two settings that make things worse.

    Read the guide
  4. Was PHP2Shell used against you? Detection and response

    Where to look, what each signal means and does not mean, and what to do if a server shows signs of compromise, including preserving evidence before you rebuild.

    Read the guide
  5. PHP2Shell in the wild: the first 48 hours on a honeypot fleet

    Field data from OffSeq's Mirage decoy fleet: when PHP2Shell traffic started, how many sources sent it, and the indicators defenders can hunt for in their own logs.

    Read the guide
  6. PHP2Shell and your WAF or CDN: what the vendor rules cover

    Which security and cloud vendors published PHP2Shell rules, which are on by default and which you must switch on, and the limits every one of them states.

    Read the guide
  7. PHP2Shell in the EU: CERT advice and reporting duties

    What the EU institutions and national CERTs advised, and when a PHP2Shell incident triggers NIS2, GDPR, DORA, Cyber Resilience Act or Latvian reporting duties.

    Read the guide

Questions people are asking

Short answers, drawn from the sources listed at the foot of this page.

Am I affected?
If a server runs PHP to serve web requests and its PHP version is below 8.5.12, 8.4.27, 8.3.36 or 8.2.35 on its branch, assume yes, unless your distribution has shipped a backported fix. PHP 8.1 and older are affected and receive no official release. The researchers report affected code paths back to PHP 5.4. Use the version checker above.
I run WordPress, Drupal or Joomla. Do I need to update the CMS?
Keep it updated as always, but that is not the fix. The vulnerable code is in PHP itself. A fully updated CMS on an unpatched PHP is still exposed. If you are on shared or managed hosting, ask your host whether PHP has been updated and the workers restarted.
Does an attacker need an account or a login?
No. The demonstrated remote code execution and memory disclosure attacks needed no authentication and no application account. On Apache mod_php, one path runs before any application code at all.
Is it being exploited?
Attempts are now at internet scale; successful compromises have not been publicly confirmed. Amazon recorded the first known attempt on 17 October, four days before disclosure. Cloudflare's chief executive reported thousands of attempts in the ten hours before the announcement and millions by early 22 October. Amazon said it was unclear whether the attempts it saw would have succeeded, watchTowr said the exploits being sprayed either did not work at all, only tested for timing differences or crashed the target, and Sansec said the public exploits do not work against a default PHP installation. CERT.LV saw only unsuccessful attempts in Latvia, and neither CVE was in CISA's Known Exploited Vulnerabilities catalogue. None of that is a reason to wait: patch now.
Are there known problems with the fixed releases?
A few, none of them a reason not to patch. The fix adds a hard memory limit, by default twice memory_limit, or memory_limit plus 1 GB for limits above 1 GB, above which PHP now ends the process instead of raising the usual catchable out-of-memory error; a php-src issue reports some functions hitting it where 8.5.11 raised a normal error. Other open or fixed issues report session upload progress destroying a session that stores certain objects, and a SimpleXML memory error that broke some test suites, fixed in the source code on 22 October but not yet in a release. Test your application after upgrading and watch for workers exiting with code 137.
Is there public exploit code?
The researchers did not publish their exploits. A leaked demonstration video accelerated third-party work, and by the evening of 21 October Germany's BSI and the Dutch NCSC described proof-of-concept code as public, while the PHP security team had found no functional exploit at release. Do not run unverified exploit code to test your servers: it can be malicious, and the version check is enough to decide that you must patch.
My WAF or CDN says it protects me. Can I wait?
No. Cloudflare, Akamai, Imperva, Fastly and others published rules, but none presents them as a substitute for the PHP update: Cloudflare calls its rules a stopgap for the known exploit vectors, Fastly says to assume only partial protection, and Akamai says prompt patching remains the most effective defence. Some are opt-in or need a managed ruleset in block mode. A WAF also does nothing if the origin server can be reached directly. Use the rule to buy time and patch anyway.
What could an attacker get?
With code execution, whatever the PHP worker can reach: the website, its database credentials and anything on the server or network it can touch. Through memory disclosure, fragments of other requests and of the server's own memory, which can include passwords, session tokens, API keys and certificates.
We patched. Are we done?
Not quite. Restart every PHP worker and confirm the version the web server reports. Then, for anything that was internet-facing before you patched, look for the signs of exploitation on this page, and rotate secrets on servers that held them. Also review the new hard memory limit in the fixed releases, which kills a worker outright when reached.
Why is it called PHP2Shell?
php2shell is the name Wiz Research gave its combined exploit script, which turned a request to a PHP site into a shell on the server. The name now covers the wider research into these core PHP flaws.
Can OffSeq check our servers?
OffSeq, which publishes this site, offers PHP runtime inventories, patch verification and incident response, including evidence preservation for a NIS2 or GDPR report. Most organisations can patch and verify on their own; the About page explains our commercial interest, and the OffSeq contact page is the way in if you want help.

Prefer to call? +371 2256 5353 Monday to Friday, 09:00 to 18:00 Riga time

After the emergency

PHP2Shell will not be the last critical flaw in software that organisations forget they run. These OffSeq services help you know what you expose before the next one.

Sources

  1. Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure in MadPot AWS Security Blog · 2026 The earliest known attempt on 17 October, broad exploitation after release, indicators, and the advice to investigate from 17 October.
  2. Some stats on #php2shell Matthew Prince, Cloudflare, on X · 2026 Attempt volumes across Cloudflare's network before and after disclosure.
  3. PHP2Shell: Critical PHP RCE (CVE-2026-109618, CVE-2026-109619) Sansec · 2026 Updated 22 October: public exploits do not work against a default PHP installation; update PHP anyway.
  4. PHP2Shell Exploitation Started Days Before Patches SecurityWeek · 2026 Exploitation attempts before the patches; watchTowr says the exploits being sprayed do not work, only probe or crash the target.
  5. PHP2Shell in the wild: the first 48 hours on a honeypot fleet OffSeq · 2026 First-party field data from OffSeq's Mirage decoy fleet: timing, sources, techniques and indicators.
  6. Security advisory: Critical remote code execution vulnerabilities, update now PHP project, php.net · 2026 Fixed versions, who is at risk, the mitigations for systems that cannot be updated, the source backports for PHP 7.4, 8.0 and 8.1.
  7. GHSA-w8hw-w9fx-j79w: RCE via OOM corruption (CVE-2026-109618) PHP project, GitHub · 2026 Root cause, per-SAPI exploitability, the CVSS v4.0 vector, and the fix that replaces the out-of-memory jump with a soft and a hard limit.
  8. GHSA-6wmf-4rv5-p3rp: RCE via stale global state (CVE-2026-109619) PHP project, GitHub · 2026 The producer and consumer model, the session upload progress and fatal error backtrace paths, and why hiding errors does not help.
  9. Today's PHP Security Release, and How We're Strengthening PHP Security The PHP Foundation · 2026 The disclosure timeline, the leak and the early image release, and the absence of functional public exploits at release.
  10. PHP2Shell: AI uncovers critical RCE vulnerabilities affecting 70% of the Internet Wiz Research · 2026 The demonstrated attacks on WordPress, Drupal and Joomla, application-agnostic memory disclosure, and detection signals.
  11. php2shell Calif Research · 2026 The list of applications tested, the earliest affected version, and the PHP-FPM demonstration.
  12. Saistībā ar globāli atklātām PHP ievainojamībām Latvijā ievieš preventīvus pasākumus CERT.LV · 2026 Latvia's temporary restrictions on foreign access to state services, and the advice to restrict internet access to systems that cannot be updated.
  13. CrowdStrike Protects Customers from Threats Delivered via PHP2Shell CrowdStrike · 2026 The "in Unknown on line 0" memory error as a sign that the limit was hit before any script ran.
  14. Fastly's Proactive Protection for PHP2Shell Fastly · 2026 Log patterns, request shapes and segmentation fault bursts.
  15. PHP2Shell: When PHP Runs Out of Memory at the Wrong Moment Imperva · 2026 How memory is returned through the session cookie, and WAF coverage.
  16. php2shell: What We Know About the Leaked Critical PHP Vulnerabilities Check Point · 2026 Post-exploitation hunting leads, and the limits of network signatures.
  17. Cloudflare deploys protections against php2shell vulnerability Cloudflare · 2026 Managed rules deployed before disclosure, observed attack traffic, and the advice to patch regardless.
  18. Two critical RCEs in PHP core Cisco Talos · 2026 Snort coverage, and no exploitation observed as of 21 October, 14:00 UTC.
  19. PHP2Shell Patches Land as First Exploitation Attempts Hit Sensors SecurityWeek · 2026 Exploitation attempts on honeypots, and no successful attempt observed at the time.
  20. Joint statement on critical PHP vulnerabilities ENISA, on behalf of the European Commission, CERT-EU, Europol EC3 and the CSIRTs Network · 2026 The coordinated EU advice to act immediately and isolate what cannot be remediated, and the Cyber Resilience Act reporting reminder.
  21. Security Advisory 2026-018: Critical Vulnerabilities in PHP CERT-EU · 2026 Affected branches including end-of-life PHP, and the advice to isolate internet-facing applications that cannot be patched.
  22. Critical Vulnerabilities in PHP Require Immediate Patching CISA · 2026 No exploitation observed at publication, and the advice to take PHP 8.1 and earlier offline.
  23. PHP – Kritische Schwachstellen bedrohen Webanwendungen weltweit BSI · 2026 Criticality 3 / orange, temporary disconnection where patches cannot be installed, and rebuilding container images.
  24. Critical security issue affecting PHP UK National Cyber Security Centre · 2026 Discovery of all PHP installations, and checking for compromise before upgrading.
  25. CERTFR-2026-ALE-014: Multiples vulnérabilités dans PHP CERT-FR · 2026 Isolating end-of-life PHP before migration.
  26. Operational information regarding the 2026 php2shell vulnerabilities NCSC-NL, GitHub · 2026 PHP embedded in appliances and vendor products, maintained by the Dutch NCSC.
  27. CVE-2026-109618 Impact of Critical Vulnerabilities in PHP (CVE-2026-109618, CVE-2026-109619) on Palo Alto Networks Products Palo Alto Networks · 2026 PAN-OS and Panorama management interfaces affected; no fixed version yet.
  28. Cert.lv: Atjauninājumus pēc PHP ievainojamībām veikuši aptuveni 95% valsts svarīgo digitālo resursu Diena / LETA · 2026 CERT.LV's 22 October status: about 95% of important state resources updated, access from abroad returning by 26 October.
  29. Kiberdrošības risku dēļ trešdien uz laiku bija apturēta LSM portāla darbība; atjauno arī valsts iestāžu mājaslapu darbību LSM · 2026 The National Cyber Security Centre's restriction to Latvian IP addresses, and the restoration of LSM.lv and the state website platform.
  30. Thirty-two Government services offline amid PHP cybersecurity issue Yahoo News UK / PA · 2026 UK government services offline as a precaution.
  31. Viranomaisten verkkopalveluita sulkenut laaja häiriö jatkuu Yle · 2026 Valtori: restoring Finnish government services may take days or even weeks.
  32. «Millionen» Hacker-Versuche: Viele Webseiten wieder online Die Rheinpfalz / dpa · 2026 German digital minister: no sign that federal systems were compromised.
  33. Vairākiem Latvijas digitālajiem resursiem ierobežo piekļuvi no ārvalstīm atklāto PHP ievainojamību dēļ Jauns.lv / LETA · 2026 Suspension of the state and municipal website platform, and the closure of LSM.lv and Latvijas Radio's site.
  34. “Cert.lv” novēro atsevišķus mēģinājumus izmantot PHP ievainojamības kiberuzbrukumos Liepajniekiem.lv / LETA · 2026 Isolated, unsuccessful attempts in Latvia, and the estimate of about 6,000 potentially affected resources.
  35. Government websites go dark as software flaw sparks security scramble CNBC / Reuters · 2026 Precautionary closures in the Netherlands, Finland, France and Denmark.
  36. Wereldwijd oproepen om beveiligingsupdate te installeren (liveblog) NOS · 2026 Dutch and Flemish government sites taken offline, and French prefecture websites.
  37. Valtion julkisen verkon palveluja ajetaan alas varotoimena (päivitetty tiedote) Valtori · 2026 Finland's central government public internet services shut down as a precaution, not because of exploitation.