PHPのメンテナーは、PostgreSQL、BCMath、Pharの各拡張機能に影響する3件の脆弱性に対処するセキュリティアップデートをリリースしました。これらの脆弱性は、影響を受けるアプリケーションにおいてSQLインジェクション攻撃、範囲外メモリ書き込み、サービス拒否(DoS)攻撃につながる可能性があります。
今回の問題は、現在も保守されている複数のPHPリリースブランチに影響しており、影響を受ける拡張機能に応じて、PHP 8.2.338.2、8.3.338.3、8.4.248.4、8.5.98.5の各バージョンで修正されています。
PHPアプリケーションを運用する組織は、特に信頼できないデータベース入力を処理していたり、ユーザーが制御可能な値に対してBCMath演算を実行していたり、Pharアーカイブを扱っていたりする場合は、優先的にアップグレードを行う必要があります。
PHPが3件のセキュリティ脆弱性を修正
最も深刻な問題は、CVE-2026-17543およびGHSA-7qpv-r5mr-78m4として追跡されている、PHPのPostgreSQL拡張機能(ext-pgsql)における深刻度「高」のSQLインジェクション脆弱性です。
この欠陥は、php_pgsql_convert()関数に存在します。この関数は、ユーザーが指定したパラメータを変換・エスケープするために、pg_insert()、pg_update()、pg_select()、pg_delete()といった便利な関数から利用されています。
今回のアップデート以前は、この関数はPostgreSQLのPQescapeStringConn()関数を利用していました。そして、生成された値をE’…’という形式のエスケープ文字列定数で囲んでいました。
このアプローチは、PostgreSQLがstandard_conforming_strings設定を使用している場合に安全ではなくなります。この設定は、PostgreSQLバージョン9.19以降、デフォルトで有効になっています。
この構成では、PQescapeStringConn()は、E’…’文字列内に埋め込まれる値に対してバックスラッシュ文字を適切にエスケープできません。
これらの補助関数の一つに渡されるパラメータを操作できる攻撃者は、バックスラッシュとクォートを挿入することで、意図されたSQL文字列のコンテキストから抜け出せる可能性があります。
残りの入力は有効なSQL構文として扱われる可能性があり、これにより攻撃者はアプリケーションの権限次第でクエリのロジックを変更したり、権限のないレコードにアクセスしたり、データベースの内容を操作したりできる可能性があります。
PHPの修正では、エスケープした値をE’…’で囲む代わりに、エスケープ処理を行わない文字列定数を使用するようパラメータ処理ロジックが変更されています。この脆弱性はExPatch-LLCによって報告され、分析と修正はPHPのコントリビューターの協力を得て行われました。
脆弱性評価サービス
2件目の深刻度「高」の脆弱性であるCVE-2026-17544(GHSA-x692-q9x7-8c3f)は、PHP 8.48および8.58のBCMath拡張機能に影響します。
この問題は、攻撃者が制御可能な数値オペランドと悪意を持って作成されたscale値を伴ってアプリケーションがbccomp()関数を呼び出した場合に、範囲外書き込みを引き起こす可能性があります。
このエラーは、手動で指定されたscaleによって小数桁が切り詰められ、続く処理で末尾のゼロが除去される際に、bc_str2num()関数内で発生します。
このコードは算出されたscaleを縮小し、より小さい数値バッファを確保しますが、これまではコピー処理の際に小数部の末尾を指す元のポインタをそのまま保持していました。
その結果、PHPは新たに確保されたバッファが収容できる量よりも多くのデータをコピーしてしまう可能性があり、スタックまたはヒープのメモリが破損する恐れがあります。
BCMathは当初、小さなスタックベースのメモリ領域を使用し、その後ヒープ割り当てに切り替わるため、影響は入力内容や実行環境によって変わる可能性があります。
メモリ破損の脆弱性はアプリケーションのクラッシュにつながる可能性があり、場合によっては攻撃者がより深刻な攻撃を仕掛けるための足がかりを与える恐れもあります。
今回のパッチでは、ゼロの切り詰め後のポインタ処理が修正され、コピーされるデータが縮小後の確保サイズと整合するようになりました。この脆弱性はセキュリティ研究者のRecep Asan氏によって報告されました。
3件目の脆弱性であるCVE-2026-7260は、Phar拡張機能に関するもので、深刻度は「中」と評価されています。GHSA-vc5h-9ppw-p5f3として追跡されているこの問題は、Pharアーカイブ内のシンボリックリンクを解決する際に、phar_get_link_source()関数内で制御されない再帰処理が発生することに起因します。
循環参照するシンボリックリンクを含む悪意のあるtar形式のPharアーカイブは、再帰の深さ制限やサイクル検出の仕組みが一切ない状態で、この関数にリンクを繰り返したどらせてしまう可能性があります。
この制御されない再帰処理により、PHPプロセスのCスタックが枯渇し、セグメンテーション違反とプロセスの強制終了を引き起こす可能性があります。
このPhar関連の問題は、CWE-400(制御されないリソース消費)およびCWE-674(制御されない再帰)に分類されています。
CVSS 3.1のベクトル値からは、悪用にはローカルからの攻撃アクセスが必要であること、攻撃条件の複雑さは低いこと、追加の権限は不要であること、ユーザーの操作が必要であること、そして可用性への影響が大きいことが示されています。
この脆弱性の悪用にはアプリケーションまたはユーザーが悪意のあるアーカイブを処理する必要がありますが、アップロードポータルやビルドパイプライン、パッケージ管理ワークフロー、ファイル処理サービスなどが信頼できない.pharファイルや.tarコンテンツを受け入れている場合、影響を受けるシステムがリスクにさらされる可能性があります。
この問題は、eWalker ConsultingのCalvin Young氏とIsomorph CyberのEnoch Chow氏によって報告されました。管理者は、速やかにPHPをアップグレードし、影響を受ける拡張機能を呼び出す依存関係を確認するとともに、パッチ済みのランタイムバージョンの代わりにアプリケーションレベルの入力フィルタリングに頼らないことが推奨されます。
コンピューターセキュリティ
警告:20以上の政府系サイトが、企業や市民にマルウェアを配布していました。 攻撃に関する詳細な調査結果を確認し、自組織のリスク露出を点検してください。
翻訳元: https://gbhackers.com/php-patches-3-security-flaws-enabling-sql-injection/