インターネットの約80%を支えているPHPのメインコードリポジトリが侵害され、悪意のあるコードが追加されましたが、現在は予防措置としてGitHubに移行されています。
「昨日(2021年3月28日)、Rasmus Lerdorf氏と私の名前から、php-srcリポジトリに2つの悪意のあるコミットがプッシュされました。これがどのように起こったのかはまだ正確にはわかっていませんが、すべての状況から、git.php.netサーバーへの侵入(個々のgitアカウントへの侵入ではなく)が示唆されています」と、JetBrainsのPHPチームで働いているPHPメンテナーのNikita Popov氏は述べています。
この悪意のあるコードは、改変版を実行しているサーバーへのバックドアです。「この行は、文字列が『zerodium』で始まる場合、ユーザーエージェントHTTPヘッダー内のPHPコードを実行します」とPHP開発者のジェイク・バーチャル氏は説明しています。
このコードは「Fix typo(タイプミスを修正)」という誤解を招く名前で挿入され、PHPの作者であるラスマス・ラードルフ氏による署名がされていると主張されていました。ポポフ氏はStackOverflowでの議論の中で、この帰属表示は「コミットメッセージの一部に過ぎない」と述べています。
ポポフ氏はコードを元に戻しましたが、7時間後、ポポフ氏の名前を使って犯罪者がコードを復元しました。バックドアは1時間ほど生き残りましたが、その後再び削除されました。
バックドアコードは昨日「タイプミスを修正」というタイトルで挿入され、PHPの作者であるラスマス・ラードルフによるものとされている。
GitHubリポジトリが正規化されました
このインシデントは現在も調査中ですが、ポポフ氏は次のように述べています。「独自のgitインフラを維持することは不必要なセキュリティリスクであると判断し、git.php.netサーバーを廃止することにしました。代わりに、これまでミラーのみだったGitHub上のリポジトリを正規リポジトリとします。つまり、変更はgit.php.netではなくGitHubに直接プッシュすることになります。」
PHPリポジトリへの書き込みアクセスには、PHP組織のメンバーシップに加え、GitHubの二要素認証の有効化が必要になります。ポポフ氏はさらに、「言及されている2つのコミット以外にも、リポジトリに破損がないか確認中です」と付け加えました。
必須ではないとしても、強く推奨すべきです。私はもう何年もコミットに署名していますが、それほど難しいことではありません。
「PHPプロジェクトはインフラ整備がひどく下手で、必要なレベルの専任担当者を配置する資金がないのです」と、ソフトウェアエンジニアのマーク・ランドール氏はStackOverflowで述べた。「GitHubは他のプロジェクトと同様に、私たちにも無料でサービスを提供しています。この機会を逃すのは愚かなことです。むしろ、GitHubへの移行を促すために攻撃が必要だったのは残念です。」
この事件により、コードコミットの暗号署名を求めるコミュニティからの圧力が再燃した。「たとえ必須ではないとしても、強く推奨すべきです。私はもう何年もコミットに署名していますが、それほど難しいことではありません」と、開発者のサラ・ゴレモン氏はポポフ氏の発表に対するコメントで述べた。
ラードルフ氏自身もこの提案に賛成しているようで、「php-src コミットについては必須にできると思います。doc やその他のリポジトリについては、人々がより慣れるまではオプションにできます」と述べています。
PHP侵害のタイムライン:コードの挿入、削除、再挿入、そして再び削除
W3techs の統計によると、PHP は「サーバー側プログラミング言語が知られているすべての Web サイトの 79.1%」で使用されています。
公式リポジトリに悪意のあるコードが一時的に現れたとしても、それが多くのサーバーに侵入するとは限りません。PHPは、Red HatやUbuntuなどのディストリビューションリポジトリからインストールされることが多く、長期間放置された悪意のあるコミットが明らかにならない限り、これらのリポジトリが影響を受ける可能性は低いでしょう。
それでも、PHP のメイン リポジトリへの侵入が成功したことは大きな懸念事項であり、他のオープン ソース リポジトリがどの程度保護されているかという疑問も生じています。ただし、PHP コミュニティがこの問題に気付いたスピードは安心できるものです。
Google のオープンソース セキュリティ チームのリーダーである Dan Lorenc 氏は、次のように語っています。「私たちが使用するすべてのオープンソースは、社内のリポジトリから私たち自身で構築することを要求しています。」
ロレンス氏は、これは主に、必要に応じてコード自体をビルドしてパッチを適用できるようにするためだが、コードが複製される前にこのようなインシデントが発見されれば、リスクも軽減されると述べた。
公式ソースからコードをプルする PHP リポジトリのメンテナーは、アップストリーム リポジトリを [email protected]:php/php-src.git に変更する即時のアクションが必要です。®