Safeguard
Vulnerability Analysis

Four CMS Plugins, Four Vendors, the Same Unrestricted Upload Bug in Three Days

Four Joomla extensions from unrelated developers had unauthenticated file upload vulnerabilities confirmed exploited within a three-day window in July 2026, every one scoring CVSS 9.8.

Safeguard Research Team
5 min read

Four content-management-system plugins from four unrelated vendors had unrestricted file upload vulnerabilities added to CISA's Known Exploited Vulnerabilities catalogue within a three-day window, 7–10 July 2026. Every single one scores CVSS 9.8, and every single one is the identical vulnerability class.

CVEExtensionPlatformAdded to KEV
CVE-2026-48908SP Page BuilderJoomla7 Jul 2026
CVE-2026-56290Page Builder CKJoomla7 Jul 2026
CVE-2026-48939iCagendaJoomla10 Jul 2026
CVE-2026-56291Balbooa FormsJoomla10 Jul 2026

Four different development teams, four different extensions — a page builder, a second page builder, an event calendar, a form builder — and the same bug. Per NVD, each allows an unauthenticated attacker to upload an arbitrary file through a feature meant to accept something narrower — an attachment, a form submission, a content asset — resulting in PHP code landing on the server and executing.

Why the same bug appears four times independently

Unrestricted file upload is one of the oldest vulnerability classes in web application security, and it keeps reappearing for a structural reason rather than because developers keep failing to learn about it: any feature that legitimately needs to accept a file from a user — an event attachment, a form response, a media asset for a page layout — has to implement upload handling from scratch unless the underlying platform enforces validation centrally. Joomla, like most extensible CMS platforms, leaves file-type and extension validation largely to the extension author. Four different authors solved that problem four different times, and at least four of them got it wrong the same way: failing to adequately restrict what file type or extension the upload accepts, or failing to prevent an uploaded file from being placed somewhere the web server will execute it.

This is not a criticism specific to these four projects. It is the predictable outcome of a plugin ecosystem where core-team security scrutiny cannot extend to every third-party extension, and where "accept a file from an untrusted user" is a feature request that shows up constantly across unrelated plugin categories.

Why the low profile of these products matters more than it seems

None of these four are the vulnerability a large enterprise's security team is likely watching for — they're CMS plugins, not the corporate content platform. But that low profile is exactly the exposure: a Joomla site running SP Page Builder, iCagenda, Page Builder CK, or Balbooa Forms almost never has a dedicated owner tracking that individual extension's advisories, and unauthenticated arbitrary file upload leading to code execution is a complete compromise of the web server the instant it succeeds, regardless of the plugin's category or apparent importance.

What "unrestricted" actually fails to check

An unrestricted file upload vulnerability is, mechanically, a missing or incomplete check at one of a small number of points: the file's declared MIME type, its actual extension, its contents against an allow-list of legitimate formats, or the directory it gets written to relative to where the web server will treat files as executable. Any one of these checks done correctly is usually sufficient to prevent the bug; the pattern across all four of these CVEs is that at least one link in that chain was skipped or done incorrectly, letting a .php file — or an equivalent — reach a directory the web server will execute on request rather than merely serve as a static asset. This is why the same class of bug recurs so persistently across unrelated codebases: it requires the developer to get every one of several independent checks right, and a single omission anywhere in that chain is sufficient for the vulnerability to exist.

What to check this week

Inventory every Joomla extension actually installed, not just the ones your team remembers adding. These four exist across different functional categories specifically because "we don't run a form builder" doesn't rule out running one of the other three, or a fifth extension with the same class of bug not yet in KEV.

Patch or remove any of these four extensions immediately if present — unauthenticated, CVSS 9.8, and already confirmed exploited is the combination CISA's KEV catalogue exists to flag as non-negotiable.

Check upload directories for files that shouldn't be there, regardless of patch status. Unrestricted upload bugs are frequently exploited automatically by scanning tools within hours of disclosure; a patched extension does not undo an upload that already happened.

Treat any third-party CMS extension accepting file uploads as a standing risk category, not a one-time check. The same root cause recurring four times in three days across four vendors means the fifth instance is a matter of when, not if.

How Safeguard helps

Safeguard's continuous inventory extends to the full dependency surface of a web platform, including third-party CMS extensions that rarely receive the same security attention as core platform code. Reachability analysis then distinguishes an installed-but-dormant extension from one actually wired into a reachable upload path, which is the difference that decides whether an unrestricted file upload bug like this cluster is a five-minute removal or an active compromise already underway.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.