PHP2Shell attack campaign live - suspected North Korean operation scanning 216 unpatched PHP servers across the USA and eleven other regions, with the five-step target check
TL;DR: The PHP2Shell vulnerabilities (CVE-2026-109618 and CVE-2026-109619) are no longer just a patching chore. According to CYFIRMA's October 24 early warning, a suspected North Korean operation has moved from preparation into active, deliberately quiet scanning of a 216-host target list built from servers that still advertise unpatched PHP versions. About one third of that list had already been touched by October 24. The fixes exist (PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35), they came out on October 21, and a server that still banners an older version is telling this actor it belongs on the list. This guide explains who is on it, gives you the 21 scan addresses to block and hunt, and walks through a five-step self-check plus the seven-day response plan - including the one step most guides get wrong: restarting every PHP worker without destroying evidence you may need first.
Quick answer - is my server on the 216-host list? Nobody outside the operation can name the victims - CYFIRMA states the target spreadsheet has not been seen and no organisation is identified. But the selection logic is known: the operators kept hosts that still banner older, unfixed PHP versions, and dropped hosts bannering the fixed versions or sitting behind heavy filtering. So the test is simple. If an internet-facing PHP service of yours publicly indicates anything below 8.5.12 (8.4 branch), 8.4.27, 8.3.36, or 8.2.35, treat it as exposed and act today. If you patched on October 21 and restarted every worker, you are outside the profile they kept. For the full patch and audit procedure, see our complete PHP2Shell patch and audit guide.

What Changed: From Staging to Active Scanning

For most of October, PHP2Shell was a story about two critical unauthenticated remote code execution flaws in the PHP runtime itself - the kind of bug that we covered in depth when the fixes landed. The actor behind it was preparation: infrastructure, tooling, target research. That changed in the early hours of October 24.

CYFIRMA's Version 3 advisory reports that at roughly 01:47 (channel time), the operators of a closed I2P channel - two Korean-speaking handles active since March 2026 - announced their first target set was ready: 216 hosts that still appear unpatched or only partially mitigated. The list arrived a day earlier than the operators themselves had predicted. By about 02:10, roughly one third of those hosts had already been touched by a separate set of 21 compromised scan nodes. CYFIRMA assesses with high confidence that the operation is North Korean state-nexus, affiliated with the Lazarus Group ecosystem (Lazarus, APT38, Hidden Cobra, ZINC / Diamond Sleet).

"Treat every internet-facing PHP host below 8.5.12, 8.4.27, 8.3.36 or 8.2.35 as exposed, and any host still advertising an older PHP version as a likely member of the operators' 216-host target set. Patch immediately, restart all workers, and hunt back to 17 October 2026, the earliest known exploitation." - CYFIRMA advisory, Version 3, October 24, 2026

Two boundaries matter for honesty here, and we keep them throughout this guide. First, what is confirmed: the channel and its tasking, the 216-host claim, the 21 scan nodes and their observed activity (PHP web shell tooling and session upload progress poisoning attempts). Second, what is assessed rather than proven: the Lazarus affiliation, the exact entry technique, and AI-assisted weaponisation of public proof-of-concept code. Mass compromise has not been confirmed, and no victim has been named.

Here is the timeline in one table:

Date (2026)EventSource
MarchTwo operator handles begin coordinating in a closed I2P channelCYFIRMA
October 17Earliest known exploitation - the hunt window opens hereCYFIRMA
October 20Technical details leak publicly, ahead of coordinated disclosureCYFIRMA
October 21PHP ships fixes: 8.5.12, 8.4.27, 8.3.36, 8.2.35; CISA and CERT-EU publish alertsPHP, CISA, CERT-EU
October 22-23CYFIRMA publishes its early warning (Versions 1-2)CYFIRMA
October 24, ~01:47Operators report the 216-host target set ready; ~1/3 already scanned by ~02:10CYFIRMA
Next milestoneA refined shortlist of highest-confidence hosts; no launch date statedCYFIRMA

How the 216-Host Target List Was Built

The most operationally useful detail in the advisory is the filtering logic, because it tells you exactly what makes a host interesting to this actor. The operators did not keep every PHP server they found. They kept the ones that advertise weakness - and they recorded sector and country tags for each, with scan results written back into the same spreadsheet under a separate column.

Kept on the target listDropped from the target list
Hosts still bannering an older, unfixed PHP versionHosts bannering the fixed versions (8.5.12 / 8.4.27 / 8.3.36 / 8.2.35)
Hosts only partially mitigatedHosts sitting behind heavy filtering
Hosts in the priority geographies and sectors-

The priority geographies named in the advisory are twelve: the United States, Japan, Thailand, Indonesia, South Korea, Australia, Taiwan, India, Singapore, the UAE, Saudi Arabia, and the European Union. The sector list runs to eight across three tiers, with government and financial institutions first, alongside logistics, airports and aviation, manufacturing, and online transaction platforms. PHP powers roughly three quarters of all websites whose server-side language is known, according to W3Techs - which is why a campaign like this builds a list rather than picking a single industry.

The tradecraft is patient, and that patience is the reason ordinary monitoring will not catch it. CYFIRMA describes low-and-slow pacing with deliberate avoidance of noisy sweeps, node rotation with logging of which addresses respond with expected indicators, and burn discipline: any node that meets filtering or rate limiting is marked, pulled from the active set, and never reused. If your defence plan is "our WAF would have blocked the scan," ask yourself whether it would have flagged a handful of paced requests spread across days - because that is the shape this activity takes.

The 21 Scan Addresses (and the Other 32)

These are the scan-node IPv4 addresses named in the Version 3 update, published by CYFIRMA in defanged form (dots replaced with [.] so the list can be shared safely - restore the dots before using them in firewall rules or log searches). Two cautions from the advisory itself: some of these nodes are compromised machines that may belong to victim organisations, so block and hunt rather than assume ownership; and these 21 supplement 17 earlier source addresses plus 15 staging addresses that remain valid, all listed in the full CYFIRMA advisory.

#Scan-node address (defanged)Observed activity
1142.93.155[.]162Web shell tooling / session upload progress poisoning
2134.122.38[.]73Web shell tooling / session upload progress poisoning
35.255.114[.]109Web shell tooling / session upload progress poisoning
4165.22.232[.]198Web shell tooling / session upload progress poisoning
5159.223.59[.]200Web shell tooling / session upload progress poisoning
6192.177.131[.]13Web shell tooling / session upload progress poisoning
794.154.42[.]149Web shell tooling / session upload progress poisoning
8173.249.16[.]178Web shell tooling / session upload progress poisoning
9170.64.224[.]137Web shell tooling / session upload progress poisoning
10170.64.226[.]40Web shell tooling / session upload progress poisoning
1145.148.10[.]80Web shell tooling / session upload progress poisoning
12152.237.230[.]29Web shell tooling / session upload progress poisoning
13146.70.194[.]93Web shell tooling / session upload progress poisoning
14185.157.109[.]60Web shell tooling / session upload progress poisoning
15143.246.213[.]138Web shell tooling / session upload progress poisoning
16144.91.70[.]51Web shell tooling / session upload progress poisoning
17217.60.196[.]124Web shell tooling / session upload progress poisoning
18151.253.243[.]219Web shell tooling / session upload progress poisoning
1923.106.131[.]214Web shell tooling / session upload progress poisoning
20173.249.16[.]192Web shell tooling / session upload progress poisoning
2145.148.10[.]201Web shell tooling / session upload progress poisoning

Check Your Server in Five Steps

  1. Check what your PHP service advertises. On the host, run php -v and compare against the fixed versions (8.5.12, 8.4.27, 8.3.36, 8.2.35 - and remember 8.1 and older have no fix at all). From the outside, check whether your responses expose an X-Powered-By header or a version banner; hiding it is good hygiene, but if it is visible and old, the operators' selection logic would have kept you.
  2. Hunt the 21 addresses in your access logs. Restore the dots, save the list to php2shell-ips.txt, then search: grep -F -f php2shell-ips.txt /var/log/nginx/access.log (or /var/log/apache2/access.log). Include rotated logs with zgrep, and go back to October 17 - the earliest known exploitation date in the advisory. Any hit is a P1 incident: isolate, preserve, investigate.
  3. Look for the attack shape, not the attack volume. Search error logs for PHP worker crashes and segfaults since October 17 - for php-fpm, journalctl -u php8.3-fpm --since "2026-10-17" (adjust the unit name); for Apache, inspect error_log for child process crashes. On the access-log side, review POST requests to PHP endpoints that carry multipart/form-data bodies - CYFIRMA assesses crafted multipart requests as the entry route. The scanning is deliberately low-volume, so a clean rate-based alert means nothing.
  4. Hunt for web shells. List PHP files modified since the hunt window opens: find /var/www -name "*.php" -newermt "2026-10-17". Review anything you do not recognise, especially in upload and cache directories. The advisory specifically flags abuse of PHP's session upload progress feature, so also review unexpected files in your session save path and any odd session.upload_progress usage.
  5. Check egress and preserve evidence. Review outbound traffic for signs of I2P or other anonymising tunnels, which the advisory lists as a watch item. And if step 2, 3, or 4 turns up anything suspicious: stop and preserve first. Capture logs, memory, and disk images before patching or restarting - a restart destroys the state associated with CVE-2026-109619, and with it your best evidence.

The Seven-Day Response Plan

CYFIRMA structures its recommended actions in three priority tiers. This is the plan in full, with the owners the advisory assigns to each item:

PriorityActionOwnerDue
P1 - NowBlock or monitor the 38 source addresses (21 scan nodes + 17 Version 2 IPs); monitor and hunt the 15 staging addressesNetwork / SOCOctober 24
P1 - NowPatch and restart every worker - a reload that keeps old workers alive leaves stale state, and hosts still bannering older PHP are the ones kept on the listInfrastructureOctober 24
P1 - NowIsolate what cannot be patched within hours - Apache mod_php first; apply the per-CVE temporary controls in the advisoryInfra & RiskOctober 24
P2 - 72 hoursHunt back to October 17 across extended windows - rate-based alerts will miss the low-and-slow patternSOCOctober 27
P2 - 72 hoursPreserve evidence before patching suspect hosts - a restart destroys CVE-2026-109619 stateIncident ResponseOctober 27
P3 - 7 daysNotify CERTs and brief leadership; watch for the Section 09 infrastructure, I2P egress, a launch statement, or the refined shortlistCISO OfficeOctober 31

Why the Restart Matters as Much as the Patch

This is the detail most coverage gets wrong, and it cuts both ways. Installing the fixed PHP packages is only half the job: PHP-FPM and Apache keep existing worker processes alive across a service reload, and those old workers still run the vulnerable code with stale state. CYFIRMA's advisory is blunt about the consequence - the hosts the operators kept on the target list are the ones still bannering older PHP after the fixes existed. A full restart (systemctl restart php8.3-fpm apache2, adjusted to your setup) is what actually retires the vulnerable workers.

But on a host where you suspect compromise, the same restart destroys evidence. The state associated with CVE-2026-109619 does not survive it. So the correct order on a suspect machine is the reverse of your instincts: preserve first (logs, memory capture, disk image), then patch, then restart. On a clean machine, patch and restart immediately - do not wait for a maintenance window that the actor may not respect.

Apache mod_php on Prefork: The Configuration They Like Most

CYFIRMA assesses - and we keep this in the assessed column, not the confirmed one - that the entry route is crafted multipart/form-data requests, with the highest success rate against Apache mod_php running in its default prefork multi-processing module. If that is your stack, the advisory places you first in the isolation queue: patch today, and if you cannot, pull the service behind filtering until you can. Running PHP through php-fpm instead of mod_php is a widely recommended long-term hardening step for exactly this class of memory-resident attack surface, independent of this campaign.

Running PHP 8.1 or Older? There Is No Patch Coming

The October 21 release covers the supported branches only: 8.5.12, 8.4.27, 8.3.36, and 8.2.35. PHP 8.1 and earlier have no official upstream fix for PHP2Shell and never will - those branches are end-of-life, the same way an operating system past its support date stops receiving security fixes. Your options are a version upgrade, isolation behind heavy filtering (which, notably, is one of the two things that got hosts dropped from the target list), or retiring the service. The PHP Foundation's release announcement and the official changelog list the affected versions in full.

Why This Story Sounds Familiar

A campaign that filters the internet for servers bannering weakness, then works a quiet list, is the server-side version of a pattern we keep seeing on the user side: attackers go where the door is already open. The Gemini incident showed three real companies compromised through credentials their owners had left in public, and most consumer-facing attacks still start with a fake warning or a spoofed message rather than a memory exploit - which is why we maintain guides on removing fake virus pop-ups, stopping email spoofing with SPF, DKIM, and DMARC, and reading email headers forensically. Defences layer: an unpatched runtime undoes everything the layer above it did right. Even fully patched systems still need their humans trained, the same way Windows Update failures like error 0x80073712 need fixing before the next Patch Tuesday - and the same month that shipped these PHP fixes also shipped KB5127648 with an exploited Windows zero-day and KB5124008 with two more. October 2026 has been a month where "I will patch next week" was the expensive answer on every platform.

Key Takeaways

  • A suspected North Korean (Lazarus-nexus) operation moved from staging to active scanning on October 24, working a 216-host list of PHP servers that still banner unfixed versions - about a third already touched.
  • The list is built on visibility: fixed-version banners and heavy filtering got hosts dropped; old banners got hosts kept, tagged by sector and country.
  • Fix versions: PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35 (October 21). PHP 8.1 and older will never receive a fix.
  • Patch + full restart of every worker - a reload leaves vulnerable workers alive. But on a suspect host, preserve evidence first: the restart destroys CVE-2026-109619 state.
  • Hunt logs back to October 17, 2026, for the 21 published scan addresses, multipart anomalies, worker crashes, and unexpected PHP files. Rate-based alerts will not catch this pattern.

Frequently Asked Questions

Has anyone actually been breached through PHP2Shell yet?
Confirmed: active scanning, web shell tooling attempts, and session upload progress poisoning attempts from the 21 nodes, with exploitation evidence dating to October 17. Not confirmed: mass compromise or named victims. CYFIRMA's imminence index sits at 78 out of 100 - high, but below the 90 that would indicate confirmed mass compromise.

I installed the October 21 PHP update. Am I safe now?
From these two CVEs, yes - provided you also performed a full restart of PHP-FPM or Apache so no pre-patch workers remain, and your service no longer banners an old version. If either is untrue, you are still in the profile the operators kept.

I run WordPress. Does this affect me?
PHP is the runtime underneath WordPress, so the vulnerability is in your server's PHP version, not in WordPress itself - plugin updates cannot fix it. On managed hosting, ask your provider which PHP branch you are on and whether they restarted workers after October 21; the fixed versions are 8.5.12, 8.4.27, 8.3.36, and 8.2.35.

Why are the IP addresses written with [.] instead of a dot?
Defanging is a threat-intelligence convention that prevents the addresses from becoming clickable or auto-resolving in documents and browsers. Replace [.] with . when you paste them into firewall rules or log searches.

What if I cannot patch this week?
Follow the advisory's isolation priority: Apache mod_php services first, apply the per-CVE temporary controls published in the CYFIRMA advisory, and put heavy filtering in front of the service. Filtering is one of the two characteristics that got hosts dropped from the target list - it works on this actor's own selection logic.

About & Methodology: This guide is built on CYFIRMA's public threat advisory (Version 3, October 24, 2026), the PHP Foundation's security release announcement, the official PHP changelog, CISA's and CERT-EU's alerts, and technical analysis from Unit 42, Tenable, and watchtowr. Every claim is attributed to its source, and the advisory's own confidence language is preserved: confirmed items (channel activity, target set report, scan-node observations) are distinguished from assessed items (Lazarus affiliation, entry route, AI-assisted weaponisation). The 21 addresses are republished in defanged form exactly as CYFIRMA published them; the additional 32 infrastructure addresses remain in the source advisory. Author: independent tech analyst covering web-platform security, no affiliation with CYFIRMA, the PHP Foundation, or any vendor named in this guide.
Changelog: October 25, 2026 - first published. All source URLs verified live at publication. Monitoring: the refined shortlist and any launch statement from the operators, plus updates to the 53 known infrastructure addresses, will be reflected here as CYFIRMA publishes new advisory versions.

Get US tech fixes weekly

No spam. Unsubscribe anytime. Tested on Windows 11 24H2.

Join 1,200+ US readers. No spam.