テクノロジーの急速な発展は、熟練した開発者に対する高い需要を生み出している。オープンソースソフトウェア(OSS)は、この成長する労働力にとって不可欠なツールとなっている。現在、さまざまなプログラミング言語にわたって、何十万もの確立されたOSSパッケージが存在している。90%以上の開発者が、自社独自のアプリケーションの中でこれらのオープンソースコンポーネントを活用しており、OSSの効率性と価値提案を浮き彫りにしている。その重要性をさらに強調するように、世界のオープンソースソフトウェア市場は2030年までに807億ドルに達すると予想されており、年間16.7%の成長率が予測されている。
Software 世界中の事業運営に不可欠なものであり、それゆえに脅威行為者に頻繁に狙われている。2023年のアプリケーション・セキュリティへの支出は約57億6,000万ドルで、2024年には66億7,000万ドルに達すると予測されている。AppSecの中でも、ソフトウェアサプライチェーンセキュリティは過去3年間で注目を集め、最も急成長している攻撃カテゴリーであり、大規模な侵害や悪用が定期的に見出しを飾っている。
組織はしばしば、ほとんどのリスクは一般向けのウェブ・アプリケーションから発生すると考える。しかし、この考え方は近年変わってきています。どのアプリケーションにも小さなコンポーネントが何十個もあり、リスクはコードベースのどこからでも発生する可能性があります。組織にとって、ソフトウェア開発ライフサイクルにおける既存のセキュリティ欠陥や新たなセキュリティ欠陥に精通することは、これまで以上に重要なことです。このブログ記事では、HTML と CSS から PDF 文書を動的に生成する強力な PHP ツールである dompdf ライブラリで発見された重大なセキュリティ欠陥、CVE-2023-23924 について、フェローが詳しく解説します。
包括的な分析を通じて、この脆弱性の技術的な複雑さ、重要な役割を果たす関連技術、そして悪用プロセスのシミュレーションを探ります。また OPSWAT MetaDefender Core特にその Software Bill of Materials (SBOM)エンジンは、この脆弱性を検出し緩和するために活用することができ、ソフトウェア開発者とセキュリティチームに潜在的な脅威の一歩先を行く力を与えます。
CVE-2023-23924の背景
dompdfのバージョン2.0.1にセキュリティの脆弱性が発見され、2023年の初めに公開された:
- dompdf 2.0.1のURIバリデーションは、SVGパース時に次のように渡すことで回避できます。
<image>
タグを大文字で使用することができます。この脆弱性により、攻撃者は任意の URL を任意のプロトコルで呼び出すことが可能となり、 PHP バージョン 8.0.0 より前のバージョンでは、任意のオブジェクトのシリアライズを解除される可能性があります。 PHAR URL ラッパーを経由することで、この脆弱性は任意のファイルの削除や、 利用可能なクラスによってはリモートでのコード実行を引き起こす可能性があります。 - NVD アナリストは、CVE-2023-23924 に CVSS スコア9.8 CRITICALを割り当てました。
Dompdf脆弱性を理解する
dompdfの脆弱性CVE-2023-23924を完全に理解するためには、密接に関連する2つの技術に精通することが不可欠です:スケーラブル・ベクター・グラフィックス(SVG)とPHARファイルです。
SVG(Scalable Vector Graphics)は、軽量でスケーラブルでありながら、ウェブ上で高品質なグラフィックをレンダリングできることから、広く普及している汎用性の高い画像フォーマットです。ラスター画像とは異なり、SVGはXMLマークアップに基づいているため、線、図形、テキストなどの要素を正確に制御することができます。SVG の主な利点の一つは、画質を損なうことなくシームレスに拡大縮小できることであり、レスポンシブ・ウェブデザインや高解像度ディスプレイに最適です。
PHAR (PHP Archive) は JAR ファイルの概念に似ていますが、PHP 用です。すべてのPHPコードとリソースファイルを単一のアーカイブファイルにバンドルすることで、デプロイを容易にします。
PHARファイルは4つのセクションからなる:
- スタブ:アーカイブをブートストラップするコードを含む。
- マニフェスト:アーカイブのメタデータを含む。このメタデータはシリアライズされた形式で保存されており、悪意のあるPHARファイルでPHPのデシリアライズ攻撃を引き起こすために使用される可能性があります。
- ファイルの内容:PHPコードやリソースファイルなど、アーカイブの内容が含まれます。
- 署名(オプション):ファイルの完全性を検証するためのデータを含む。
メタデータがシリアライズされた形式で保存されているため、PHARラッパーとPHARファイルのメタデータの組み合わせは、以下のようなPHP関数の入力として使用された場合、デシリアライズ攻撃を引き起こす可能性があります。 file_get_contents()、fopen()、file()、file_exists()、md5_file()、filemtime()、
または ファイルサイズ
.このセキュリティ上の見落としは、攻撃者が PHAR ファイルを介してリモートでコードを実行することを可能にする可能性がある。
DompdfがPDFファイルを生成する方法
分析を通じて、OPSWAT Graduate Fellowsは、dompdfの変換プロセスには3つの段階があることを突き止めた。HTMLファイルをPDF形式に変換するために、dompdfライブラリはまず入力ファイルをDOMツリーに解析し、各オブジェクトの位置とレイアウト情報を保存する。次に、CSSスタイルが解析され、各オブジェクトに適用されます。最後に、オブジェクトがページに収まるように再編成され、最終的なPDFファイルにレンダリングされます。
セキュリティを強化するために、dompdfは次のステップに進む前にURI入力の安全性を保証するバリデーションを実装している。この検証処理は、SVGファイルの処理中に xlink:href
属性を持つ。
SVG入力ファイルに <image>
タグの下に <svg>
タグのような特定のプロトコルのみを許可する条件が実装されています。 http://
, https://
そして file://
のためのものである。 xlink:href
フィールド
について resolve_url()
関数は、URIを drawImage()
関数を使用する。URIのスキームが許可されたプロトコルの中にない場合 resolve_url()
関数はアプリケーションに例外を返す。
URIがバリデーションに合格すると、そのURIは次のように渡される。 drawImage()
関数を使用する。 file_get_contents()
関数を使用して xlink:href
属性のデシリアライズ攻撃を引き起こす可能性がある。もし攻撃者がバリデーションをバイパスしてURIにPHARラッパーを渡すことができれば、PHARデシリアライズ攻撃が引き起こされる可能性があります。
分析の結果、検証は正確な名前の画像を持つタグに対してのみ実施されることが判明した。
その結果、Image のようなタグ名の1文字以上を大文字にすることで簡単に回避できる。その結果、特別に細工された SVG ファイルが image の代わりに Image を使えば、この検証を回避できる。
続くステップでは drawImage()
関数が呼び出され、SVG ファイルの URI を file_get_contents()
関数を使用する。従って、検証バイパスと PHAR ファイルへのデシリアライズ攻撃の組み合わせにより、攻撃者はリモートコード実行を行うことができる。この脆弱性は、SVG ファイルが脆弱なバージョンの dompdf で扱われた場合、悪意のある攻撃者が SVG ファイルを通してアプリケーションサーバを侵害する可能性を開く。
Dompdf Exploitationシミュレーション
この悪用を実際のシナリオとしてシミュレートするために、OPSWAT 大学院フェローは、dompdf ライブラリ バージョン 2.0.1 を使用して HTML から PDF への変換を特徴とするウェブアプリケーションを開発した。このアプリケーションでは、ユーザーがHTML、XML、SVGなどのファイルタイプをアップロードし、PDFファイルに変換することができます。
攻撃者は、脆弱性のあるdompdfのバージョン(バージョン2.0.1)を使用するアプリケーションにおいて、この脆弱性を悪用するために以下の手順を踏む:
まず攻撃者は、デストラクタが呼ばれたときにリバースシェルを作成する悪意のあるオブジェクトを生成する。
次に、攻撃者は悪意のあるメタデータオブジェクトを含む PHAR ファイルを作成する。このPHARファイルが、PHARラッパーによって file_get_content()
関数を呼び出すと、メタデータはデシリアライズされ、指定されたオブジェクトが処理される。このデシリアライズ処理中に、デストラクタがトリガされ、リバースシェルが実行されます。
最終的に、攻撃者はPHARラッパーを含むURIリンクを xlink:href
属性を使って検証を回避し、悪意のあるコードを実行し、この悪意のあるファイルをアプリケーションにアップロードします。
アップロードされた悪意のある SVG ファイルの処理中に、アプリケーションは攻撃者との逆接続を確立し、攻撃者がアプリケーション・サーバを侵害できるようにします。
オープンソースコンポーネントのセキュリティOPSWAT MetaDefender Core
dompdfの脆弱性CVE-2023-23924を検出・緩和するために、フェローは、SBOMを含む高度なマルウェア防御・検出技術を提供する多層型サイバーセキュリティ製品であるOPSWAT MetaDefender Core を利用しました。
OPSWAT SBOMは、ソースコードとコンテナの包括的なコンポーネントインベントリを提供することで、ソフトウェアのサプライチェーンを保護します。dompdf ライブラリとその依存関係を分析することで、OPSWAT SBOM は脆弱なバージョン 2.0.1 の存在を迅速に特定し、潜在的なリスクをユーザーに警告することができます。
さらに、OPSWAT SBOM は、CVE-2023-23924 脆弱性を理解し緩和するために不可欠な SVG や PHAR ファイルなどの関連技術を検出することができます。アプリケーションのソフトウェアコンポーネントのこのような全体的なビューは、セキュリティチームが情報に基づいた決定を下し、特定されたリスクに対処するための適切なアクションを取ることを支援します。
OPSWAT SBOM は、脆弱性のある dompdf のバージョンを検出するだけでなく、影響を受けるコンポーネント、そのバージョン、利用可能なアップデートやパッチに関する貴重な情報も提供する。この情報によって、セキュリティ・チームは修復作業の優先順位を決め、アプリケーションを安全なバージョンの dompdf に確実に更新し、CVE-2023-23924 脆弱性に効果的に対処することができます。
MetaDefender Core 内の SBOM エンジンを活用することで、企業はソフトウェアのサプライチェーンを積極的に監視し、オープンソースコンポーネントの潜在的な脆弱性を特定し、タイムリーな緩和戦略を実施することができ、アプリケーションの全体的なセキュリティと完全性を確保することができる。
おわりに
dompdfライブラリにCVE-2023-23924が発見されたことは、アプリケーション・セキュリティのダイナミックな状況における警戒の必要性を強調するものである。このブログ記事で概説されている洞察と戦略を活用することで、セキュリティチームは、このような脆弱性を効果的に検出し、緩和し、アプリケーションを保護することができ、ソフトウェア・エコシステム全体のセキュリティと完全性を確保することができます。