autload.files経由で自動実行され、PHPアプリ起動時に勝手に動くThe Hacker News が伝えたところによると、Laravel-Lang に属する複数の PHP パッケージが改ざんされ、認証情報を盗むためのマルウェアを配布するために悪用されたそうです。対象になったのは次のパッケージです。
laravel-lang/langlaravel-lang/http-statuseslaravel-lang/attributeslaravel-lang/actionsLaravel-Lang は、PHP/Laravel 界隈でよく使われるライブラリ群です。こういう「みんなが信頼して入れる部品」がやられると、被害が一気に広がります。ここがサプライチェーン攻撃の怖さで、正面からアプリを壊すのではなく、普段なら疑わない部品に毒を混ぜるんですよね。かなり嫌らしいやり方です。
今回の攻撃で面白い、いや厄介なのは、元のソースコードそのものを書き換えたわけではない点です。攻撃者は、各リポジトリの git tag をすべて新しい悪性コミットへ付け替えたとされています。
git tag は、ざっくり言うと「この版はこの内容ですよ」と示す目印です。リリース管理の要です。そこを改ざんされると、利用者からは「普通のバージョン」に見えてしまう。しかも、報道では 700以上のバージョンが関係している可能性があるとのこと。手作業というより、組織レベルの認証情報やリリース基盤に触れたのではないかと疑われています。
個人的には、ここがかなり不気味です。コードレビューを頑張っても、リリースの土台が乗っ取られていたら意味が薄い。つまり「安全そうに見える配布物」そのものを疑う時代になっている、ということだと思います。
悪性機能の中心は src/helpers.php というファイルにあり、これが tag に埋め込まれていました。攻撃の流れはだいたいこうです。
flipboxstudio[.]info に接続するStepSecurity の説明によると、このファイルは composer.json の autoload.files に登録されていたそうです。
autoload.files は、PHPのアプリが起動したときに自動で読み込まれるファイルです。つまり、特定の関数を呼ぶ必要すらなく、アプリが立ち上がった瞬間に裏で実行されるわけです。
これはかなり巧妙です。普通のマルウェアなら「実行されるきっかけ」が必要ですが、今回は「PHPアプリを起動したら勝手に動く」。Laravel だけでなく、Symfony、PHPUnit など多くの PHP 系フレームワークで似た仕組みがあるため、影響範囲が広がりやすいのも厄介です。
Aikido Security によると、配布されるペイロードは OS ごとに動き方を変えています。
cscript で実行exec() で stealer ペイロードを実行つまり、ただの PHP の悪性コードに見えて、裏ではちゃんと各OSに合わせて動く。
「PHPだから安全寄り」と思っていると痛い目を見る、という話でもあります。
さらに、このスクリプトはホストごとにユニークな識別子を作り、一度だけ動くようにしているそうです。MD5 hash を使って、ディレクトリパス、アーキテクチャ、inode を組み合わせるとのこと。何度も実行すると目立つので、それを避けているわけですね。攻撃者の“気配り”が妙に行き届いていて、正直あまり感心はしたくないですが、よくできています。
この stealer が狙うデータはかなり広範囲です。むしろ「何を盗まないの?」と言いたくなるレベルです。
.env、wp-config.php、docker-compose.yml.gitconfig、.git-credentials、.netrc などのソース管理情報見ての通り、単なるパスワード泥棒ではありません。
開発者、運用担当、クラウド管理者の“全部入り金庫”を丸ごと持っていくタイプです。個人的には、ここが一番怖い。1つ奪われるだけで被害が終わらず、そこからクラウド、CI/CD、社内ツール、暗号資産まで芋づる式に崩れるからです。
Aikido Security の研究者 Ilyas Makari 氏によれば、取得したペイロードは約5900行の PHP credential stealerで、15個の専用 collector module に分かれていたそうです。
しかも、集めた情報は AES-256 で暗号化して flipboxstudio[.]info/exfil に送信し、その後に自己削除するとのこと。
ここまで来ると、単なる雑な改ざんではなく、かなり計画的です。痕跡を減らして、調査を難しくする意図がはっきり見えます。
今回の件で大事なのは、単に「PHPパッケージが危ない」という話ではないことです。むしろ、
という現実を突きつけている点にあります。
サプライチェーン攻撃は昔からありますが、今回のように配布の見た目は普通なのに、裏でタグをすげ替えて侵入するのはかなり厄介です。しかも、PHP のように多くのプロジェクトが依存パッケージを広く使う世界では、1つの汚染が広範囲に波及しやすい。これは本当に面倒です。
元記事は紹介ベースですが、この手の事件を踏まえると、少なくとも次は意識したいところです。
composer.lock の差分を雑に流さないautoload.files のような自動実行ポイントを理解しておく.env、SSH鍵、クラウドトークン、CI/CD秘密情報の保管を見直す「便利だから全部自動化」は気持ちいいのですが、今回みたいな事例を見ると、その自動化の入口がそのまま攻撃面にもなるんですよね。便利さと危険は、いつもセットです。
Laravel-Lang のパッケージ改ざんは、PHP エコシステムに対するかなり本格的なサプライチェーン攻撃でした。
攻撃者はコード本体ではなく tag とリリース経路を狙い、起動時に自動実行される仕組みを利用して、クラウド認証情報からブラウザ情報、暗号資産ウォレットまで幅広く盗もうとしています。
個人的には、これは「依存パッケージは信用して入れるもの」という前提がどんどん崩れている象徴的な事件だと思います。
今後は、コードの中身だけでなく、どう配られたか、誰が配ったか、どこで自動実行されるかまで含めて疑う必要があるでしょう。
参考: Laravel-Lang PHP Packages Compromised to Deliver Cross-Platform Credential Stealer