
CVE-2026-36669に関する詳細なセキュリティアドバイザリ:Feng Officeにおける認証なしの任意ファイルアップロード。これにより、保存型XSSとセッションハイジャックが可能になります。技術分析、PoC、および修復手順が含まれています。
Feng Office Community Edition (バージョン 3.11.13.11) の ck_upload_handler.php に、認証不要の任意ファイルアップロードの脆弱性が存在します。この欠陥により、リモートの認証されていない攻撃者が、任意のファイル(悪意のある .html や .php スクリプトを含む)を Web アクセス可能なディレクトリにアップロードできます。管理クッキーの保護(HttpOnly)が欠如していることと組み合わせることで、この脆弱性は保存型クロスサイトスクリプティング(XSS)および管理セッションハイジャックにつながる可能性があります。
| 指標 | 詳細 |
|---|
| CVE 識別子 | CVE-2026-36669 |
| 脆弱性タイプ | 危険なタイプのファイルに対する制限のないアップロード (CWE-434) |
| 関連する弱点 | 重要な機能に対する認証の欠如 (CWE-306) |
| 影響を受ける製品 | Feng Office Community Edition |
| 影響を受けるバージョン | バージョン 3.11.13.11(およびそれ以前のバージョンも可能性あり) |
| 悪用状況 | 概念実証が確認済み |
| 修正状況 | 未パッチ(ベンダーに通知済み、標準的な開示期間内にパッチは提供されませんでした) |
エンドポイント ck_upload_handler.php はスタンドアロンスクリプトとして動作します。メインアプリケーションの認証ミドルウェアやアクセス制御リスト(ACL)を読み込んだり継承したりしません。その結果、このスクリプトに直接送信された外部リクエストはすべて認証済みとして扱われます。
ck_upload_handler.php のソースコードでは、アップロードを特定の画像形式(.jpg、.png、.gif)に制限するように設計されたサーバー側ファイル検証ロジック(21~25行目)が明示的にコメントアウトされています。
// $pattern = "/\.(jpg|png|gif)$/i";
// if (!preg_match($pattern,$_FILES['upload']['name'])) {
// ...
// }
この正規表現の制約が無効になっているため、ファイルアップロード機構はユーザーが指定した任意の拡張子を受け入れます。
スクリプトは PHP の copy() 関数を使用して、アップロードされたファイルを /tmp/ ディレクトリに直接書き込みます。このディレクトリは Web アクセス可能に設定されています。
グローバル設定ファイル application/config/config.php では、セッションクッキーに HttpOnly フラグが適用されていません。攻撃者がクライアントサイドスクリプトブロックを含む .html ファイルをアップロードすると、そのファイルを表示した管理者は、アクティブなセッションのコンテキストでスクリプトを実行することになります。これにより、攻撃者はアクティブな管理セッショントークンを静かに抽出できます。
注意: この概念実証は、教育および防御的な監査目的のみで提供されています。
脆弱性を検証するには、無害な検証ファイル(例:test.html)を含むマルチパート POST リクエストをエンドポイントに送信し、必要な CKEditorFuncNum パラメータを追加します。
curl -i -X POST \
-F "[email protected]" \
"http://<ターゲットドメイン>/ck_upload_handler.php?CKEditorFuncNum=1"
ここで、test.html には基本的な概念実証用の HTML マークアップが含まれます。
<!DOCTYPE html>
<html>
<body>
<script>
alert("脆弱性確認: " + document.cookie);
</script>
</body>
</html>
脆弱であれば、サーバーは 200 OK ステータスで応答し、アップロードパスを示す JavaScript ブロックを出力します。
<script type="text/javascript">
window.parent.CKEDITOR.tools.callFunction("1", "/tmp/test.html", "");
</script>
影響を受けるバージョンの Feng Office を運用している場合は、以下の手動ホットフィックスを適用してファイルアップロードエンドポイントを保護してください。
すべてのファイルアップロードロジックを処理する前に、ck_upload_handler.php がアクティブな管理セッションをチェックするようにします。
拡張子チェックをアンコメントし、厳密に適用します。期待される非実行可能な画像 MIME タイプに明示的に一致しないアップロードはすべて拒否します。
$pattern = "/\.(jpg|jpeg|png|gif)$/i";
if (!preg_match($pattern, $_FILES['upload']['name'])) {
header("HTTP/1.1 403 Forbidden");
exit("Invalid file type.");
}
PHP 設定またはアプリケーションのブートストラップ設定を変更し、セッションクッキーがクライアントサイドスクリプティング API を介してアクセスできないようにします。
session.cookie_httponly = On
Soufiane LAGZIRI