
CVE-2026-53767 + CVE-2026-53768 - Chyrp Lite ≤ 2026.01 における uploads_path ブロックリストバイパスと拡張子検証の欠落による認証済みRCE
CVE-2026-53767 + CVE-2026-53768 - Chyrp Lite ≤ 2026.01("Iriomote")における認証済みRCE
連鎖攻撃:
uploads_pathブロックリストバイパス(CVE-2026-53768)+admin_update_upload()におけるファイル拡張子検証の欠如(CVE-2026-53767)→www-dataとしてのリモートコード実行
Chyrp Lite ≤ 2026.01 は、change_settings および edit_upload の権限(デフォルトでは管理者)を持つ任意のユーザーが悪用可能な、認証済みリモートコード実行(RCE)連鎖に対して脆弱です。
| CVE | CVE-2026-53767 · CVE-2026-53768 |
| CVSS | 9.1 Critical (AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H) |
| 影響を受けるバージョン | xenocrat/chyrp-lite ≤ 2026.01 |
| 修正済み | commit 1489dc9 |
| アドバイザリ | GHSA-8h86-c24h-5jp3 · GHSA-r9w7-5h94-wq5x |
| 報告者 | iltosec |
python chyrp_rce_poc.py -h
usage: chyrp_rce_poc.py [-h] -u URL -U USERNAME -P PASSWORD [-c CMD] [-i]
[--config CONFIG] [--restore RESTORE]
python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:'
python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:' -c 'cat /etc/passwd'

python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:' -i

ステップ1 - 認証
ステップ2 - uploads_path を tools/ にリダイレクト(ブロックリストに含まれない)
画像
画像
ステップ3 - tools/docgen.php を上書き(置換時の拡張子チェックなし)
画像
画像
ステップ4 - 実行
http://127.0.0.1/chyrp/tools/docgen.php?cmd=id
画像
uploads_path ブロックリストincludes/controller/Admin.php は uploads_path をハードコードされたブロックリストと照合して検証します:
admin | ajax | feathers | fonts | includes | modules | themes
Chyrp Lite に同梱され、実行可能な .php ファイル(docgen.php、gettext.php、triggers.php)を含む tools/ ディレクトリはリストに含まれていません。uploads_path=tools を送信すると検証を通過し、config.json.php に永続化されます。
admin_update_upload() における拡張子検証の欠如upload_tester()(includes/helpers.php)は PHP のアップロードエラーコードとファイルサイズのみをチェックし、置換ファイルに対する拡張子の検証は行いません。対象ファイル名は $_POST['file'] から取得され、現在の uploads_path に対して解決されます。tools/docgen.php は既に存在するため(is_file() チェックを満たす)、任意の内容で静かに上書きされます。
注記:
--configフラグは CSRF トークン計算用にconfig.json.phpを指定します。ファイルがローカルで読み取れない場合、スクリプトは HTML レスポンスからトークンを自動的に抽出するフォールバックを使用します。
コミット 1489dc9 以降を含むバージョンに更新してください。
2つの独立した修正が適用されました:
修正1 - uploads_path ブロックリストに tools(および licenses)を追加:
// Before
"/^$qdir((admin|ajax|feathers|fonts|includes|modules|themes)$qdir|$)/"
// After
"/^$qdir((admin|ajax|feathers|fonts|includes|licenses|modules|themes|tools)$qdir|$)/"
修正2 - admin_update_upload() でアップロードされたファイルの拡張子をホワイトリストと照合して検証:
$new_extension = strtolower(pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION));
$whitelist = upload_filter_whitelist();
if (!in_array($new_extension, $whitelist))
error(__("Error"), __("File type is not allowed."), code: 422);
この PoC は教育および研究目的のみで公開されています。所有しているシステム、または明示的な書面によるテスト許可を得たシステムに対してのみ使用してください。作者は誤用について一切の責任を負いません。