2014年のPHP臨時パッチ、2000万インストールで廃止

원제: My temporary PHP fix from 2014 has nearly 20M installs. Today I'm deprecating it

왜 중요한가

個人の一時的なコードがエコシステム全体に深く根付くOSSサプライチェーンの脆弱性構造を改めて示す事例だ。

Jake A. Smith氏は2014年にAOLのCMS移行用として174行のPHP補完ライブラリ「http_build_url()」を公開した。同パッケージはPackagistで累計約2000万回インストールされ、現在も月40万回以上ダウンロードされているが、2026年9月15日に正式に非推奨(deprecated)に指定された。

Smith氏が同ライブラリを作成したのは、AOLのCMSをPHP 5.2から5.3へ移行する際、pecl_httpエクステンションのhttp_build_url()関数が廃止されたためだ。既存コードへの影響を最小化するため、関数が存在しない場合のみ動作する174行のポリフィルを実装し、Composerが普及し始めたタイミングでPackagistに公開した。「1〜2年でお役御免になるだろう」と考えていたという。

実際には12年間にわたって使われ続けた。WordPressの多言語プラグイン最大手WPMLが150万超のサイトにバンドルし、ドメイン名ライブラリidna-convertを経由してフランス製CMSのSPIPにも組み込まれ、DebianおよびUbuntuのパッケージにまで収録されている。

しかし今年になってコードを数年ぶりに確認したSmith氏は、トレーリングスラッシュを含むURLでパス内の全ての「a」が削除されるバグを発見。コード内の「// Workaround for trailing slashes」コメントの下に、「a」を一時的に付加して除去するロジックが存在し、それが意図せず他の「a」を巻き込む構造になっていた。

後継として PHP League の URIライブラリや、PHP 8.5 からコア実装されたURI APIを推奨。メンテナー移譲についても、xz Utilsバックドア事件を引き合いに、広く利用されるパッケージの管理権移転にはサプライチェーン攻撃リスクが伴うとして断念した。パッケージは引き続きインストール可能だが、新たな修正は行われない。

출처

jakeasmith.com — 원문 읽기 →