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の再起動で修正版に上げられます。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark