Responding to AI's Black October
A wave of serious AI-accelerated cybersecurity incidents is playing out as we write, led by a long-hidden flaw in the software behind most websites. We explain what's happening, why timing matters and what to do.
Joel Miller

Over the past week, a run of serious security incidents has led governments to take public services offline and left organisations around the world rushing to patch the software behind most websites. Critical flaws in PHP and GitLab, a poisoned release of the LiteLLM AI library, broken certificate keys that undermine Python package installs, and breaches at the hosting platforms Railway and Zeabur have all landed within days of each other, and some commentators have started calling it "Black October".
The incident at the centre of this new wave is PHP2Shell. Two flaws let a crafted web request run an attacker's commands on a server without logging in. They have been in PHP's engine for more than a decade, affecting every version back to 5.4. They were found this summer with the help of GPT-5.6, and news of the flaws leaked the day before the fix shipped on 21 October. Public bodies in the Netherlands, Finland, France and the UK have taken services offline as a precaution, including the Dutch DigiD login service. In Japan, SoftBank has suspended earthquake, tsunami and evacuation alerts to its mobile customers until 26 October while it fixes the flaw, and the government plans to set up an AI-assisted team to test systems for weaknesses.
PHP is not a technology most people think about. Few new projects start with it, and it rarely comes up in conversations about modern software. Yet according to W3Techs it runs 69.3% of the websites whose server-side language can be identified, including every WordPress site. About a third of those PHP sites still run version 7 or older, which the PHP project no longer supports. PHP does not run power grids or military systems, so this is not a direct threat to critical national infrastructure. It does show how much of everyday digital life rests on old, widely shared components that few people have been thinking about.
In April, writing about Anthropic's Mythos model, we set out scenarios in which AI-driven vulnerability discovery outpaces patching, leaving smaller organisations and neglected open-source projects to live with periods of outages and fraud. Black October looks like an early example. Unlike a bridge or a power station, though, software can be fixed quickly once a flaw is known. PHP shipped its fix the day after news of the flaws leaked, Cloudflare had protective rules running before disclosure, and maintainers, security firms, AI labs and government agencies worked on the release together.
Some of the people closest to the problem expect it to get worse first. Jason Clinton, Anthropic's deputy chief information security officer, has warned of a coming "vulnerability tsunami" that could leave the operators of power and water systems without enough time to fix flaws, and has urged organisations to cut sensitive networks off from outside access. On 22 October he asked security leaders to go to their boards for help with the basics, and said they would need to hold on for about 18 months.
“As bad as things have gotten in the past 4 days, they are going to get a lot worse before they get better.”
How an AI-found flaw reaches the public
The PHP2Shell timeline shows what happens when AI finds a flaw in one of the internet's basic building blocks. Researchers had spotted the underlying weakness in 2020 and again in a 2024 audit, but nobody turned it into a working attack. Wiz describes the chain of steps as being at the edge of what human researchers could practically achieve. On 1 August, two days after joining OpenAI's Patch the Planet programme, Ryan Austin of the security firm Calif found remote code execution paths using GPT-5.6 Sol. OpenAI reported the core flaw separately on 11 August, and Wiz found the same family of bugs on 19 August using Gemini 4 Argon and GPT-5.6 Sol. Three groups reached the same flaws within weeks of each other.
The human part took longer. PHP confirmed Calif's proof of concept on 15 August, and OpenAI then spent about two months coordinating maintainers, researchers, security vendors and agencies including CISA. Technical details were due on 22 October. On 20 October a Hacker News user posted that the flaws were about to be disclosed, watchTowr confirmed the leak was real, and a video of a working exploit was published early by mistake. PHP shipped the fix at 14:00 UTC on 21 October.
Timing matters this much because in open-source software a published fix shows exactly where the bug is. Anyone can compare the new code with the old. That comparison used to take skilled researchers days. Frontier models do it far faster, and Sansec expected mass exploitation within 15 minutes of the patch. From that moment, defenders have to push the fix through hosting companies, Linux distributions, container images and vendor products to millions of servers, while attackers only have to scan for the servers still waiting. Even PHP's advance notice helped attackers, because it confirmed two critical flaws in PHP, their severity and the release time.
As AI makes discovery cheaper, more independent groups will find the same bugs at around the same time. Each extra finder is another possible leak, and another chance that an attacker already has the knowledge and is keeping quiet. With PHP2Shell, discovery took days, coordination took two months and exploiting the published fix may take minutes. The slowest step is now getting patches onto servers, and that step depends on people.
What's happening in the wild
Two days after the fix, attackers are trying PHP2Shell at very large scale. Cloudflare's chief executive, Matthew Prince, reported thousands of attempts in the ten hours before disclosure, tens of thousands in the 45 minutes after it, and millions since. Amazon recorded an attempt against its honeypot servers on 17 October, four days before the fix, and a run of attempts from different sources with different payloads from about 02:00 UTC on 21 October, which it reads as several separate attackers. It advises organisations to look for suspicious activity back to at least 17 October. The threat intelligence firm KELA reports scanners that try to install botnet software, and existing attack bots adding PHP2Shell to their toolkits.
The attacks are also getting more capable. Many early exploits shared on criminal forums were unreliable and depended on particular settings. Calif has since published working attacks against 11 widely used PHP applications, and VulnCheck said late on 22 October that its exploit works unchanged against PHP 8.4 with a standard memory protection switched on. With this volume of attempts and working exploits in circulation, we would treat any unpatched PHP server on the internet as at risk of compromise.
Patching is moving. The internet scanning firm Censys has seen about 7.9 million internet services move to fixed PHP versions since 21 October, most of them in the past day, while about 33.5 million still show affected versions. These are counts of services, each an address and port, not of websites. PHP has also published minimal fixes for the unsupported 7.4, 8.0 and 8.1 versions. The harder cases are products with PHP built in. The Dutch National Cyber Security Centre is tracking appliances, network devices and management consoles whose owners cannot update PHP themselves and have to wait for the vendor.
The wider wave
Not every incident this month is connected, and several have nothing obvious to do with AI. Most follow a similar pattern, though: an attacker reaches a shared layer that many organisations trust, and the damage spreads from there.
The first layer is trust in software itself. Websites prove who they are with digital certificates, which work like ID cards vouched for by a small number of trusted issuers called certificate authorities. One of those issuers, India's eMudhra, had eight signing keys so weak they could be worked out almost instantly; one of them was simply the number 4. With those keys, anyone can make convincing fake ID cards. Someone who controls your network connection, such as the operator of a rogue Wi-Fi hotspot, could then pose as a trusted site, including the servers developers download Python software from, and slip in malicious code. Updating your computer's operating system does not close this gap for developer tools such as pip and uv, because they keep their own lists of trusted issuers and need updating separately. eMudhra said on 22 October that it will leave the global website-certificate business. A hijacked release of LiteLLM, a widely used AI gateway library, carried a credential stealer for about two hours on 21 October. Attackers also swapped OVHcloud's command-line tool downloads for a stealer for up to 94 minutes, and briefly altered the update settings of AOMEI's backup software to deliver malware.
The second is hosting platforms. Railway said an intruder may have accessed the encrypted secrets customers stored with it and decrypted some of them. It restored deployments for all customers late on 22 October, but the secrets it held still need replacing. Zeabur, breached through leaked internal credentials, exposed 321,810 accounts and about 3.2 million stored configuration values. It will start shutting services down on 1 December and close completely by 31 December. PingCAP confirmed that attackers used stolen credentials to reach its internal systems and copy TiDB Cloud customer records, though not customer databases. These platforms hold the keys that connect customers to their databases, cloud accounts and AI providers, so one breach becomes many. Shared services in healthcare carry the same risk: Quest Diagnostics disclosed on 22 October that an intruder had accessed patient records through Quanum, a system some clinics use to order tests and get results.
The third is the internet's front door. GitLab patched a flaw that lets an attacker run code on self-managed servers without an account, affecting releases back to 2014. NGINX and several HTTP/3 libraries needed fixes, attackers are taking over Plex media servers that missed an August update, and ransomware groups are still getting into companies through a Palo Alto Networks VPN flaw that was patched in May.
AI also appeared in the attacks themselves. Reuters reported that one attacker used AI agents, coordinated through an open-source tool called Cairn, to try more than 1,200 websites and break into those of more than 100 companies, for a few thousand dollars in model costs. A researcher could watch because the attackers left their Cairn control panels open on the internet. The break-ins he verified used long-known weaknesses, and the agents made finding and using them faster and cheaper. Japan's national computer emergency team, JPCERT/CC, has seen Cairn and two similar tools, CyberStrikeAI and ARTEX, in attack attempts of its own. Microsoft says a group it calls Storm-0940 used ARTEX in the campaign that stole ConnectWise's application credentials and reached customers' Microsoft 365 accounts, sometimes gaining privileged cloud access in under three hours.
We read the wave as AI changing both sides at once. Defenders and AI labs are finding long-hidden bugs in bulk, which produces bursts of urgent patches. Attackers use the same models to read those patches, automate break-ins and go after the AI libraries and keys that developers now depend on.
We've assessed the key incidents in this wave (so far). Choose the view closest to your role to see which matter most to you, how each one is fixed and what to do next.
The October incidents, assessed
Severity, relevance to your role, and how each one is fixed.
Showing the 9 critical incidents.
- CriticalBeing exploitedFound by AI, AI in defenceThis week
PHP2Shell: critical flaws in PHP itself
A crafted web request can make an unpatched PHP server run an attacker's commands without logging in.
How it's fixed: Manual system patch, high effort, with follow-up steps
What happened
The weakness is in PHP itself, so updating WordPress or another PHP application will not fix it. Attackers can read application secrets or plant a backdoor on the site. Attempts began four days before the fix and now run into the millions, from several separate attackers, and working exploits now get past a standard memory protection. Appliances and other products with PHP built in need the vendor's own update.What to do
Update the PHP runtime or your operating-system vendor's patched package, restart workers and rebuild container images. Check exposed servers for unexpected files, processes and outbound connections, going back to at least 17 October.Update route
Manual system patch. A runtime upgrade on every server, plus restarts and image rebuilds. PHP has published fixes for 7.4, 8.0 and 8.1; older versions need upgrading, and appliances wait on their vendor.Fixed versions
- PHP: 8.2.35, 8.3.36, 8.4.27 or 8.5.12
After updating
- Check for signs of compromise
- Rotate secrets at the issuing service
AI involvement
Calif found the flaws with OpenAI's GPT-5.6 Sol and Wiz independently with Gemini 4 Argon and GPT-5.6 Sol. Wiz also used AI to build detections and verify the patch, and OpenAI published a PHP2Shell checker.Status
Confirmed. Exploited or attack confirmed. CVE-2026-109618, CVE-2026-109619. - CriticalBeing exploitedAI targetedThis week
Railway: customers' stored secrets may have been exposed
An intruder may have accessed the encrypted secrets customers stored on the Railway hosting platform and decrypted some of them.
How it's fixed: Provider fix, high effort, with follow-up steps
What happened
Environment variables often hold database passwords and AI-provider keys. An attacker can use them against the connected services directly, without touching your application. Railway restored builds and deployments for all plans late on 22 October and is emailing the customers it judges most likely affected. It has not yet said how the access happened.What to do
Revoke and replace each stored secret at the service that issued it, redeploy, and check access and billing logs. Changing the Railway password does not invalidate a stolen OpenAI, GitHub or database key. Create new Railway API tokens; Railway has invalidated the old ones.Update route
Provider fix. Railway fixes its platform. Your work is rotating every secret it held, at source, and redeploying.After updating
- Rotate secrets at the issuing service
- Reconnect integrations with new credentials
AI involvement
Railway says the attack belongs to a series targeting platform companies to compromise AI inference providers.Status
Partly confirmed. Exploited or attack confirmed. - CriticalBeing exploitedAI targeted, AI in defenceThis week
LiteLLM: poisoned release stole developer and AI credentials
A hijacked release of a popular AI gateway library installed a credential stealer for about two hours.
How it's fixed: Package update, high effort, with follow-up steps
What happened
The malware ran when Python started, even if the application never imported LiteLLM. It took cloud keys, SSH keys, CI tokens and AI-provider keys. Installing the right package name was not enough to stay safe. It also installed a loader that fetched and ran remote code every hour.What to do
Find out whether 1.107.0 was installed and run. If it was, isolate the host without starting Python, rebuild the environment or image, and rotate every credential that machine could reach.Update route
Package update. Pinning away from the bad version is a normal package change. If it ran, the real work is rebuilding and rotating.Fixed versions
- litellm: 1.106.2 or an earlier pinned version or image digest
After updating
- Rebuild from clean images or environments
- Rotate secrets at the issuing service
- Check for signs of compromise
AI involvement
The stealer took AI-provider keys and LiteLLM's stored provider credentials; stolen AWS credentials were used to list Bedrock models. AISLE says its AI dependency firewall flagged the release three minutes after upload. LiteLLM believes the GitHub tokens leaked via logs after Claude Code embedded a token in response bodies.Status
Confirmed. Exploited or attack confirmed. - CriticalThis week
GitLab: unauthenticated code execution on self-managed servers
A flaw in every self-managed GitLab release since 2014 lets an attacker run code on the server without an account.
How it's fixed: Manual system patch, high effort, with follow-up steps
What happened
A compromised GitLab server holds source code, build pipelines and deployment secrets. An attacker can turn it into a route for malicious software releases. GitLab.com is already patched.What to do
Apply the emergency release for your branch (18.11 or newer; older lines must upgrade to a supported release) and restrict outside access until done. Use GitLab's published detections and check for new users, tokens and changed repositories.Update route
Manual system patch. A server upgrade with downtime. GitLab.com customers need do nothing.Fixed versions
- GitLab: 18.11.13, 19.0.10, 19.1.9, 19.2.9, 19.3.6, 19.4.3 or 19.5.1
After updating
- Check for signs of compromise
- Rotate secrets at the issuing service
Status
Confirmed. No attacks reported. CVE-2026-110264. - CriticalThis week
Node.js: compressed web content can trigger code execution
A flaw in how Node.js unpacks compressed web content can let an attacker run code, even through a response your app fetches from another server.
How it's fixed: Manual system patch, medium effort, with follow-up steps
What happened
The flaw is in Brotli decompression, the code that unpacks compressed web content. Malicious data can arrive in a request to your site or in a response your application fetches from another server. Node.js rates it high severity, and it is easy to reach because common tools unpack these responses automatically.What to do
Upgrade Node.js on developer machines, CI runners and container images, not just servers. Updating application dependencies does not replace the vulnerable runtime. Vercel has deployed WAF protection, but says it cannot cover malicious responses your functions fetch from elsewhere.Update route
Manual system patch. A runtime upgrade: updating npm packages does not replace Node.js itself. Rebuild container images and CI runners, and move off end-of-life versions 20 and 25.Fixed versions
- Node.js: 22.23.4, 24.22.1 or 26.12.1
After updating
- Rebuild from clean images or environments
Status
Confirmed. No attacks reported. CVE-2026-111497, CVE-2026-105482, CVE-2026-105483, CVE-2026-106069. - CriticalBeing exploitedThis week
Zeabur: hosting platform breached and closing down
Attackers used leaked internal credentials to take over a hosting platform's servers, which is now shutting down.
How it's fixed: Provider fix, high effort, with follow-up steps
What happened
Attackers reached shared clusters in nine regions, signed in as root to 101 customer servers on Google Cloud, added SSH keys and attached copies of customers' disks to their own machines. Customers face stolen secrets and a forced move: services start shutting down on 1 December and all stop by 31 December 2026.What to do
Revoke exposed credentials at their source, check deployments for unauthorised access and move applications and backups elsewhere. Rebuild suspect servers from trusted images.Update route
Provider fix. No fix to wait for: the platform is closing. Rotate, rebuild and migrate.After updating
- Rotate secrets at the issuing service
- Rebuild from clean images or environments
AI involvement
No AI role reported for the October intrusion; the separate August breach began through a customer's NextChat deployment.Status
Confirmed. Exploited or attack confirmed. - CriticalBeing exploitedAI used in attackThis week
ConnectWise: stolen app credentials used to reach Microsoft 365 tenants
Attackers stole a backup provider's app credentials and used access customers had already granted to reach their Microsoft 365 accounts.
How it's fixed: Provider fix, high effort, with follow-up steps
What happened
Attackers stole ConnectWise application credentials and signed in as the software, not as a person, so staff MFA prompts did not apply. Microsoft saw follow-on changes that could set up lasting access. It reports attempts against more than 2,250 tenants, not 2,250 confirmed breaches; successful sign-ins, privilege changes and data theft are separate findings.What to do
If you use ConnectWise Cloud Backup or legacy SkyKick integrations, keep affected connections disabled until ConnectWise gives formal restoration instructions. Check app sign-ins, added credentials and privilege changes in Microsoft 365. Disabling the original integration does not remove other access the attacker may have created.Update route
Provider fix. ConnectWise expects to finish security testing by the weekend, restore existing backups early next week and then re-enrol customers in phases. Its credential reset does not remove access already set up inside your tenant, so each tenant needs its own review.After updating
- Check for signs of compromise
- Rotate secrets at the issuing service
- End active sessions
AI involvement
Microsoft attributes the attack to Storm-0940, a China-aligned group that used ARTEX, an agentic AI penetration-testing framework, to automate reconnaissance, password spraying and abuse of trusted apps. Some intrusions went from first targeting to privileged cloud access in under three hours.Status
Confirmed. Exploited or attack confirmed. - CriticalThis month
Next.js: two critical code execution flaws in the web framework
Two flaws in Next.js, a popular framework for building websites, can let an attacker run code on the server without logging in.
How it's fixed: Package update, low effort
What happened
One flaw is in cached functions that return certain kinds of binary data; the other is in image optimisation of SVG files, through the image library it uses. Whether a site is exposed depends on which features it uses. A separate, less severe flaw lets attackers overload Server Actions.What to do
Upgrade Next.js to 16.4.1 or 15.5.28, which also brings the fixed image library. If you manage React Server Components packages directly, update them to the patched versions in the React advisories. Rebuild and redeploy.Update route
Package update. A normal dependency upgrade and redeploy.Fixed versions
- Next.js: 16.4.1 or 15.5.28
- sharp: 0.35.5 (brought in by the Next.js upgrade)
- React Server Components: 19.0.9, 19.1.10, 19.2.9 or 19.3.1
Status
Confirmed. Not yet known. CVE-2026-96889.Sources
- CriticalBeing exploitedThis month
Palo Alto GlobalProtect: VPN login bypass used by ransomware groups
Ransomware groups are using a flaw to log in to company VPNs without passing the normal checks.
How it's fixed: Manual system patch, high effort, with follow-up steps
What happened
Attackers enter through the organisation's own VPN, so their activity looks like remote work. Fixes have been available since 13 May, but unpatched systems are still being hit.What to do
Apply the fixed build, end all active VPN sessions after patching and look back for unexpected sessions. MFA does not protect against this flaw.Update route
Manual system patch. An appliance upgrade, usually in a maintenance window.Fixed versions
- PAN-OS: Fixed builds per the Palo Alto advisory
After updating
- End active sessions
- Check for signs of compromise
Status
Confirmed. Exploited or attack confirmed. CVE-2026-0257.
What this means for the cloud
The largest cloud providers' core services are intact as we write. The damage thus far sits in the layers built on top of them: hosting platforms, database services and developer tools that hold customers' long-lived keys. Zeabur's attackers signed in to 101 servers running on Google Cloud using credentials Zeabur itself had leaked; no flaw in Google's systems has been reported. The risk to AWS, Azure and Google Cloud is indirect. Keys and service accounts harvested from these smaller platforms give attackers a way into cloud accounts that looks like legitimate use.
In our Mythos piece we described a possible future in which the hyperscalers retreat into hardened cores while smaller organisations and neglected projects absorb the disruption. This month fits that picture. We expect customers and regulators to push sensitive work towards the providers with the strongest security, and platforms that store static secrets to come under pressure to replace them with short-lived credentials tied to each workload. That would improve security, at the cost of concentrating more of the internet in a few companies.
Takeaways: Most of this week's incidents can be fixed, and the fixes are known. These are the steps we would take now:
- Update PHP on every server you run to 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or install your operating-system vendor's patched package, then restart PHP workers and rebuild container images. PHP has published minimal fixes for 7.4, 8.0 and 8.1, and anything older needs upgrading. Updating WordPress and its plugins does not fix PHP2Shell, because PHP sits underneath WordPress. If a hosting provider or supplier runs your site, ask them to confirm they have installed the fixed PHP version.
- Treat any PHP server that was open to the internet before you patched it as possibly compromised. Look for unexpected files, processes and outbound connections back to at least 17 October, and replace the database passwords and API keys it held.
- Find the PHP you don't manage directly. Appliances, network devices and management consoles often have it built in, so check your vendors' advisories and the Dutch NCSC's product list. OpenAI's PHP2Shell checker shows which of your PHP versions are still unpatched. Keep Cloudflare's managed rules, or an equivalent web application firewall rule, switched on while you patch, as a stopgap rather than a fix.
- Update pip, uv and certifi in every environment, build runner and container image, starting with pip itself from the hash-checked link in the Python security guidance. Python 3.15.1, 3.14.9 and 3.13.17 ship the fixed pip for new environments.
- Rotate every secret ever stored on Railway or Zeabur at the service that issued it. Redeploy on Railway, and move off Zeabur before it closes. Replace TiDB Cloud management API keys, as PingCAP advises.
- Scan developer laptops for known-bad packages, editor extensions and AI tool settings with Perplexity's open-source Bumblebee, which reads what's installed without running any of it, on macOS and Linux. If LiteLLM 1.107.0 or a tampered OVHcloud tool ran anywhere, rebuild that machine and rotate every credential it could reach.
- If you use ConnectWise Cloud Backup or older SkyKick integrations, keep them disconnected until ConnectWise issues restoration instructions. Check Microsoft 365 for unfamiliar app sign-ins, added credentials and role changes, because disabling the integration does not remove access an attacker has already set up.
- Upgrade self-managed GitLab, NGINX, Node.js, Next.js and Palo Alto firewalls running GlobalProtect, then end all active GlobalProtect VPN sessions so that anyone already connected has to sign in again.
- Take Jason Clinton's advice and ask your board this week for help with the basics. For most firms that means an up-to-date list of the software they run, people who can patch it within a day, and a record of which keys each system holds.
- On public or shared Wi-Fi, such as in hotels, cafés and airports, use a trusted VPN that covers the whole device. It makes it much harder for someone on the same network to intercept your connection and pose as a trusted site, the kind of attack the eMudhra keys allow. It adds protection but does not replace updating your software.
These steps deal with this week's incidents. Our AI Cyber Action Plan covers the longer job: ten controls for a business that has to assume attacks will now move in hours.