Researchers Detail Code Execution Vulnerability in Popular PDF Viewer, PDF.js
2024/05/21 SecurityOnline — Mozilla が管理する JavaScript ベースの PDF ビュワーとして広く利用されている PDF.js に、深刻度の高い脆弱性 CVE-2024-4367 が存在することが発見されている。そして、この CVE-2024-4367 に対する、技術的詳細と PoC エクスプロイト・コードが、Codean Labs のセキュリティ研究者たちにより公開された。この脆弱性の悪用に成功した攻撃者は、悪意の PDF ファイルが開かれた際に、任意の JavaScript コードを実行できる。この欠陥は、Firefox バージョン 126 未満を実行している全 Firefox ユーザーと、プレビュー機能に PDF.js を利用する、数多くの Web/Electron ベース・アプリに影響を及ぼす。

PDF.js は、Firefox に内蔵されている PDF ビュワーであり、”pdfjs-dist” という Node モジュールにバンドルされている。Git ホスティング・プラットフォームやノート作成用のものを含む Web サイト/アプリは、PDF.js をエンベッド型の PDF プレビュー機能として提供している。
この脆弱性は、PDF フォーマットのスクリプト機能に起因するものではなく、フォント・レンダリング・コードの特定の部分に起因するものである。PDF.js では、パフォーマンスを最適化するために、パス生成関数が “glyph” ごとにプレ・コンパイルされている。それは、”glyph” のパスを記述する命令であり、JavaScript Function オブジェクトの作成も含む。
この脆弱性は、Function 本体を生成する “cmds” 配列が、任意のコードを挿入するために操作される場合に生じる。具体的には、数値のみを取り込むはずの “fontMatrix” 配列だが、PDF のメタデータを通して制御され、文字列を取り込むことも可能となっている。そして、この挿入される文字列は、”glyph” がレンダリングされる際に、任意の JavaScript コードを実行させることも可能になっている。
この悪用は、 PDF のメタデータ内の “fontMatrix” 配列を注意深く細工することで達成される。たとえば、”0); alert(‘foobar’)” のような文字列をマトリクスに挿入すると、PDF を開く際にアラートを発生させることが可能になる。このコードは、オリジン “resource://pdf.js” の下で実行される、PDF.js のコンテキストで実行される。それにより、ローカル・ファイルへのアクセスは防止されるが、 ファイル・ダウンロードの起動や、 開かれた PDF ファイルへの実際のパスへのアクセスといった、 特定の特権的な動作は可能になる。

この脆弱性により、PDF.js をエンベッドしたアプリケーションにおいて、深刻な結果を招く可能性が生じる。攻撃者は、PDF ビュワーをホストするドメイン上で XSS プリミティブを獲得し、データリーク/不正なアクション/完全なアカウント乗っ取りを引き起こす可能性を手にする。適切なサンドボックスが存在しない Electron アプリでは、この脆弱性はネイティブ・コード実行へとエスカレートする可能性があり、さらに大きなリスクをもたらされる。この PoC エクスプロイトの PDF ファイルは、ココから参照できる。
脆弱性 CVE-2024-4367 のリスクを軽減するために、開発者にとって必要なことは、PDF.js バージョン 4.2.67 以上へとアップデートすることだ。”react-pdf” などの多数のラッパー・ライブラリでも、パッチを当てたバージョンがリリースされている。開発者に対して強く推奨されるのは、”node_modules”フォルダ内に “pdf.js” のインスタンスが存在しないことをチェックし、エンベッドされた全てのバージョンが、更新されていることを確認することだ。
さらに、PDF.js の “isEvalSupported” コンフィグを無効化することで、脆弱なコードパスの実行を阻止できる。”eval” と “Function” コンストラクタを禁止する厳密なコンテンツ・セキュリティ・ポリシーを実装することでも、この脆弱性を緩和できる。
この脆弱性 CVE-2024-4367 に関する第一報は、2024/05/07 の「PDF.js/React-PDF の脆弱性 CVE-2024-4367/34342 が FIX:ただちにアップデートを!」です。そして今回の記事では、数多くの Web/Electron ベース・アプリに影響を与えると、その影響の範囲も明示されています。その Electron ですが、2022/08/17 の「Electron ベース・アプリ 18種類に深刻な脆弱性: Teams/WhatsApp/Slack などに影響」を参照すると、今回の脆弱性がもたらす深刻さが伺いしれます。直接的/解説的に利用しているチームは、ご注意ください。
You must be logged in to post a comment.