Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-68116 — CVE-2025-68116 のドキュメンテーション | Kitploit
ツール/GitHubGitHub/x0root/cve-2025-68116
脆弱性分析エクスプロイトウェブセキュリティペネトレーションテスト論文と研究学習と教育
GitHubx0root/cve-2025-68116

CVE-2025-68116

CVE-2025-68116 のドキュメンテーション

リポジトリを見る
8ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-68116

著者: @x0root
脆弱性: ブラウザでレンダリング可能なアップロード (SVG / HTML) による格納型クロスサイトスクリプティング (XSS)
影響を受けるソフトウェア: FileRise (< 2.7.1)
パッチ適用バージョン: 2.7.1
公式CVE (GHSA経由で申請): CVE-2025-68116 (追跡/勧告: GHSA-35pp-ggh6-c59c)
関連する以前の勧告 (回避された当初の緩和策): GHSA-qrcv-vjvf-fr29

CVSS評価:

  • CNA (GitHub): CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:L — 8.9 (高)
  • 報告者 (著者分析): CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L — 9.6 (緊急)

CVSSスコアリングの根拠 (報告者)

報告者の評価では、Privileges Required (PR) を脆弱性を仕込む時点ではなく、悪用される時点で評価します。

悪用は、被害者が生成された公開共有リンクにアクセスした時点で発生し、認証や権限は不要です (PR:N)。

CNAの評価は、悪意のあるファイルをアップロードできるかどうかに基づいてPRを評価します。

しかし、CVSS v3.1はPrivileges Required (PR) を、脆弱性が悪用される時点で攻撃者が保持していなければならない権限と定義しており、脆弱な状態を作り出すために必要な権限ではありません。

したがって、PR:Nの方が実際の悪用条件をより正確に反映しており、結果として緊急 (9.6) の重大度分類になります。

注記: GHSA-qrcv-vjvf-fr29は、FileRiseのWeb UI (プレビューペイン) 内でSVGがレンダリングされるのを防ぐ緩和策を導入しました。このレポートは、その緩和策の回避—具体的にはバックエンドの共有/ダウンロードエンドポイント—を文書化したもので、GHSA-35pp-ggh6-c59c / CVE-2025-68116として追跡されています。


概要

この文書は、CVE-2025-68116の完全な技術記録です。これはFileRiseの格納型XSSであり、以前の緩和策後も存続し、最終的にv2.7.1で修正されました。発見、悪用の概念実証、繰り返された失敗した修正、正確な根本原因の制御フロー分析 (証拠付き)、パッチの最終検証、CVSS評価に関連する悪用可能性の特性の分析を含みます。以下のすべての内容は、再現テスト、コントローラの検査、公開された勧告スレッドに基づいています。


1. 背景: 以前の勧告と不完全な修正

以前の勧告であるGHSA-qrcv-vjvf-fr29は、FileRiseのWeb UIでのインライン描画をブロックすることで、SVGアップロードを介した格納型XSSに対処しました。その緩和策は、次のようなバックエンドエンドポイントがSVGファイルを配信する方法には対処していませんでした:

  • /api/file/download.php
: Constant FILTER_SANITIZE_STRING is deprecated in on line : Cannot modify header information - headers already sent by (output started at /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php:1644) in on line ...then the raw SVG payload streamed and rendered inline... : Constant FILTER_SANITIZE_STRING is deprecated in on line : Cannot modify header information - headers already sent by (output started at /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php:1644) in on line
  • /api/file/share.php
  • CVE-2025-68116 (GHSA-35pp-ggh6-c59cとして追跡) は、GHSA-qrcv-vjvf-fr29緩和策の回避を文書化しています:攻撃者は細工されたSVGを保存し、公開共有リンクまたは特定のダウンロード動作を介して被害者に配信し、FileRiseオリジンでのスクリプト実行につなげることができます。


    2. 発見: 概念実証アップロードと回避

    バックエンドがSVGをレンダリング可能な形で公開したままかどうかを検証するため、単純なPoC SVGをアップロードしました:

    次の方法でファイルにアクセスすると:

    • /api/file/download.php?…
      そして、より重要なのは、次の経由です:
    • /api/file/share.php?token=…

    その結果、alert()が実行されました。

    元のGHSA-qrcv-vjvf-fr29緩和策 (UIプレビューブロック) は、これらのエンドポイントへの直接アクセスによって回避されました。


    3. 実際の影響の証明

    alert()はPoCにすぎません。ペイロードを内部APIと対話させることで、意味のある影響をテストしました。

    使用したテストペイロード:

    root@kitploit:~
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg">
      <script type="text/javascript">
        fetch('/api/upload/upload.php')
          .then(response => response.text())
          .then(data => alert('API Response: ' + data));
      </script>
    </svg>
    

    ログイン済みの管理者がこのSVGを含む共有リンクを開くと、スクリプトが実行され、認証済みのAPIリクエストが行われました。観察された影響は次のとおりです:

    • APIレスポンスがスクリプトに返された (機密情報が露出する可能性)
    • APIレスポンスがCSRFトークンの状態を示した (例: {"csrf_expired":true,"csrf_token":"..."})
    • この操作により、管理者の既存のCSRFトークンが無効化され、回復するまで以降の状態変更操作が妨げられた (管理者機能に対する実質的なサービス拒否)

    テスト中に実証された影響の分類:

    • 機密性: 高 (C:H)
    • 完全性: 高 (I:H)
    • 可用性: 低 (A:L)

    4. 開示のタイムラインと繰り返された修正の試み

    この問題を非公開で報告しました。メンテナーは段階的な修正をいくつかリリースしました:

    • v2.6.0 — ダウンロードエンドポイントに緩和策を適用。共有エンドポイントは依然として脆弱。
    • v2.6.2 — さらなる試行。私のテストでは共有エンドポイントは依然として脆弱。
    • v2.7.0 — 共有エンドポイントの強化を主張。私の環境ではまだ悪用可能。
    • v2.7.1 — 私が問題を解決することを検証した最終修正 (検証セクションを参照)。

    v2.6.0 → v2.7.0の間、共有リンクエンドポイントはインライン描画とスクリプト実行を可能にする方法でSVGを配信し続けました。以下の根本原因分析は、以前の修正がこのベクターを完全に塞げなかった理由を説明しています。


    5. 根本原因分析 — 制御フローとヘッダー失敗 (証拠)

    根本的な原因は単一のヘッダー欠落ではなく、shareFile() (コントローラ) 内の制御フローと出力順序にあり、多くの実行パスでセキュリティヘッダーが適用されないようになっていました。2種類の問題が存在しました:

    • セキュリティヘッダーが設定される前に関数をショートサーキットする複数の早期exit;ポイント。
    • ヘッダー呼び出しの前に出力を発生させ、"headers already sent"エラーを引き起こすPHPの警告/通知。

    5.1 早期exitの列挙

    awkスキャンを使用して、readfile()呼び出しまでのshareFile()内のheader()とexit;の出現を一覧表示しました:

    コマンド: awk '/function shareFile(/ {flag=1} /readfile(/ {flag=0} flag && /(header|exit;)/ {printf "%4d | %s\n", NR, $0}' src/controllers/FileController.php

    観測された出力 (私の実行から抜粋):

    1649 | header('Content-Type: application/json; charset=utf-8'); 1651 | exit; 1657 | header('Content-Type: application/json; charset=utf-8'); 1659 | exit; 1664 | header('Content-Type: application/json; charset=utf-8'); 1666 | exit; 1670 | header("Content-Type: text/html; charset=utf-8"); 1693 | exit; 1699 | header('Content-Type: application/json; charset=utf-8'); 1701 | exit; 1719 | header('Content-Type: application/json; charset=utf-8'); 1721 | exit; 1725 | header('Content-Type: application/json; charset=utf-8'); 1727 | exit;

    セキュリティヘッダー (強化ロジック) は1743行目あたりから始まります:

    1743 | header('X-Content-Type-Options: nosniff'); ... 1770 | header("Content-Disposition: attachment; ...");

    この関数は多くのパスでより早くヘッダーとexit;を出力するため、それらのリクエストはContent-Disposition、nosniff、または制限的なタイプを設定する強化コードに到達しませんでした。

    5.2 パスワード要求パス

    パスワード保護された共有フローでは、関数はパスワード要求HTMLを早期に出力していました:

    if (!empty($record['password']) && empty($providedPass)) { header("Content-Type: text/html; charset=utf-8"); ... exit; }

    このパスはContent-Type: text/htmlを送信し、SVG強化ロジックの前に終了するため、パスワードが提供されていないパスワード保護共有では、ブラウザでインライン描画が発生します。

    5.3 パスワードなしの共有 (実証)

    この脆弱性はパスワード保護されたフローに限定されませんでした。私のテストでは、パスワードなしの共有リクエストもtext/htmlを返しました:

    コマンド: curl -svI "http://127.0.0.1:8080/api/file/share.php?token=437d7913884ace4b94fab8ce745a686a" 2>&1 | grep -iE "content-type"

    観測結果: < Content-Type: text/html; charset=UTF-8

    これにより、一般的な (パスワードなし) ケースでもレスポンスはtext/htmlであり、SVGがインライン描画されたことが確認されます。

    5.4 PHP通知による"Headers already sent"

    ヘッダー強化の前に出力されたPHP警告を含む共有エンドポイントの生のフェッチをキャプチャしました。スナップショット (抜粋):

    コマンド: curl -s "http://127.0.0.1:8080/api/file/share.php?token=437d7913884ace4b94fab8ce745a686a" | head -n 30

    観測された生の出力 (抜粋):

    Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php on line 1644


    Deprecated
    /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php
    1645


    Warning
    /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php
    1743


    これらの警告は、ヘッダー強化の前に出力 (非推奨通知) が生成され、それらの実行では後続のheader()呼び出しが有効にならないことを示しています。

    5.5 根本原因の要約

    • ダウンロードを強制しnosniffを設定する強化コードは存在しましたが、早期終了と出力により多くのコードパスでは到達しませんでした。
    • PHPの通知/警告により、ヘッダー変更がさらに妨げられました。
    • 実際の結果:共有リンク (場合によってはパスワードありとなしの両方のパス) がHTMLを返すか、そうでなければブラウザがSVGをインライン描画し、埋め込まれたスクリプトを実行しました。

    6. 最終修正 (v2.7.1) と検証

    根本原因の報告を受けて、メンテナーは制御フローと出力順序に対処する変更を適用しました。v2.7.1では:

    • SVG/SVGZ共有リンクはダウンロードを強制されます (Content-Disposition: attachment)。
    • ファイルはSVGに対して安全なMIME (application/octet-stream) で配信されます。
    • X-Content-Type-Options: nosniffが適用されます。
    • セキュリティヘッダーロジックはすべての出力の前に実行され、強化を回避していた以前のexit;ポイントは修正/処理されました。

    最終検証 (v2.7.1での私のテスト):

    コマンド: curl -svI "http://127.0.0.1:8080/api/file/share.php?token=fc911e48b0a30e9417a9020ef959784d" 2>&1 | grep -iE "content-type|content-disposition"

    観測結果: < Content-Type: application/octet-stream < Content-Disposition: attachment; filename="xss-image.svg"; filename*=UTF-8''xss-image.svg

    結果:ブラウザはダウンロードを強制されました。SVGはインライン描画されず、XSSペイロードは実行されませんでした。私の環境ではv2.7.1が問題を解決したと考えます。


    7. CVSS悪用可能性のコンテキスト

    悪用可能性の評価 (報告者分析)

    • CVSSは、仕込み時ではなく悪用時点で必要な権限を評価します。
    • ここでの悪用配信は認証不要です:公開共有リンクの受信者 (管理者を含む) は誰でも認証なしでペイロードをトリガーできます。
    • これにより撃ち放し (fire-and-forget) の武器が生まれます:攻撃者は悪意のあるファイルを仕込み、ログアウトし、公開共有リンクは悪用可能なまま残ります。
    • したがって、最も深刻な現実的なシナリオに対する正しいCVSSベクターは次のとおりです:

    CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L — スコア: 9.6 (緊急)

    私はこの根拠を勧告スレッドに文書化し、PR:Nを使用するよう要求しました。

    メンテナー評価 (公開されたもの)

    • メンテナーは公式勧告でPrivileges Requiredを低 (PR:L) とスコアリングし、悪意のあるファイルのアップロード/仕込みにはアカウントまたはアップロード可能なトークン (既存の機能) が必要であると主張しました。
    • 彼らはその要件を悪用前の権限の一部と見なし、したがってPR:Lを使用しました。勧告テキストは、結果として得られる共有URLが認証されていない受信者によって開かれる可能性があることを依然として注記しています。

    管理上の結果

    • メンテナーはGitHub経由でCVEを申請し、PR:L (高 8.9) のGHSA勧告を公開しました。
    • CVEはGHSAプロセスの一環としてGitHub経由で申請され、PR:Lで公開されました。この文書は、完全性と将来の参照のために、悪用可能性の特性に関する報告者の技術分析を保存しています。

    CNAのCVSSベクターは、制約された脅威モデルを反映しています。

    実証テストは、より深刻で再現可能な悪用経路を示しており、これは標準的なスコアリングルールの下でのより高いCVSS 3.1基本スコアと一致します。

    独立した評価者は、この文書に記載された観測された悪用条件を使用して重大度を評価することが推奨され、公開された重大度が狭く範囲設定されたベースラインではなく実際の影響を反映するようにします。


    8. 結論

    • この問題は、SVGがインライン描画とスクリプト実行を可能にする方法で配信される可能性がある真の格納型XSSでした。
    • 以前の勧告 (GHSA-qrcv-vjvf-fr29) はプレビュー描画を緩和しましたが、バックエンドの共有/ダウンロードエンドポイントには対処しませんでした。GHSA-35pp-ggh6-c59c (CVE-2025-68116) はこの回避を文書化しています。
    • 中核となる技術的根本原因は、制御フローの順序とヘッダー前の出力であり、複数の実行パスでセキュリティヘッダーが適用されるのを妨げていました。
    • v2.7.1の最終修正は制御フローを修正し、SVGのダウンロードを強制し、適切なヘッダーを適用します。私はこの修正を検証しました。
    • CVSS Privileges Required (PR:N vs PR:L) の異なる解釈は透明性のために文書化されています。

    付録A — 証拠 (調査中にキャプチャされた選択された断片)

    A.1 早期exitヘッダースキャン (awk出力、抜粋)

    1649 | header('Content-Type: application/json; charset=utf-8'); 1651 | exit; 1657 | header('Content-Type: application/json; charset=utf-8'); 1659 | exit; 1664 | header('Content-Type: application/json; charset=utf-8'); 1666 | exit; 1670 | header("Content-Type: text/html; charset=utf-8"); 1693 | exit; 1699 | header('Content-Type: application/json; charset=utf-8'); 1701 | exit; 1719 | header('Content-Type: application/json; charset=utf-8'); 1721 | exit; 1725 | header('Content-Type: application/json; charset=utf-8'); 1727 | exit;

    セキュリティヘッダーは~1743から始まります: 1743 | header('X-Content-Type-Options: nosniff'); ... 1770 | header("Content-Disposition: attachment; ...");

    A.2 パスワードなし共有のcurlヘッダー (脆弱な動作)

    ~/FileRise $ curl -svI "http://127.0.0.1:8080/api/file/share.php?token=437d7913884ace4b94fab8ce745a686a" 2>&1 | grep -iE "content-type" < Content-Type: text/html; charset=UTF-8

    A.3 "Headers already sent"と非推奨通知 (生出力サンプル)

    Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php on line 1644


    Deprecated
    /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php
    1645


    Warning
    /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php
    1743

    ...followed by the SVG payload being printed and rendered inline.

    A.4 最終検証 (v2.7.1)

    ~/FileRise $ curl -svI "http://127.0.0.1:8080/api/file/share.php?token=fc911e48b0a30e9417a9020ef959784d" 2>&1 | grep -iE "content-type|content-disposition" < Content-Type: application/octet-stream < Content-Disposition: attachment; filename="xss-image.svg"; filename*=UTF-8''xss-image.svg


    ツールをダウンロード