PHPデベロップメントチームは3月28日(米国時間)、PHPのソースコードリポジトリへバックドアが仕込まれたと報告した。PHPのメンテナのアカウントをかたって偽の変更が行われていた。変更自体はすぐに発見され、修正された。このセキュリティインシデントが発表された時点では調査は継続中とされており、実際に何が問題となっていたのかは明らかになっていなかった。

PHPデベロップメントチームは2021年4月6日(米国時間)、「[PHP-DEV] Update on git.php.net incident」において、不正コードが混入したセキュリティインシデントの調査結果の途中経過を報告した。当初、gitサーバ(git.php.net)が乗っ取られた可能性が指摘されていたが、調査を進めた結果、この可能性は低いことがわかったという。PHPデベロップメントチームは新しい見解として、master.php.netのユーザーデータベースが漏洩した可能性があるとの見方を示した。

  • [PHP-DEV] Update on git.php.net incident

    [PHP-DEV] Update on git.php.net incident

今回のセキュリティインシデントの発生と、それに伴う調査と意思決定は次の流れで行われている。

  1. 1つ目の不正変更が行われた段階では、個人アカウントの侵害が原因だと考えた。このため、該当するアカウントのアクセス権を取り消した。しかし、実際にはこの個人アカウントを経由してpushが行われたという根拠はなく、この措置には意味がなかった。
  2. 2つ目の不正変更が行われた段階で、pushに使用した実際のアカウントを特定するためにgitoliteのログを確認した。しかしその結果、gitoliteインフラストラクチャを完全にバイパスしていることが明らかになった。この段階で今回のサイバーセキュリティインシデントはアカウント侵害ではなくgitサーバ侵害の可能性があると判断した。
  3. 先の判断に基づいてgit.php.netを廃止し、これまでミラーサーバとして扱ってきたGitHubをプライマリリポジトリホストへと変更した。GitHubへ切り替えるという判断自体は合理的で、かつ、切り替えはそれほど難しいことではなかった(ここまでが最初の発表時点での取り組み)。
  4. (ここからが新しい取り組み)アクセスログの分析から、不正変更がSSH経由ではなくHTTPSおよびパスワード認証経由で行われたものであることが判明した。git.php.netはSSH経由のみならずHTTPS経由でのpushを許可していた。HTTPS経由の場合にはgitoliteは使用されず、代わりにmaster.php.netのユーザデータベースに基づくDigest認証ベースのgit-http-backendが使われており、不正変更の状況と一致する。
  5. ただし、不可解な点がある。不正侵入は「ユーザー名を何度かトライして見つけ出したあと、すぐに認証に成功している」という挙動を見せている。master.php.netのユーザーデータベースが窃取されているのであれば、ユーザー名を推測する必要はないはずであり、なぜこのような不正侵入の方法が取られたのかという謎が残る。しかし、master.php.netは古いオペレーティングシステムおよび古いバージョンのPHPが使われており、脆弱性が存在していたとしてもそれほど驚くことではない。

完全に理由が特定されたわけではないが、当初の「gitサーバが侵害された」という理由が適当ではなく、「master.php.netのユーザーデータベースが窃取された」という可能性の方が高いという判断が示されたことになる。すでに該当するサーバには対応が取られている。