COMPANY SERVICE STAFF BLOG NEWS CONTACT
2026.11.10

php2shellへの対抗策を考え、実行してみる

テクログphp

昨今、脆弱性が発見されたPHP。サービスによって対処方法や異なるため、一般的にどのような対策ができるか、軽く調べてみることにしました。

脆弱性番号

https://www.php2shell.com

  • CVE-2026-109618
  • CVE-2026-109619

対処方法

ワークアラウンド(暫定回避策の適用)

  • 設定内容を無効化(例:php.iniで設定値や有効/無効値を変更)
  • WAF等の仮想パッチ、ネットワーク側(WAFやIPS)で攻撃可能性があるリクエストを遮断

┗今回は、ファイルアップロードに関する脆弱性が発表されたため、既存機能に影響がない範囲でアップロードが重いリクエスト自体を遮断できるWAF環境を設定する

セキュリティパッチの適用

  • 修正パッチが適用できるversionがPHP 8.2系以降のため、満たしていないversionの場合は公式による配布 or 自環境で適用できるパッチの作成、適用を行う必要がある。

PHP versionのアップデート

version(PHP 8.5.12〜、8.4.27〜、8.3.36〜、8.2.35〜)へアップデートすることで、php2shell対策のためのセキュリティサポートが適用される

セキュリティパッチの適用をしてみる

実際にphp内部でどのような修正が行われているかを知ってみたいと思ったため、php公式が提供している対策パッチを取り入れた上での、差分を検証する

パッチ導入前

検証用のDocker環境を作成(php version: 8.1)

php-1コンテナ内で下記ファイルに対してテスト実施を行う

Zend/tests/oom_memory_limit_exit.phpt

make testコマンドテスト実施した内容が以下

memory_limitが超過(OOM)した場合の挙動として、異常終了している・・・・・・

パッチ導入後

セキュリティパッチを提供している下記の公式のものをcloneして取り入れてみる

https://github.com/php/php-src/tree/PHP-8.1-CVE-2026-109618-109619

COPY php-src-8.1-patched/ /usr/src/php-src/

ビルド済みのphp srcを公式からcloneしたphp-src-8.1-patchedへ入れ替え、再ビルドする

先ほどと同様、make testでOOMした場合の挙動を確認

期待通りの結果になっている

また下記ファイルを確認

shutdown=no //シャットダウン処理(やメモリの解放処理など)を行わない設定
exit_code=1 //プロセスが正常終了(0)ではなく、メモリ枯渇による「異常終了・強制終了」となったことを示す

上記から、メモリ枯渇が発生した場合即座のプロセスを切り離して終了する、という安全な挙動(CVE-2026-109618の回避)が再現できていることがわかる。

他にも行うべきテスト観点があると思うが、今回はここまでで割愛。いずれは脆弱性をついた再現攻撃を通しての検証を実施して見たい。

この記事を書いた人

N

入社年
2024年
出身地
山形県
業務内容
Webプログラミング
特技・趣味
長時間ドライブ

雑記に関する記事一覧