The front door is unlocked and the intruder gets to pick which room to sleep in
CVE-2026-57827 is an unauthenticated arbitrary file upload in the Joomla third-party extension RSFiles (by RSJoomla). The extension's upload handler accepts POSTs from anonymous visitors and writes the file straight into /downloads without enforcing any allow-list on the extension. Because that directory is served by Apache/PHP-FPM as executable content on default LAMP stacks, an attacker drops a .php webshell and immediately requests it back to get code execution as the web user. Affected: RSFiles < 1.17.12. Fixed in RSFiles 1.17.12.
There is no vendor/authority CVSS score for this CVE — noisgate is establishing the first assessment. On the CIA/AC/AT/PR/UI axis the bug scores brutally: AV:N / AC:L / AT:N / PR:N / UI:N / S:U / C:H / I:H / A:H. That maps to CVSS ~9.8 in raw form. We assess it at HIGH (8.6) rather than CRITICAL because the installed base is small (RSFiles is a paid RSJoomla add-on with modest deployment), and the class — unauth file upload in a Joomla extension — is well-covered by WAF signatures and generic upload scanners. But make no mistake: on any host that actually runs it, this is *pre-auth RCE with no chain*.
4 steps from start to impact.
Discover an RSFiles-enabled Joomla site
com_rsfiles component in HTML/paths. Tools like wpscan-style Joomla scanners, joomscan, or a simple Shodan/FOFA query for com_rsfiles narrow the target list in minutes.- Internet-reachable Joomla site
- RSFiles component installed and enabled
- RSFiles is a paid extension with a niche footprint — Shodan/FOFA hit counts are in the low thousands globally
com_rsfiles path probing within days of a public PoC; Joomla-focused scanners (joomscan, droopescan) already flag the component.POST a PHP payload to the upload endpoint
.php (or .phtml/.phar) filename. Because the handler does not validate extension, MIME, or session, the file lands in /downloads. A public PoC written as a curl one-liner or a Metasploit auxiliary module is trivial to build from the diff.- Network reach to the vhost
- Upload endpoint enabled (default)
- A WAF with a generic
.phpupload rule (Cloudflare Managed Ruleset, ModSecurity CRS PL2+) will block it - Sites that moved
/downloadsbehind an nginxlocationthat disables PHP execution neutralize step 3
Request the dropped webshell
https://victim/downloads/shell.php and the Apache/PHP-FPM worker executes it as the web user (typically www-data, apache, or nobody). At this point they have a shell inside the Joomla document root with read/write over configuration.php — meaning database creds are stolen in the next 5 seconds.- /downloads served with PHP handler active
- Hardened deployments disable PHP execution in upload directories via
<Directory>or nginxlocationblocks - Read-only filesystem overlays (immutable containers) prevent the write in step 2
php-fpm spawning /bin/sh; Falco/auditd rules on execve from php workers trigger immediately.Pivot to full site + DB compromise
configuration.php (Joomla DB creds in plaintext), dumps #__users, cracks or resets the super-admin hash, and installs a persistent backdoor extension. If the DB user has FILE privilege or the host mounts customer data, this becomes a data-breach event.- Web user can read Joomla configuration files (default yes)
- Segmented DB with least-priv account limits data exposure
- Outbound egress filtering on the web tier slows exfil
configuration.php read by a non-CLI process, and on any new admin user in #__users.The supporting signals.
| In-the-wild status | No confirmed exploitation as of 2026-07-11 (disclosure day). Class is historically high-abuse — see CVE-2026-56290 (Page Builder CK) and CVE-2026-48908 (SP Page Builder) which were mass-scanned within 48h of disclosure. |
|---|---|
| Proof-of-concept | No public PoC repo at disclosure. Trivial to weaponize from the vendor changelog — expect a Metasploit auxiliary and Nuclei template within 7 days. |
| EPSS | Not yet scored (CVE disclosed 2026-07-11). Expect >0.5 within 30 days based on class precedent. |
| KEV status | Not listed. No CISA KEV entry. |
| CVSS vector (noisgate assessed) | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — raw 9.8. Reassessed 8.6 HIGH for installed-base and WAF coverage. |
| Affected versions | RSFiles < 1.17.12 for Joomla 3.x / 4.x / 5.x. |
| Fixed version | RSFiles 1.17.12 (released 2026-07 by RSJoomla). |
| Exposure data | Shodan/FOFA queries for com_rsfiles return low-thousands globally; the extension is paid and niche relative to JCE or SP Page Builder. |
| Disclosure date | 2026-07-11 — same day as vendor patch. |
| Reporter | Coordinated disclosure via RSJoomla vendor advisory; researcher not publicly credited at time of writing. |
noisgate verdict.
Pre-authentication arbitrary file upload with no user interaction and direct RCE is the single most decisive factor — this is the highest-abuse vulnerability class in web CMS ecosystems and the chain has zero prerequisites beyond the extension being installed. Verdict floored below CRITICAL because the affected component is a niche paid Joomla extension with a low-thousands installed base, not a canonical high-value-role component.
Why this verdict
- Pre-auth RCE with no chain: the attacker needs only network reach; no credentials, no user interaction, no second bug. This is the platonic worst-case for a web CMS.
- Role multiplier — public-facing web tier: RSFiles is deployed on internet-exposed Joomla sites by definition. Chain succeeds in every realistic deployment, but blast radius is one Joomla site + its DB, not fleet-scale. This keeps the floor at HIGH, not CRITICAL.
- Role multiplier — regulated data hosting: where RSFiles hosts membership sites, customer downloads, or GDPR-scope content, the DB dump in step 4 is a reportable breach. Still per-tenant, not fleet-scale.
- Installed-base narrowing: RSFiles is a paid RSJoomla add-on with a Shodan footprint in the low thousands — versus JCE or SP Page Builder which sit on hundreds of thousands of sites. Real-world exposure population is materially smaller.
- Detection is easy: OWASP CRS PL2+, Cloudflare Managed Ruleset, and any competent WAF already catch anonymous multipart uploads with
.phpfilenames. Sites behind a modern WAF have meaningful pre-patch protection.
Why not higher?
CRITICAL is reserved for canonical high-value-role components (hypervisors, identity providers, network edge, backup, PKI) or widely-deployed software with active exploitation. RSFiles is neither — it's a niche paid extension with no observed exploitation on day zero, and the blast radius is capped at the individual Joomla site rather than fleet or supply chain.
Why not lower?
MEDIUM would require meaningful prerequisites (auth, user interaction, unusual config) — this vuln has none. The chain is pre-auth, network-reachable, single-step, and lands SYSTEM-equivalent code execution in the web user context. Any lower rating would misrepresent the exploit primitive.
What to do — in priority order.
- Disable PHP execution in
/downloads— Add<Directory /var/www/joomla/downloads> php_flag engine off </Directory>(Apache) orlocation ~ ^/downloads/.*\.php$ { deny all; }(nginx). Even if a file gets written, it will not execute. Deploy within 30 days per noisgate mitigation SLA — or within hours if you cannot patch immediately. - Block anonymous POSTs to RSFiles upload endpoints at the WAF — Add a rule denying unauthenticated multipart/form-data to any URL containing
com_rsfilesandtask=upload. On Cloudflare/Akamai/AWS WAF this is a one-line custom rule. Ship within 30 days. - Upgrade to RSFiles 1.17.12 — The actual fix. Test in staging, then push to production. Complete within 180 days per noisgate remediation SLA, but for pre-auth RCE you should target ≤ 14 days.
- Audit
/downloadsfor existing webshells before you patch — Assume-breach:find /var/www/joomla/downloads -name '*.php*' -o -name '*.phtml' -o -name '*.phar'and diff against the extension's expected inventory. If you find hits, treat as an active IR event. - Rotate Joomla DB credentials and super-admin passwords post-patch — If exploitation happened pre-detection,
configuration.phpis stolen. Rotatedb.userpassword, force a full admin credential reset, and invalidate all session tokens.
- MFA on the Joomla admin panel — the vuln is pre-auth; no login is required.
- Disabling user registration — the upload endpoint doesn't check for a session at all.
- IP allow-listing the admin backend — the vulnerable endpoint is a front-end component route, not
/administrator/. - Renaming
/downloads— the extension writes to its configured directory; renaming without reconfiguring breaks the extension without fixing the upload.
Crowdsourced verification payload.
Run this on each Joomla web host as root or the user that owns the Joomla docroot. Invoke: sudo ./check-rsfiles.sh /var/www/joomla. It reads the RSFiles manifest XML and compares the installed version against the fixed release. Also greps /downloads for suspicious PHP artifacts.
#!/usr/bin/env bash
# noisgate: CVE-2026-57827 RSFiles unauth arbitrary file upload check
# Usage: sudo ./check-rsfiles.sh /path/to/joomla/docroot
set -u
DOCROOT="${1:-/var/www/joomla}"
FIXED="1.17.12"
if [[ ! -d "$DOCROOT" ]]; then
echo "UNKNOWN: docroot $DOCROOT not found"
exit 2
fi
# Locate the RSFiles component manifest
MANIFEST=$(find "$DOCROOT/administrator/components/com_rsfiles" -maxdepth 2 -name 'rsfiles.xml' 2>/dev/null | head -n1)
if [[ -z "$MANIFEST" ]]; then
echo "PATCHED: com_rsfiles not installed on $DOCROOT"
exit 0
fi
# Extract <version> from the XML
VERSION=$(grep -oP '(?<=<version>)[^<]+' "$MANIFEST" | head -n1)
if [[ -z "$VERSION" ]]; then
echo "UNKNOWN: could not parse version from $MANIFEST"
exit 2
fi
# Version comparison (dotted numeric)
ver_lt() {
[[ "$1" == "$2" ]] && return 1
[[ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n1)" == "$1" ]]
}
STATUS="PATCHED"
if ver_lt "$VERSION" "$FIXED"; then
STATUS="VULNERABLE"
fi
# Look for dropped webshells in /downloads
SHELLS=$(find "$DOCROOT"/downloads -type f \( -iname '*.php' -o -iname '*.phtml' -o -iname '*.phar' -o -iname '*.php?' \) 2>/dev/null)
echo "RSFiles version: $VERSION (fixed: $FIXED)"
echo "Status: $STATUS"
if [[ -n "$SHELLS" ]]; then
echo "WARNING: PHP artifacts found in /downloads (possible webshells):"
echo "$SHELLS"
echo "Status: VULNERABLE (assume-breach)"
exit 1
fi
[[ "$STATUS" == "VULNERABLE" ]] && exit 1 || exit 0
If you remember one thing.
com_rsfiles — this is a paid niche extension so most orgs will have zero, some will have a handful. For every hit, deploy the two compensating controls today (disable PHP execution in /downloads, WAF-block anonymous multipart POSTs to the RSFiles upload endpoint) — that is your noisgate mitigation SLA of ≤ 30 days collapsed into hours because it's pre-auth RCE. Then schedule the RSFiles 1.17.12 upgrade inside the noisgate remediation SLA of ≤ 180 days — but target 14 days given the exploit primitive. Before you close the ticket, assume-breach: scan /downloads for .php/.phtml/.phar artifacts and rotate DB + super-admin credentials on any host that was internet-exposed prior to mitigation.Sources
- RSJoomla forum — RSFiles 1.17.12 security update announcement
- CCB Belgium advisory — CVE-2026-56290 (analogous Joomla extension file-upload)
- Mallory — Unauthenticated file upload RCE in Joomla Page Builder CK (class reference)
- IONIX — CVE-2026-48908 SP Page Builder unauth file upload (class reference)
- Invicti — Joomla JCE arbitrary file upload (historical class reference)
- Acunetix — Joomla core arbitrary file upload signatures
- MITRE CWE-434 — Unrestricted Upload of File with Dangerous Type
- OWASP — File Upload Cheat Sheet
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.