Skip to main content

PHP 8.2.32リリース対応 PHPセキュリティ保守サービス パッチ配布開始

ESIのPHPセキュリティ保守サービス(PHP 5.4〜8.1対応)では既知のセキュリティ問題を修正した古いバージョンのPHPをご利用頂けます。PHPプロジェクトによるPHP 8.1のメンテナンス期間は2025年12月のリリースで終了しました。今後、PHP 8.1以下の利用を継続されるには既知のセキュリティ問題を修正したPHPを利用する必要があります。

 

29 Jul 2026, PHP 8.2.32

=================================================================================
- OpenSSL:
 . Fixed bug GH-22187 (Memory corruption (zend_mm_heap corrupted) in
   openssl_encrypt with AES-WRAP-PAD). (David Carlier)

■ openssl_encrypt()にAES-WRAP-PADモードを指定するとヒープバッファオーバーフローが発生する

■ 影響バージョン
PHP 5.3以降(openssl_encrypt()を持つ全てのPHP)

ただし、実際に攻撃可能なのはOpenSSL 3以降とリンクしてビルドされたPHPに限られます。
OpenSSL 1.0/1.1とリンクしたビルドでは、PHPがEVP_CIPHER_CTX_FLAG_WRAP_ALLOWを設定せず
"aes-128-wrap-pad"という暗号名も存在しない為、暗号の初期化自体が失敗し脆弱なコードに到達
しません。

■ 互換性問題
特になし。

■ 解説
openssl_encrypt()は出力バッファを「入力長 + 暗号ブロック長」バイトで確保します。しかし
RFC 5649のパディング付き鍵ラップ(AES-WRAP-PAD)では、入力を8バイト境界へ切り上げた上で
8バイトの整合性チェックブロックを前置する為、出力は「8バイト境界へ切り上げた入力長 + 8」
バイトとなります。入力長が8の倍数でない場合、確保した領域を最大7バイト超えて書き込む為、
ヒープバッファオーバーフローが発生します。

オーバーフローはZend Memory Managerの管理領域を破壊します。"zend_mm_heap corrupted"に
よるクラッシュ(DoS)となる場合が多いですが、書き込み内容は暗号化結果であり攻撃者が入力を
制御できる状況では、より深刻な影響が生じる可能性があります。

暗号方式と入力データの長さを外部から指定できるアプリケーションが影響を受けます。

PHPセキュリティ延長保守サービスでは、サポートする全バージョン(PHP 5.3~8.1)に本修正を
適用しています。前述の通りOpenSSL 1.0/1.1環境では脆弱なコードに到達しませんが、将来の
ビルド環境の変更に備え予防的に修正しています。

OpenSSL 3環境(AlmaLinux 9 / Amazon Linux 2023)でビルドした各バージョンについては、
valgrindを用いて修正前に領域外書き込みが発生すること、修正後に発生しないことを確認して
います。