脆弱性対応(PHP)
技術部長です。今回は、10月の下旬に大騒動になったPHPの脆弱性についてお話したいと思います。
まず、PHPと言われてもあまりよくわからないと思います。PHPとは元々は「Personal Home Page Tool」の略とされていたのですが、現在では「PHP:Hypertext Processor」の略とされています。Hypertext(ハイパーテキスト)というのはインターネットのホームページなどを記述するための言語・決まりのことです。インターネットのホームページはすべてHTMLとよばれるハイパーテキストで書かれています。このHTMLをうまく処理してホームページにいろんな機能を持たせてくれるためのコンピュータ言語のひとつがPHPです。現在では多くのホームページがこのPHPが採用されています。Web技術の調査機関であるW3Techsなどの統計データによるとおよそ7割のサイトで採用されています。当社もPHPをサイトの一部で利用しています。
さて、今回のPHPの脆弱性(通称:PHP2shell)についてです。コンピュータシステムの脆弱性には統一的な命名があり、PHP2shellは「CVE-2026-109618、CVE-2026-109619 」の2つの番号が割り振られています。それぞれ
CVE-2026-109618 (メモリ不足(OOM)エラー処理に起因する脆弱性)
CVE-2026-109619 (リクエスト処理におけるグローバル状態の管理不備に起因する脆弱性)
となっています。
影響範囲はPHP5.4から最新版に至る広いバージョンに影響がありました。また、危険度は「非常に高い」とされていました。攻撃内容は大変危険なもので、「遠隔の第三者が細工したリクエスト等を送り、メモリ管理の不具合(Use-After-Freeや初期化不良など)を突くことで、任意のシステムコマンドの実行やファイルの改変などを引き起こすおそれがありました。言い換えれば、パスワードなしにホームページの管理者になれてしまう可能性がある」ということでした。
今回の脆弱性のメカニズムは以下の通りでした。
「PHPがリクエストを処理する際、メモリ不足(OOM)などの致命的なエラーが発生すると、longjmp() 関数などを使って強制的に現在のコンテキストから抜け出します。しかし、この特殊な中断シナリオにおいて、リクエスト用のメモリやグローバルな状態が正しくリセット・初期化されないまま解放されたり、古い状態を指し続けたりするケースがあります。その結果、後続のリクエスト処理やクリーンアップ時に不正なメモリ領域へアクセスしてしまい、攻撃者にコードの実行を許してしまいます。」わかりにくいかもしれませんが、システム管理者からすると「これは大変危険性の高いものなので、直ちに修正されたPHPに更新する必要がある」と考えるレベルのものです。
とはいえ、これだけの情報で攻撃をするにはかなりの技術レベルが要求されます。今回のPHP脆弱性の問題が大騒動になった原因はPHP脆弱性自体の問題だけではなく、脆弱性の報告のされ方にありました。このような危険性の高い脆弱性は今までも報告されてきています。対応が大問題になったこともありました。それらの経験から脆弱性を見つけたときは、すぐに公開するのではなく、開発元やセキュリティ企業に報告し対策が完了してから、しかるべき機関から対策と共に公開される仕組みが作られてきました。今回のPHPの脆弱性問題もこの流れが守られていれば、これほどの大騒動にはならなかったと思います。
今回のPHP脆弱性の公開は対策版PHPが公開される1日前に「攻撃用のスクリプト例」と共に行われました。誰があるいはどの企業が行ったかは明らかになっていません。これが大問題を引き起こしました。
PHP自体を修正することは一般のサーバー管理者にはできません。PHPの修正版が公開されるのを待つ以外にないのです。通常は前述の通り、脆弱性の報告と対策版の公開は同時に行われます。攻撃スクリプトが一般に出回ってくるのはその後です。脆弱性の公開にあわせて対策版への更新ができます。ところが今回はちがいました。脆弱性の公開だけでなく攻撃スクリプトまで公開されています。攻撃スクリプト公開の結果、遊び半分で攻撃をする人も出てきます。そのため、一気に攻撃量が増加したことが報告されています。しかし対策版のPHPはまだ出ていません。この状況で一般のサーバー管理者にできる事は「対策版PHPがでてそれを適用するまでサーバーを停止する」ことだけです。
このおきて破りの脆弱性公開をうけてPHPの対策版も予定をはやめて公開されました。当社では、PHPを利用している部分が「WordPressとNextcloudの利用だけ」と限定的であったため、比較的容易に対策版PHPに更新することが出来ました。その後のチェックでもデータベースなどに影響はありませんでした。なんとか事なきを得たというところです。時系列でいうと「10月17日ごろから一部のセキュリティ企業で攻撃が観測され始めた。」「10月20日:脆弱性の詳細情報と実証コードのリークがおこなわれた。広範囲の自動化された攻撃が観測され始めた。」「10月21日:PHP開発チームが緊急の修正バージョンを公開した。」「10月22日:PHPの修正版対応を完了」となります。
さて、話は変わるのですが、高市総理がテレビで「PHPの修正対応を急いでください。できなければ、サーバーを停止してください。うちは止めました。」とコメントしたのは大変に素晴らしかったと思います。当社は違いますが、多くの企業ではサーバー管理者が「危険だからサーバーを止めたい」と上申してもなかなか許可が下りないと思います。今回の高市総理のコメントで許可が通常より迅速におりて危険を回避できた企業は多いのではないかと思います。
長くなってしまいましたので、続きは次回にさせてください。

