
このプロジェクトは、CVE-2024-4367 を実演・分析します。これは Mozilla の PDF.js ライブラリにおける深刻度の高い脆弱性であり、フォント処理コードでの不適切な型チェックを通じて任意の JavaScript 実行を可能にします。我々の研究は、悪意を持って作成された PDF が Electron アプリなどのコンテキストで JavaScript を実行し、潜在的にリモートコード実行にエスカレーションする方法を示します。
🔗 GitHub リポジトリ: Hacking-pdf.js-vulnerability
fontMatrix を介した任意の JavaScript 実行ex1.pdf および ex-gist.pdf はアラートまたはリモートスクリプトの実行を示しますsrc/components/ReactPdfViewer.tsx – React ビューア(react-pdf 5.7.2 で構築、脆弱な pdfjs-dist 2.16.105 をバンドル)ex1.pdf – 悪意のある PDF(アラートをトリガー)ex-gist.pdf – 悪意のある PDF(リモート JS をフェッチして実行)CVE-2024-4367_Report_Hacking_Project.pdf – 完全な技術レポートとエクスプロイト分析PDF.js の fontMatrix 配列要素は不適切に検証されており、new Function(...) でコンパイルされた JavaScript に直接注入される文字列を受け入れていました。これにより、攻撃者は悪意のあるフォントデータを作成し、eval 的な操作が許可されている場合に任意のコード実行を引き起こすことができます。
例として脆弱なコードパス:
fontMatrix = ["alert('XSS')", 0, 0, 1, 0, 0]; // 注入されたペイロード
// 結果として次のような関数がコンパイルされます:
function drawGlyph() {
transform("alert('XSS')", 0, 0, 1, 0, 0); // 安全でない実行
}
この脆弱性を緩和し、PDF.js(またはそれをバンドルするライブラリ)を組み込んだアプリケーションを保護するには、以下の対策を採用してください。
isEvalSupported = false を設定し、動的な Function コンパイルをオフにします。fontMatrix 配列)に対して明示的な typeof チェックを追加します。package.json/yarn.lock を最新に保ち、セキュリティパッチを自動適用します。厳格な Content-Security-Policy を追加:
Content-Security-Policy: script-src 'self'; object-src 'none';