Hatena
PHP 8.5.12の緊急リリースにpixivはどう対応したか - pixiv inside
セキュリティ初登場 723ポイント
pixivは、PHPに見つかった深刻な脆弱性(PHP2Shell)を直すための緊急セキュリティリリースに、約30分という短い時間で対応しました。この記事は、そのときの作業とビルド・デプロイの仕組みを説明しています。
何が起きたのか
2026年10月21日、PHPに深刻な脆弱性が見つかり、緊急のセキュリティリリースが予告されました。pixivは影響を受けるサービスを先にメンテナンスモード(サービスを一時停止して、作業中であることを知らせる状態)にしました。そして、修正版が出るのを待ってからパッチを当てました。22時41分に修正版のリリースに気づき、23時16分にメンテナンスモードを解除しました。
数字で見るポイント
- パッチのリリースからメンテナンス解除まで、約30分でした。
- メンテナンスモードは21日19時から始まりました。
- 数GBあるコンテナイメージを、約6分でフルビルドできました。
- CI基盤では1日30回のリリースを支えています。
事前準備が役に立った
pixivは、PHPの公式イメージが出るのを待つと時間がかかるかもしれないと考えました。そこで、PHPのソースコードから自前でビルドする方法も用意しました。PHPのバージョン番号だけを差し替えれば、すぐにビルドできる状態にしていました。さらに、ビルドに使うベースイメージを前もって取得し、メンテナンスモードを解除するスクリプトも準備しておきました。
なぜ大事なのか
脆弱性は悪意のある人に狙われる恐れがあるため、すぐに直すことが大切です。一方で、サービスを止める時間は短くしたいものです。pixivは、事前準備と速いビルド基盤を組み合わせることで、安全性と停止時間の短さの両方を目指しました。この対応は、移行直後の環境でも行われたことも注目点です。
今後の見どころ
- 記事の後半で書かれている、うまくいかなかった点(メンテナンスモードの未実装箇所、ピクシブ百科事典のビルドの遅れ、PECLの不安定さ)の対策。
- KubernetesへのロールアウトとNAT Gatewayを使わないregistry proxyの仕組み。
- COPY --linkを使ったキャッシュの効果。
用語解説
- PHP2Shell
- PHPに見つかった深刻な脆弱性の通称。悪用されると、外部から不正に操作される恐れがある。
- Kubernetes
- 多くのコンテナを自動で動かし、管理するための仕組み。
- COPY --link
- Dockerfileの機能の一つ。前の層が変わっても、この層のキャッシュを再利用しやすくする。