
#CVE-2022-31630 - PHP 7.4.33 向け Proof of Concept Exploit
警告: このコードは、教育目的および隔離されたラボ環境でのテストのみを目的として作成されています。許可なく他のシステムで使用することは違法であり、無責任です。
📋 説明
CVE-2022-31630 は、PHP の GD 拡張機能、特に imageloadfont() 関数における Out-of-Bounds (OOB) Read の脆弱性です。この脆弱性により、PHP アプリケーションによって読み込まれるフォントファイルを制御できる攻撃者は、割り当てられたバッファの境界外のデータを読み取ることができ、以下の原因となる可能性があります:
· Denial of Service (クラッシュ) · Information Disclosure (機密メモリ内容の漏えい)
この脆弱性は以下の PHP バージョンに影響します:
· 7.4.33 より前の 7.4.x · 8.0.25 より前の 8.0.x · 8.1.12 より前の 8.1.x
PHP 7.4.33 は、この CVE に対するパッチが適用された最初のバージョンです。したがって、このリポジトリのエクスプロイトコードは、脆弱なバージョン (≤ 7.4.32) とパッチ適用済みバージョン (≥ 7.4.33) の間の動作の違いを示します。
🔬 技術的詳細
この脆弱性は、GD フォントファイル (.gdf) のヘッダーを読み取る際の入力検証の欠如に起因します。フォントファイルのヘッダーは以下の構造を持ちます:
· 2 バイト: マジックナンバー (0x01BE) · 2 バイト: 文字数 (nchars) · 2 バイト: 各文字の幅 (ピクセル単位) (width) · 2 バイト: 各文字の高さ (height) · 2 バイト: 文字ごとのバイト数 (char_offset)
width の値を非常に大きく (たとえば 65535) 設定すると、PHP はフォントのビットマップデータを格納するには小さすぎるバッファを割り当てます。その後、imagechar() 関数がそのフォントから文字を読み取ると、バッファの境界外のメモリにアクセスし、OOB read が発生します。
🚀 使用方法
📚 参考
· NVD の CVE-2022-31630 · php-src のパッチコミット · PHP Release Announcements
教育目的のために作成されました CVE