Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
drupal-ckeditor-fileisimage — Drupal 11.4.8 - 高 - リモート - アップロード - CKEditor 5 の画像アップロードが依然として FileIsImage をスキップする | Kitploit
ツール/GitHubGitHub/abraxas/drupal-ckeditor-fileisimage
脆弱性分析エクスプロイトウェブアプリケーション悪用セキュリティ仮想化ウェブセキュリティペネトレーションテストラボと実践
GitHubabraxas/drupal-ckeditor-fileisimage

drupal-ckeditor-fileisimage

Drupal 11.4.8 - 高 - リモート - アップロード - CKEditor 5 の画像アップロードが依然として FileIsImage をスキップする

リポジトリを見る
158日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Abraxas Labs - drupal-ckeditor-fileisimage

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  drupal-ckeditor-fileisimage

解説記事: https://abraxaslabs.tech/research/drupal-ckeditor-fileisimage

drupal-ckeditor-fileisimage

クラス: 無制限アップロード / 蓄積型 XSS 到達範囲: リモート

Drupal core 11.4.8 (61044508) - Drupal

SA-CORE-2026-009 は JSON:API および REST の画像フィールドに FileIsImage を追加しました。CKEditor5ImageController::getImageUploadValidators は依然として FileExtension、FileSizeLimit、FileImageDimensions のみを返します。FileImageDimensions は、ファイルが有効な画像でない場合、違反なしで戻ります。残るチェックはファイル名の拡張子だけです。

CKEditor 5 の画像アップロードが有効なテキストフォーマットのユーザーは、x.png という名前の非画像バイト列を /ckeditor5/upload-image/{editor} に POST すると、201 と公開ファイル URL を得られます。

IDCVE 未割当
クラス無制限アップロード / スニッフィングされた場合は蓄積型 XSS
到達範囲リモート(認証済みのフォーマットユーザー)
CWECWE-434, CWE-79
CVSSMedium: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
製品Drupal core
影響を受けるバージョン11.4.8 (61044508071749629aaf3380aa85971e94df9e84)
認証CKEditor 5 の画像アップロードが有効なテキストフォーマットの認証済みユーザー(Standard では basic_html / full_html)
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ

攻撃者ができること

エディタで image_upload.status が true になっているフォーマットを使用できるアカウントが必要です。Standard では basic_html と full_html が該当します。アカウントを持たない完全な部外者はこのルートに到達できません(_entity_access: editor.use と CSRF)。

権限メソッド / シンク種類ラボ実証または推測
非画像バイト列を sites/default/files/inline-images/ 配下の公開 .png に書き込むPOST /ckeditor5/upload-image/{editor} multipart upload完全性ラボ実証済み。x.png は 201 と url=/sites/default/files/inline-images/x.png を返した
公開ファイル URL でそのバイト列を読み戻すJSON の url に対する GET偵察ラボ実証済み。200、49 バイト、ボディに DRUPAL-CKEDITOR-FILEISIMAGE-WITNESS を含む
Web サーバーまたはブラウザがファイルを HTML/JS としてスニッフィングした場合、訪問者に蓄積型 XSS同じ公開 URL、Content-Type は image ではない完全性(訪問者のオリジン)推測。このラボでは Apache の MIME を変更していない。Drupal はバイト列を保存した。
同じルート経由で本物の画像をアップロードするコントロール control.png 1x1 PNG意図された動作ラボ実証済み。201

この残存項目についてクローズ済み: .php 経由の PHP/RCE(ラボ実証済み 422 FileExtension)、未認証アップロード、JSON:API/REST の ImageItem(これらのパスはすでに FileIsImage を追加している)、LPE、デフォルトの画像拡張子許可リスト上のシェル。

発見の経緯

2026 年の SA-CORE の波の後、Drupal 11.4.8 に固定しました。JSON:API はすでに不足している制約を追加しています:

if (\is_a($field_definition->getItemDefinition()->getClass(), ImageItem::class, TRUE) && !array_key_exists('FileIsImage', $validators)) {
  $validators['FileIsImage'] = [];
}

REST の FileUploadResource.php も同様の処理を行います。CKEditor 5 はファイル名 + サイズ + 寸法のチェックに留められていました:

return [
  'FileExtension' => [
    'extensions' => implode(' ', $allowed_extensions),
  ],
  'FileSizeLimit' => [
    'fileLimit' => $max_filesize,
  ],
  'FileImageDimensions' => [
    'maxDimensions' => $max_dimensions,
  ],
];

FileImageDimensionsConstraintValidator は、ファイルが有効な画像でない場合、違反を返さずに終了します。Hub の drupal:11.4 は 11.4.9 にフロートしていたため、このピンは composer-exact な drupal/recommended-project:11.4.8 です。11.4.0 で Standard から Article が削除されたため、このイメージはインストール後に core/recipes/article_content_type を適用し、/node/add/article で CKEditor 5 が読み込まれるようにしています。

すでに記録済みの誤った道筋: FileImageDimensions を MIME チェックとして扱うこと(これは有効な画像に対する寸法チェックであり、それ以外では何もしません); デフォルトの許可リスト上で PHP シェルを主張すること(.php は 422); フローティングの hub タグを使って 11.4.9 が上がってくるのを眺めること。見せかけ: リバースシェル。オラクルは、偽の x.png で 201、同じバイト列を x.php と名付けた場合に 422 です。

同じピンの残り: oEmbed second-hop SSRF。

Lab

python3 drupal-ckeditor-fileisimage-Abraxas-Labs.py

または

cd lab
./run.sh

対象は http://127.0.0.1:19500 のみ。php:8.4-apache-trixie 上のライブ Drupal 11.4.8 Standard、SQLite。

SUCCESS drupal-ckeditor-fileisimage png-http=201 php-http=422 control-png-http=201 editor=basic_html stored-http=200 stored-has-witness=yes url=/sites/default/files/inline-images/x.png DRUPAL-CKEDITOR-FILEISIMAGE-WITNESS

修正

CKEditor5ImageController::getImageUploadValidators に 'FileIsImage' => [] を追加します。.php が 422 のままになるよう FileExtension は維持してください。Media Library の画像メディアタイプは、汎用の FileItem ではなく ImageItem を使用して同じ制約を継承させるべきです。

参考資料

  • github.com/drupal/drupal タグ 11.4.8 (61044508071749629aaf3380aa85971e94df9e84)
  • CKEditor5ImageController.php
  • 近接する修正済み項目(このアップロードとは別): SA-CORE-2026-009
  • 同じタグ: drupal-oembed-ssrf
  • CWE-434 · CWE-79

ライセンス

GNU Affero GPL v3.0。LICENSE を参照してください。ループバックラボ専用です。保証はありません。

ツールをダウンロード