A Rough Cybersecurity Week: Three Incidents That Should Have Been Boring
Before you read: what this post is, and who it is for
This post covers three serious technology security incidents from the week of October 15, 2026 — issues that may have affected your business, your website, or your Microsoft 365 email. We will explain what each one means for your business and your computer's security.
We have highlighted the deeper technical explanations, and you are welcome to skip over them. They are written for someone who wants the detail.
One important note: to keep your systems safe, someone in your organization or a trusted partner should understand the more technical parts of this post. If you do not currently have an IT partner who can read this with you, please consider getting one.
Who might be affected:
- Anyone with a website — especially one built on WordPress, Drupal, Joomla, or any site running PHP. Roughly 70% of the internet runs on PHP.
- Anyone using Microsoft 365 or Office 365 — if a backup or remote support application was connected to your email or files.
- Anyone using remote support tools such as ScreenConnect, or an online backup service connected through your IT provider.
- Anyone with older equipment or appliances — firewalls, routers, scanners, and printers often carry their own outdated list of "trusted" certificate authorities.
- Anyone running software that is no longer supported — this turned out to be the single biggest risk factor of the week.
There is a particular kind of week every MSP dreads. Not the week where everything breaks. The week where nothing breaks, but every headline you read is something that could have broken.
The week of October 15 was that week for us. Three separate incidents landed on our desk in seven days, each one hitting a different layer of the stack:
- A certificate authority whose private keys were so weak they could be brute-forced
- A critical remote code execution flaw in PHP, affecting roughly 70% of the websites on the internet
- A nation-state supply chain attack that used a vendor’s stolen credential to walk into our clients’ Microsoft 365 tenants
None of these were our fault. All of them landed on us anyway. Here is what actually happened, what we did about it, and why we think this is the shape of the next several years for anyone who maintains systems.
The short version, if you only read one thing
Nothing was compromised on our client networks. All three of these were upstream failures — a certificate authority's mistake, a bug in the programming language that runs most websites, and a stolen login belonging to a software vendor. We checked every one of our clients who was exposed and found no sign that any of them had been accessed.
Your browser and your email are very likely fine. Google, Mozilla, Apple, and Microsoft all blocked the affected certificates within days. If you use Chrome, Firefox, Safari, or Edge, your protection was handled for you.
The real story is about old software. The vulnerabilities that AI-assisted researchers found this month were overwhelmingly in software that has been around for years — code that was stable enough to be forgotten, and that is now the hardest thing to patch. If your business runs anything old, that is the conversation to have.
The single most useful thing you can do: ask someone to produce a list of every system you run, and mark the ones that can no longer be updated. Everything else in this post is detail.
The Week Itself
The incidents were not sequential in the way a textbook would suggest. They overlapped, and they landed on top of work we were already doing.
Thursday, October 15 — the first signs of the worst of them. A backup application that some IT providers use to protect customer Microsoft 365 data began signing into customer email systems from a hosting provider’s address, at an hour when an application has no reason to be doing anything. By the end of that day, the stolen credential had been used to collect access permissions in more than a hundred confirmed customers’ accounts.
Friday, October 16 — the vendor published its first advisory, and an independent security researcher published the technical breakdown. This is when the work hit our desk. Two of our clients had that application installed.
Saturday, October 17 — an independent researcher known as “Wayne” was running a routine check against a public database of trusted certificates and noticed something odd in eight of eMudhra’s certificates. The private keys behind them were tiny — not weak in the way a password is weak, but small, like a lock that was only opened with four or five tries. He did not just report it. He unlocked each one in front of the certificate authorities to prove it, then sent the report to Apple, Google, Microsoft, Mozilla, and eMudhra.
Sunday, October 18 — eMudhra revoked the affected certificates, within fourteen hours of being told.
Monday, October 19 — Chrome and Firefox blocked the certificates, and Apple followed the same day. This was not a sophisticated breach. These certificates had been trusted by browsers, operating systems, and countless applications for years, which meant someone could have created a certificate for any website and intercepted traffic without anyone seeing a warning.
Tuesday, October 20 — Mozilla made the incident public, warning that the affected keys could let attackers issue fraudulent HTTPS certificates for sites they do not control. Microsoft blocked the certificates the same day. Also that afternoon, the identifiers for the two PHP vulnerabilities began circulating online ahead of schedule, and the coordinated disclosure started coming apart.
Wednesday, October 21 — three things landed on the same day. PHP released security updates for two critical vulnerabilities, together known as PHP2Shell. Every PHP version going back to 5.4 was affected — which means most websites on the internet.
The same day, the NSA advised that organizations using PHP be prepared to update immediately, and recommended that websites go offline if they could not. The French Interior Ministry took its prefectures’ sites down. The Dutch government portal, all Finnish government public-facing services, and the Danish national school communication platform went dark as a precaution. The Wikimedia Foundation shut down many supporting services. Major Japanese services and games went into emergency maintenance. This was not hysteria. It was the responsible call for a flaw with no configuration-based mitigation, in the language that roughly 70% of the web runs on.
And on that same Wednesday, Microsoft and the vendor confirmed who was behind the backup application breach: a China state-aligned group tracked as Storm-0940, using an AI-driven penetration testing framework called ARTEX to automate the attack across hundreds of organizations.
Three failures, three different failure modes, one week.
Technical details: the week in exact terms
Thursday, October 15 — ConnectWise’s Cloud Backup application (formerly SkyKick) began signing into customer Microsoft 365 tenants from a hosting provider address, at an hour when an application has no reason to be doing anything. By the end of that day, the credential had been used to collect Microsoft Graph access tokens in more than a hundred confirmed tenants.
Friday, October 16 — ConnectWise published its first advisory at 17:47 UTC, and Huntress published the technical breakdown. Two of our clients had the application installed.
Saturday, October 17 — an independent researcher known as “Wayne” was running a routine check against the Common CA Database, the public corpus of trusted intermediate certificates, and noticed something odd in eight of eMudhra’s certificates. The P-384 private keys behind them were smaller than 256 — not cryptographically weak, numerically small. A private key of this type is meant to be a random number more than a hundred digits long. These could be recovered by testing a few hundred values.
Wayne did not just report it. He signed the message “We have a problem here — Wayne” with each of the eight keys, proving they were recoverable, and sent the report to Apple, Google, Microsoft, Mozilla, and eMudhra.
Sunday, October 18 — eMudhra revoked the affected certificates, within fourteen hours of being told.
Monday, October 19 — Chrome and Firefox blocked the certificates, and Apple followed the same day. Cloudflare became aware at approximately 17:00 UTC and began patching its own critical services before public disclosure. One of the intermediate certificates had a private key of the number 4. Another was 56. Another was 115.
Tuesday, October 20 — Mozilla’s Dennis Jackson made the incident public on Mozilla’s security policy forum. Microsoft blocked the certificates the same day. Around 15:00 UTC, the two PHP CVE identifiers began circulating on forums and social media — carrying a wrong release time and a wrong severity score of 10.0. The real figure, according to PHP’s own developers, is 9.2. No technical details had leaked yet.
Wednesday, October 21 — PHP released PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35, fixing CVE-2026-109618 and CVE-2026-109619. The flaws were in PHP’s core engine, in the memory management and error handling that nearly every request touches. Separately, Microsoft and ConnectWise attributed the Cloud Backup campaign to Storm-0940, using the ARTEX agentic AI framework.
What We Actually Had To Do
The Certificate Authority Problem (eMudhra)
In plain language
Every time you visit a website, your computer checks that the site is who it claims to be. That check is done by a "certificate authority" — an approved company that issues those identity certificates.
One of those companies, eMudhra, issued eight certificates using secret keys that were essentially guessable. One of them was the number 4. Anyone who knew that could impersonate any website on the internet without your browser showing a warning.
No one was caught doing it, and no one is known to have used them. But eight trusted keys were effectively open, so the industry moved fast: the certificates were revoked and blocked by every major browser within two days. The company also announced it is leaving the certificate business entirely.
This was not a hacker breaking in. Nothing was stolen. The company had every security control it was supposed to have, and it still produced unusable keys — because nobody checked that the keys actually worked before shipping them.
What we actually had to do. There is no patch for this one. You cannot upgrade your way out of a compromised certificate authority.
The failure was not a hack. Nothing was stolen, no one broke into eMudhra’s infrastructure, and there was no attacker in the classic sense. According to eMudhra’s own account, the eight certificates were created during a formal Key Generation Ceremony in April 2025, using dedicated hardware security modules — the devices designed to generate keys that cannot be extracted or copied. A flaw in the ceremony script caused a step to produce a second set of weak keys alongside the original strong ones, and because their labels closely resembled the good keys, staff selected the weak ones when preparing the certificates.
Read that again. The security apparatus was in place. The hardware was in place. The ceremony was in place. What failed was the step where someone confirmed the output was sound — the process checked that the steps happened, not that the result was usable.
That is a more chilling failure than a breach, because a breach tells you where your controls were missing. This tells you the controls were present and the question asked was the wrong one.
The response was fast. The certificates were revoked within fourteen hours of the report, and blocked by every major browser within two days.
What was still exposed. Browsers are protected. What is not automatically protected is everything with its own built-in list of trusted certificate authorities — older devices, appliances running older operating systems, non-browser clients, and anything using a bundled certificate list from before the blocks.
Our guidance to clients was the same advice Cloudflare published: review and update the trust stores we control, and treat that as an ongoing inventory rather than a one-time task. The parts that needed hands-on attention were ours.
What this means for your business
- Your web browser is already protected. Chrome, Firefox, Safari, and Edge all received the block. If you use a standard browser, there is nothing to do.
- Your email is already protected. Microsoft blocked the affected certificates on October 20.
- Ask about the appliances. Firewalls, routers, Wi-Fi access points, network printers, and scanners often carry their own internal list of trusted certificate authorities that nobody ever updates. If you want to know whether yours is current, that is a question for whoever manages your network.
- Software built with the Go programming language needs rebuilding. The Go team released emergency versions (1.27.3 and 1.26.10) that reject these certificates — but the fix only applies to applications that were rebuilt after that release. If your business runs a custom internal tool or a product built on Go, ask when it was last rebuilt.
Technical details: the eMudhra certificate compromise
The keys sat in live certificates for about a year and a half before anyone noticed. The disclosure came from an independent researcher named “Wayne,” running a routine check against the Common CA Database. He recovered all eight from the public certificates in under a second and signed a message with each to prove it. The affected keys were from a batch of 24 intermediates; six issue TLS certificates for websites and two are used for code signing, and Sectigo had cross-signed all eight in May 2025.
The full ceremony details. According to eMudhra’s own account, the eight certificates were created during a Key Generation Ceremony on April 30, 2025, using FIPS 140-2 Level 3 Hardware Security Modules. A flaw in the ceremony script caused a wrap/unwrap step to produce a second set of weak keys alongside the original strong ones — and because their labels closely resembled the good keys, staff selected the weak ones when preparing the certificates. The specific private key values behind the eight compromised certificates were 4, 56, 115, 66, 155, 156, 230, and 237 — each a nominally valid P-384 key whose scalar value was trivially small.
The response. Chrome and Firefox blocked the certificates the same day the report landed. Apple followed October 19, Microsoft October 20. eMudhra revoked them within fourteen hours of learning about it. The Go project treated it as a vulnerability — CVE-2026-111943 — and shipped emergency releases 1.27.3 and 1.26.10 that reject certificate chains using the eight keys. That mattered more than it sounds: Go underpins Docker, Kubernetes, Terraform, Prometheus, and a large share of cloud-native infrastructure, and applications only pick up the fix when they are rebuilt.
What was still exposed. Browsers are protected. What is not automatically protected is everything with an embedded trust store — older devices, appliances running older operating systems, non-browser clients, and anything using a bundled certificate list from before the blocks. Devices with no reliable revocation mechanism can still trust these certificates. It is not known whether anyone recovered and used the weak keys during the seventeen months before the report.
Cloudflare updated its own shared trust stores, base images, and the WARP and Tunnel clients; most of the platform took care of itself. The parts that needed hands-on attention were ours.
The lesson for us: a trust store is a piece of software too. It ages. It is rarely inventoried. It is very rarely tested. An appliance bought five years ago for $800 carries a certificate list from five years ago, and that list quietly decides who it trusts.
On October 22, eMudhra announced it is leaving the global SSL/TLS certificate business entirely.
The PHP Problem (PHP2Shell)
In plain language
PHP is the programming language that most websites are built on — WordPress, Drupal, Joomla, and a huge share of e-commerce sites all run on it. About 70% of the internet uses PHP somewhere.
Two serious bugs were found in PHP itself — not in WordPress, not in a plugin, in the language engine that every single page request passes through. A website running an affected version was vulnerable even if it was just one page saying "Hello."
These were already being used by attackers before the public announcement. The most frightening detail: on a common type of web server setup, the attack runs before any password prompt or login page appears. A login screen does not protect you here.
Fixes shipped the next day. There is no setting you can turn to make an unpatched PHP install safe — the official guidance was that updating was the only real option. Major websites went temporarily offline to apply it.
The part worth dwelling on: the PHP team found this bug themselves in 2024 and could not agree on how to fix it for two years, because every candidate fix broke something for someone else. It only became urgent when AI-assisted researchers found it independently.
What we actually had to do. This one had a familiar shape: patch, verify, hunt for signs of exploitation. What made it different from a typical web application CVE is where the vulnerability lived. It was not in WordPress, or Drupal, or Joomla — it was in PHP itself. A “Hello World” page on an affected PHP version was vulnerable.
Our guidance to clients was the same advice we give every time a critical web-facing flaw lands: patch the runtime, not just the application. We also checked our own hosted infrastructure for PHP versions still sitting on an affected release, and looked for the tell-tale signs of exploitation — unexpected shell processes under the web server account, outbound connections to unfamiliar hosts.
One detail in PHP’s remediation guidance is easy to miss and worth repeating to anyone who runs PHP: fix the fatal errors and timeouts in your own application code too. Raising the memory limit and calling it a day is not a complete answer.
The Vendor advisory we received from the Cyber Hero Team made the point that patching is only the first layer. Their recommendation was to add application allowlisting and carefully configured ringfencing policies, so that even a compromised web service has sharply limited reach into the rest of the machine.
We agree. Patch first, but plan for the day a patch is too late.
Was it exploited? Almost certainly yes, and that changes how you read the rest of this post. Amazon’s threat intelligence identified a PHP2Shell exploitation attempt dating to October 17 — three days before the public disclosure. Cloudflare reported signs of early exploitation and deployed temporary WAF rules as a stopgap before the patch. watchTowr observed exploitation in the wild through its honeypot network on October 21.
What this means for your business
- If you have a website, ask what PHP version it runs. If it is running a version released before October 21, 2026, it needs updating. Your hosting provider or web designer can confirm this in minutes.
- Ask whether your site is behind a login. It should not need to be — and on some server setups, a login page would not have helped anyway. This is a good question to ask about any web-facing flaw.
- If your site is on old PHP, it may not be fixable. PHP stopped releasing ready-made updates for versions 5.4 through 8.1 because those versions reached end of life. If your site is on one of those, the answer is a rebuild or a migration, not a patch.
- If you manage web servers directly, expect this to be a recurring theme. This will not be the last time a flaw in the underlying language reaches your website without you having done anything wrong.
Technical details: PHP2Shell — CVE-2026-109618 and CVE-2026-109619
What the two bugs actually were. They are related but distinct, and the distinction matters for cleanup:
- CVE-2026-109618 — remote code execution via out-of-memory corruption. If a request hit PHP’s
memory_limitat exactly the wrong moment, PHP could abandon the request through alongjmp()and leave partially initialized internal data behind. Later, that data got treated as valid. - CVE-2026-109619 — remote code execution via stale global state. A fatal error at the wrong point could leave internal state pointing at memory belonging to an earlier request. A later request handled by the same worker could then use that freed memory.
On Apache with mod_php, an unauthenticated request could trigger this before any application code ran. Datadog reproduced it on PHP 8.5.11 with a plain unauthenticated HTTP POST and confirmed the part that keeps people up at night: application-level authentication does not block it. PHP processes the malicious request before your login code ever executes.
The part that should have made the news. A PHP core developer found the first signs of the out-of-memory bug in 2024, while fixing an unrelated issue from PHP’s first external security audit in years. A potential exploit was theorized at the time. But no concrete attack vector was ever produced, so clearer problems took priority. When the security team did pick it up, they drafted several competing fixes — one broke backward compatibility, one introduced a new denial-of-service risk, one would have required changes across thousands of third-party extensions. The team ran on consensus, feared shipping the wrong choice, and the work stalled and restarted for months.
Then it was found for real, and in August 2026 two groups reported it independently: Calif, a California security firm working inside OpenAI’s Patch the Planet program, with a researcher using GPT-5.6 Sol to audit PHP’s source; and Wiz, using Gemini 4 Argon, GPT-5.6 Sol, and their own Wiz Atlas tool. PHP’s own developers rated the flaw 9.2 critical. watchTowr rated it a flat 10.0.
PHP’s Foundation said it plainly: “We won’t pretend otherwise: the delay was a structural failure, caused by both the security team’s decision process and its lack of resources.” The Foundation runs on roughly 13 full- and part-time staff. It has published 15 CVEs since the start of July and worked through more than 100 reports that proved invalid or duplicates.
How the embargo broke. It broke in three steps, and each one made exploitation easier. First, on October 20 around 15:00 UTC, the CVE identifiers surfaced on forums and social media with a wrong release time and a wrong 10.0 score — no technical detail, but the disclosure clock was running. Second, Calif mistakenly published a proof-of-concept video around 20:00 UTC showing the exploit working against real targets; they deleted it, and copies spread. Third, Chainguard published prebuilt container images containing the fix more than six hours ahead of the release, which let attackers study the patch in binary form while everyone else waited. PHP had moved its release up a day, from the 22nd to the 21st, and dropped the embargo to compensate.
The patch. PHP shipped 8.5.12, 8.4.27, 8.3.36, and 8.2.35. Source patches went out for 7.4, 8.0, and 8.1, but those branches are end-of-life and got no binaries. Temporary mitigations were published, and the maintainers were explicit that there was no complete mitigation — updating was the only safe choice.
The application-level guidance. PHP’s remediation guidance notes that the stale state that CVE-2026-109619 exploits can be created by something that happened in an earlier request — an application-level fatal error or timeout. Fixing those in your own code is part of the fix.
Was it exploited? Amazon’s threat intelligence identified a PHP2Shell exploitation attempt dating to October 17 in MadPot telemetry — three days before the public disclosure. Cloudflare reported signs of early exploitation and deployed temporary WAF rules as a stopgap before the patch. watchTowr observed exploitation in the wild through its honeypot network on October 21. CISA had not observed exploitation as of that same day, which is a statement about visibility rather than safety.
The Vendor Breach (ConnectWise / SkyKick)
In plain language
Some IT providers use a cloud backup service to protect a client's Microsoft 365 email and files. That service had been given permission — a "login" for the application itself — to reach into customer accounts on their behalf.
Someone stole that login. From October 15, they used it to get into customer Microsoft 365 accounts across hundreds of organizations, without ever entering a username or password and without triggering any multi-factor authentication prompt.
Why didn't MFA stop it? Because it wasn't logging in as a person. It was presenting itself as the backup software — the same way the legitimate backup service presents itself. Any system that accepts a "service account" bypasses the human checks built for human logins.
We found the application at two of our clients, and neither showed any sign of suspicious activity. We disabled it quickly, reviewed their sign-in logs, and confirmed no evidence of compromise. We also checked for the credentials the attacker might have left behind — because turning off the front door does nothing if they already left a key under the mat.
What we actually had to do. This was the one that required us to act inside client tenants, which made it the most delicate.
The concern was not a piece of software we could patch. It was a credential — a vendor application secret that had been compromised and was being used against tenants that had trusted the vendor with access.
Our response, in order:
- Identify. We enumerated the Microsoft 365 tenants where the ConnectWise and SkyKick applications were present. Two of our clients had the application installed.
- Contain. We disabled the affected ConnectWise Cloud Backup and ConnectWise Cloud Management applications in both tenants. Disable, not delete — deleting an application does not undo backups ConnectWise already holds, and it complicates confirming restore options later.
- Verify. We checked sign-in logs for indicators of compromise. In both tenants we found no evidence of unauthorized sign-ins.
- Escalate the check. Disabling the application does not remove credentials that were already planted on other applications. Any tenant that had the ConnectWise applications enabled needs a review of credentials across all of its applications, not just the vendor’s.
That third step is the one people skip. Turning off the front door does nothing if the attacker already left a key under the mat.
The outcome was good, and speed is why. Two clients had the affected application installed. We disabled it quickly, and when we reviewed their sign-in logs, neither showed any sign of suspicious activity. The fast response is the entire reason those two tenants came through clean — not luck, and not luck we would want to rely on again.
What happened next. ConnectWise suspended Cloud Backup, SaaS Security, and Cloud Management while it ran its incident response and reset credentials, and began restoring service in phases. Existing backup archives remain encrypted and isolated, and ConnectWise reports no indication they were compromised. We are keeping the affected connections disabled until ConnectWise publishes guidance that applies to our specific service.
What this means for your business
- This one was handled for you, but only if you have a partner watching. Two of our clients had the affected application. We found it, disabled it, and verified their accounts. If you do not have someone doing that review, this is the gap.
- Ask what applications are connected to your email. A backup tool, a scanning tool, an automated accounting system — each one holds a standing key to your data. Any of them could still be connected years after you stopped using it.
- Do not rely on MFA alone to protect a tenant. MFA protects people from phishing. It does not protect against an application credential that was stolen from your vendor. The two are different doors.
- Your backups were not accessed. ConnectWise reports the existing archives remained encrypted and isolated. The risk was to email and files, not to your backup copies.
Technical details: the ConnectWise Cloud Backup / SkyKick credential compromise
How it worked, and why MFA did not help. The credential was a client assertion living in ConnectWise’s own tenant. That matters more than it sounds: application credentials do not authenticate as a user, so there is no user sign-in, no MFA prompt, and no password to steal. The attacker authenticated to the application exactly the way the backup service does, and received Microsoft Graph tokens carrying the application’s existing permissions. On October 15, tenants across multiple partner accounts saw sign-ins from a single hosting provider address at hours when no backup job should be running.
The permissions were broad by design. A backup service that can restore mailboxes, files, and directory data needs to read and write all of it. An attacker holding those tokens can read the same things.
Scope. Huntress confirmed unauthorized sign-ins in 162 tenants as of October 16, with the potential to reach every tenant where the application was consented — the credential works against all of them, not just the confirmed ones. In affected environments the application granted itself Global Administrator, then planted new credentials on other applications to hold the door open.
Who did it. On October 21, Microsoft attributed the campaign to Storm-0940, a China state-aligned group active since 2021, and ConnectWise’s CEO confirmed the finding. Microsoft’s analysis showed the group used ARTEX, an agentic AI penetration testing framework, to automate scanning, password spraying, and OAuth application abuse across hundreds of organizations. In several cases the time from initial targeting to privileged access was under three hours.
That last detail is the one worth sitting with. The same AI-assisted research that made the PHP flaws practical is now showing up in nation-state attack tooling. The barrier to exploiting a decade-old bug, and the barrier to reaching a hundred tenants, both just dropped.
One More ConnectWise Issue: ScreenConnect
In plain language
Separately from the backup incident, the same vendor publishes a remote support tool — the kind that lets an IT technician take control of your screen to fix a problem. A critical flaw in it allowed someone to transfer and run a file during a live support session, without asking you.
We had already handled this one back in September, before it became an emergency. We built a policy to find and remove vulnerable installations, and we removed all the unapproved copies of the tool from client networks, leaving only one properly controlled version.
What we actually had to do. We built a policy to find and remove vulnerable installations of the tool, and we deleted all the unapproved copies from client networks — leaving only one properly controlled version.
The reason to remove the extra copies rather than just patch them: a remote support tool that can transfer and execute files during a session is a legitimate tool with a very small blast radius, until it is not. We replaced the scatter with a controlled, managed version.
What this means for your business
- Ask how many remote support tools are on your network. Every copy is a way in. We have seen businesses accumulate a decade of remote support software, each installed by a different vendor over the years.
- Remote access is a business tool, not a personal one. If your IT provider can take over your screen, they should be able to tell you exactly which tool they use and why it is the only one.
- This is the pattern to look for. The vulnerability was real, but the more interesting issue is how many unmanaged copies of a remote access tool existed in the first place.
Technical details: ScreenConnect CVE-2026-84869
Separately from the Cloud Backup incident, ConnectWise patched a critical ScreenConnect vulnerability — CVE-2026-84869 — affecting versions prior to 26.6.5. Under specific circumstances, files could be transferred and executed through an active remote session without host confirmation. It was rated 9.9, added to CISA’s Known Exploited Vulnerabilities catalog, and exploited in worm-like attacks.
We had already worked this one before it turned critical. When the advisory landed in September, we did not simply patch and move on. We built a ThreatLocker tag, policy, and script to target and remove vulnerable ScreenConnect clients, and we deleted every learned or custom ScreenConnect application across client tenants, leaving only the built-in application with its policies disabled.
The reason to delete the custom applications rather than patch them: a remote access tool that can transfer and execute files during a session is a legitimate tool with a very small blast radius, until it is not. We replaced it with a controlled, managed version.
The Reason It Felt Like Triage
In plain language
Here is the uncomfortable part of the week, and the reason we are writing this rather than a short advisory.
AI has dramatically changed how fast vulnerabilities get found and turned into working attacks. In the last eighteen months, AI systems have found bugs in code that human researchers had missed for years, and have produced working attacks for them in minutes instead of weeks. In January, an AI system found all twelve zero-day bugs in a major release before any human researcher had.
Nobody's ability to fix software has improved at all. Installing a patch is not a technical problem — it is a business process problem. It needs testing, scheduling, sometimes a maintenance window, and usually a person to approve it. That process takes months for complex systems no matter how good your people are.
The gap is worst on old software. The systems AI keeps finding bugs in are typically the long-lived ones — stable code that was forgotten because it worked. And old software is exactly what takes longest to update, because the fix has to be tested against everything that has accumulated around it.
Some of the software in any environment has no fix coming at all. It reached the end of its supported life years ago. Those systems will be replaced on a date you chose, or exploited on a date someone else chose.
The technical picture. Every story above is about a specific failure. But the reason these three landed in the same week, and the reason our response felt like triage rather than routine, is structural. The rate at which vulnerabilities are being found and weaponized has changed shape in the last eighteen months. The rate at which most organizations can patch has not — and for the oldest software in any environment, it cannot, no matter how good the administrator is.
Technical details: AI discovery speed versus remediation capacity
Here is what changed, and why the legacy estate is where it lands hardest.
Discovery went to machine speed. In January 2026, when OpenSSL shipped a release containing twelve zero-day vulnerabilities, an AI system had already found all twelve independently — and in five cases proposed patches that made it into the official release. In April 2026, Anthropic documented its Claude Mythos Preview identifying thousands of previously unknown vulnerabilities across every major operating system and browser. Its flagship find was CVE-2026-4747, a stack buffer overflow in FreeBSD’s kernel NFS implementation that had survived seventeen years of code review, multiple security audits, and years of fuzzing campaigns — with working exploits generated without human guidance.
The economics are what should stop an administrator cold. One AI agent swarm identified more than a hundred exploitable kernel vulnerabilities across the AMD, Intel, NVIDIA, Dell, Lenovo, and IBM driver codebases over a thirty-day run, at a compute cost of roughly six hundred dollars. Research from 2025 into early 2026 documented AI systems generating working CVE exploits in ten to fifteen minutes, at about a dollar per attempt.
The exploitation window went negative. Mandiant’s M-Trends 2026 report, built on more than 500,000 hours of incident response engagements across 2025, put the mean time to exploit newly disclosed vulnerabilities at an estimated negative seven days — exploitation begins, on average, before a patch exists. CrowdStrike’s 2026 Global Threat Report found the average eCrime breakout time fell to 29 minutes, with the fastest observed at 27 seconds, and one intrusion beginning data exfiltration within four minutes of initial access. Mandiant also found the median time from initial compromise to lateral movement dropped from more than eight hours in 2022 to twenty-two seconds in 2025.
The defender’s side of the ledger has not moved. Qualys’s 2026 Enterprise Patch and Remediation Benchmark found the mean time to remediate critical vulnerabilities in complex enterprise applications reached five months and ten days. At the moment of disclosure, 85% of vulnerable enterprise assets were still unpatched. Three months later, 12% were still exposed. Edgescan’s 2025 statistics put the twelve-month figure at 45.4% of discovered vulnerabilities still unpatched. CISA’s Known Exploited Vulnerabilities catalog carries a two-week remediation mandate for federal agencies, and research from 2024–25 found more than 60% of known exploited vulnerabilities still miss their deadlines.
And this is precisely where legacy lives. The five-month-and-ten-day figure is not spread evenly. It is driven by high-complexity applications — Java runtime environments, .NET frameworks, Citrix Workspace App — where compatibility testing alone consumes weeks. The software that predates AI is disproportionately the software with the longest lead time to a fix, because the fix has to be tested against everything that has piled up around it since 2009.
Then there is the harder half. A large share of the estate has no fix coming at all. End-of-life software is not a patching problem; it is a replacement problem, and replacement needs a date. runZero’s research puts the enterprise-wide end-of-life population tripling, from roughly 5% to around 16%, with about a third of enterprise Windows assets losing support. The PHP story is the same story in miniature: the maintainers were explicit that there was no complete mitigation for the parts of PHP 5.4 through 8.1 that had no supported binaries, and that updating was the only safe choice. The Cyber Hero Team’s advisory made the same point from a different angle — because PHP is embedded across many products and services, controls have to be tailored and tested for each environment rather than applied once.
There is a pattern here that I do not think has been fully absorbed yet. AI-assisted discovery is disproportionately surfacing bugs in old, stable, long-lived code — the seventeen-year-old FreeBSD NFS bug is the emblematic example, and the OpenSSL release is another. That is not a coincidence of where researchers happened to look. It is where the untested decades accumulate. And old, stable, widely-deployed code is exactly the code that has the worst upgrade path.
So the honest uncomfortable conclusion: for a meaningful slice of any environment, there is no patch strategy. The system either gets replaced on a date you chose, or it gets exploited on a date someone else chose. Making that replacement date explicit is the entire job.
The counterweight, honestly stated. AI is helping defenders too, and it would be dishonest to present this as one-sided. Qualys’s Agent Val validates exploitability continuously instead of trusting a static score. The PHP Foundation now scans its own code with Anthropic’s Claude Mythos and validates incoming reports with OpenAI’s Daybreak. Microsoft and GitHub ship AI-assisted auto-remediation. CrowdStrike launched Project QuiltWorks in April 2026 as an industry coalition for exactly this problem, with Accenture deploying twenty-seven agents to automate vulnerability assessment and prioritization across its client base.
The realistic near-term read, from Recorded Future’s H1 2026 trend analysis, is not a sudden flood of fully autonomous exploitation. It is a narrower window in which to decide which vulnerabilities actually matter and remediate them before someone else operationalizes them. And that help only lands if you know what you are running, can tell an exploitable path from a frightening score, and have hours available to act. Which is exactly where legacy estates fail hardest.
What This Means For How We Work
Our own patch guidance has always been “patch the runtime, not just the application.” That advice now has a second half, and we are changing how we deliver it.
- Patch urgency is now driven by exploitability, not by severity score. A 9.8 in something unreachable from the internet is less urgent than a 6.5 on an exposed authentication service. We are prioritizing on whether a working exploit exists and whether attackers are demonstrably using it — not on the CVSS number alone.
- Legacy gets a replacement plan, not a patch ticket. Where we find end-of-life or unsupported platforms, that is a migration conversation with a date and a budget, and it goes on the roadmap as such rather than as a recurring exception that gets re-deferred every quarter.
- Visibility comes first because it gates everything else. We cannot patch what we cannot find, and we cannot prioritize what we cannot see. Getting a defensible inventory of what is actually running — including the things nobody owns anymore — is now a prerequisite for every other security commitment, not a nice-to-have.
- For the software we cannot patch, we plan the compensating control. Application allowlisting, ringfencing, and network segmentation are not a substitute for patching when the patch will never exist. They are the plan for the estate where patching is not available.
- We watch the AI tooling on the defensive side too. If the platforms we run on are adding AI-assisted remediation, we evaluate it — because the alternative is watching the adversary’s tooling get adopted faster than ours.
The Patterns We Noticed
Looking back at the week, five patterns stood out — and they are the reason we are writing this rather than just another advisory.
First: the failures were all upstream of our clients. Not one of the three incidents was a flaw in anything our clients bought, installed, or configured. They were a certificate authority’s key ceremony, a language runtime’s error handling, and a vendor’s credential storage. If your risk model assumes your risk lives inside your perimeter, it is measuring the wrong thing. Your perimeter is downstream of other people’s security decisions.
Second: the response time is what we actually control. We did not choose whether eMudhra would generate weak keys, or whether PHP would ship a decade-old memory bug, or whether a nation-state group would decide our backup vendor was worth compromising. But we chose how quickly we identified affected systems, how fast we contained them, and whether we hunted for signs of exploitation afterward. That is the part of the job that belongs to us, and it is the part we can get measurably better at.
Third: every one of these had a long tail of unmanaged assets. The trust store in an appliance nobody has opened in years. The PHP version on a site built once by a contractor and never revisited. The vendor application in a tenant that was set up during onboarding and never looked at again. These are the places where incidents actually live, and they are invisible precisely because nobody owns them.
Fourth: AI cut both ways in the same week. The research that made the PHP flaws findable was substantially AI-assisted — and three days later, the same capability showed up on the other side of the fence, in the hands of a nation-state group using agentic AI to compromise hundreds of organizations. The practical bar for both finding and exploiting a decade-old flaw dropped in the same week. AI is already on the defensive side too — but the asymmetry that matters most is not AI against humans. It is AI against process: a machine that finds and weaponizes a flaw in minutes does not have to wait for a change advisory board.
Fifth: “we had controls in place” is not the same as “the controls worked.” eMudhra had HSMs, a formal key ceremony, and revocation capability. All of that was present and all of it was insufficient, because the ceremony script produced weak keys and nobody checked the output. PHP had a security team, a disclosure process, and a formal fix pipeline — and a two-year-old known bug that sat in that pipeline for two years because every candidate fix broke something. The common thread is not missing process. It is process that was never allowed to reach a conclusion.
That applies far beyond certificate authorities and language runtimes. We run our own key ceremonies check, our own monitoring check, and our own backup check — but the question is never whether the control exists. It is whether anyone has confirmed the control produces the right result, and whether anything in our process is allowed to stall indefinitely without someone forcing it to a decision.
Technical details: the five patterns in full
Fourth, in full. The research that made the PHP flaws findable was substantially AI-assisted — Gemini 4 Argon and GPT-5.6 Sol reading PHP’s source, at the edge of what human researchers could practically achieve. Three days later, the same capability showed up on the other side of the fence, in the hands of a nation-state group using agentic AI to compromise hundreds of organizations. The practical bar for both finding and exploiting a decade-old flaw dropped in the same week. And AI is already on the defensive side too: PHP’s Foundation now scans its own code with Anthropic’s Claude Mythos and validates incoming reports with OpenAI’s Daybreak. If your risk assumptions were built when that bar was high, they are now too comfortable — and if your security program assumes humans are the only ones reading source code, that assumption expired too. The asymmetry that matters most, though, is not AI against humans. It is AI against process: a machine that finds and weaponizes a flaw in minutes does not have to wait for a change advisory board.
What We Are Doing About It
We are treating this week as a prompt to tighten the things that were too loose.
What this means for you, in practical terms
These are the changes we are making to how we work. If you are a Nerdworks client, most of them are already happening on your systems. If you are reading this because you are not a client — and you should have a partner who is — this is what you should be asking one for.
- We are inventorying the certificate trust stores on appliances and systems that carry their own internal list of trusted authorities, and assigning a patching path to each one.
- We are scheduling rebuilds where a security fix requires recompiling software. A patched language runtime inside an application that was never rebuilt is still vulnerable.
- We are verifying runtime versions directly rather than trusting that an application update implies the underlying platform was updated.
- We are putting review dates on unsupported software — end-of-life platforms now get a date and a budget, not a quarterly shrug.
- We are reviewing third-party application credentials across managed tenants, with particular attention to applications added during onboarding and never revisited.
- We are consolidating remote access tools into a single controlled, policy-governed installation, so there is one thing to review instead of a scatter of them.
- We are testing controls, not just counting them — adding verification steps that confirm a control produced the correct result, not just that it is configured.
- We are making sure our logs are actually usable when a vendor says "check your logs." The two tenants we examined for the ConnectWise issue had them. If they had not, "we found no evidence of compromise" would have been an unverifiable claim.
We would rather be the boring MSP than the interesting story. But the week we just had is a useful reminder that the interesting story does not wait for us to be ready.
The Takeaway for Your Business
You do not need to become a certificate authority expert or a PHP vulnerability analyst. You do need to know the five questions that would have mattered for each of these:
- Do we know what is running inside our environment? The PHP version, the appliances, the vendor applications — most organizations can answer this for the servers they know about and cannot answer it for the rest.
- Who is allowed into our cloud tenant, and are those permissions still needed? A backup application that was useful during onboarding should not still hold a live application credential three years later.
- When something happens, can we prove what happened? Not what we assume happened, not what the vendor says probably happened — what our logs actually show.
- Do we rebuild our applications when the runtime underneath them changes? A Go fix does nothing to a binary you have not recompiled. If your application trusts a certificate list, that list is baked in until you rebuild.
- Which of our systems are we never going to patch — and when are we replacing them? Every unsupported platform is a system with no patch strategy. It will be replaced on a date you chose, or it will be exploited on a date somebody else chose. The only way to answer that question is to have the list in front of you.
If any of those five answers is “I am not sure,” that is the conversation to have, and it is a much better use of a Tuesday afternoon than reacting to a headline on a Friday.
If you want a second set of eyes on your environment, book a discovery call. We will look at what you are running, what has access to what, and where the gaps are — no obligation, and no jargon.
If you would rather handle it internally, start here: identify every machine that talks to the internet, find out what certificate authority it trusts and which PHP version it runs, pull the list of applications with credentials in your Microsoft 365 tenant, check whether anything you run was built with a Go version older than 1.27.3, and then make a separate list of everything you are running that nobody is going to patch anymore. Six lists. The last one is the one that decides whether the first five mattered.