SSM Run CommandでAmazon Linux 2のPHP 8.2にphp2shellの修正版を適用する
Amazon Linux 2のPHP 8.2 Extraに出たphp2shell(CVE-2026-109618 / CVE-2026-109619)の修正版を、SSM Run Commandだけで適用しました。リリース当日はyum clean allを挟まないと修正版が見えなかった点と、緩和措置の解除までをまとめています。
目次
Amazon Linux 2で動かしているWordPressのサーバーに、php2shell(CVE-2026-109618とCVE-2026-109619)の修正版を適用しました。修正版が出たかの確認から緩和措置の解除まで、SSHせずにSSM Run Commandだけで済ませています。
修正版が出るまで入れていた緩和措置
PHPはamazon-linux-extrasのPHP 8.2から入れた8.2.34です。修正版が出るまでのつなぎとして、次の緩和措置を入れていました。
/etc/php.d/99-php2shell-mitigation.iniでPHP側の緩和設定/etc/nginx/conf.d/default.confにmultipart/form-dataを403で返すルール- cronのガードスクリプト一式(
/etc/cron.d/php2shell-guardから呼ばれるもの)
multipartを403で返しているので、管理画面からのファイルアップロードもできない状態です。そのため、修正版が来たら真っ先に外すつもりでリリースを待っていました。
AL2で修正が出るのはPHP 8.2のExtraだけ
Amazon LinuxのCVEページを見ると、AL2の行は2つだけです。「Amazon Linux 2 – Php8.2 Extra」はFixedで、アドバイザリはALAS2PHP8.2-2026-015、修正版はphp-8.2.35-1.amzn2.0.1です。一方、「Amazon Linux 2 – Core」はNo Fix Plannedで、PHP 7.4や8.0、8.1のExtraは行自体がありません。
つまり、yumで直せるのはextrasのPHP 8.2を使っているサーバーだけです。今回のサーバーはこれに当てはまりました。
修正版が出たかはSSM Run Commandで確認する
SSHせずに済むよう、SSM Run Commandで次の2本を定期的に実行していました。
yum --enablerepo=amzn2extra-php8.2 list available \
php php-cli php-fpm php-common php-mysqlnd php-opcache \
php-process php-xml php-mbstring php-gd php-intl 2>/dev/null
yum updateinfo list --security 2>/dev/null | grep -i php | tail -10
AWS CLIからはsend-commandで実行し、get-command-invocationで結果を受け取ります。
aws ssm send-command \
--region us-west-2 \
--instance-ids <InstanceId> \
--document-name AWS-RunShellScript \
--parameters 'commands=[ ... ]'
aws ssm get-command-invocation \
--region us-west-2 \
--command-id <CommandId> \
--instance-id <InstanceId>
リリース当日はyum clean allしないと修正版が見えなかった
アドバイザリが公開された当日に確認すると、list availableの結果は空のままでした。「298 packages excluded due to repository priority protections」という行が出るだけで、8.2.35は見つかりません。
原因はyumのメタデータキャッシュでした。yum clean allを挟んでからやり直すと、指定した11パッケージすべてに8.2.35-1.amzn2.0.1が表示されます。updateinfoのほうにもALAS2PHP8.2-2026-015 important/Sec.が出てきました。
適用から緩和解除まで
適用もSSM Run Commandから実行します。
yum update -y --advisory ALAS2PHP8.2-2026-015
systemctl restart php-fpm
php系の13パッケージが8.2.35-1.amzn2.0.1に上がり、php -vでもPHP 8.2.35 (cli)になっていました。続けて緩和措置を外します。
rm -f /etc/php.d/99-php2shell-mitigation.ini \
/etc/cron.d/php2shell-guard \
/usr/local/bin/php2shell-guard.sh \
/usr/local/share/php2shell-rule.txt
nginx側は、default.confに入れたifブロックをコメント行ごと削除し、nginx -tを通してからreloadしました。編集前のファイルはdefault.conf.bak-php2shellとしてバックアップしてあります。
最後に管理画面からファイルをアップロードして、multipartのPOSTが403にならないことを確認しました。
まとめ
AL2でextrasのPHP 8.2を使っているサーバーなら、yum update --advisory ALAS2PHP8.2-2026-015とphp-fpmの再起動で修正版に上げられます。