PostHog は、Shai-Hulud 2.0 npm ワームによる侵害が、攻撃者が悪意あるリリースを自社の JavaScript SDK に紛れ込ませ、開発者の認証情報を自動的に盗み出そうとしたことで発生した、「これまで経験した中で最大かつ最も影響の大きいセキュリティインシデント」だったと述べている。
PostHog が公開したポストモーテムによると、Shai-Hulud 2.0 の影響を受けた複数のパッケージメンテナの一つである同社は、posthog-node、posthog-js、posthog-react-native といったコア SDK を含む汚染されたパッケージに、ソフトウェアのインストール時に自動的に実行される pre-install スクリプトが含まれていたと説明している。そのスクリプトは TruffleHog を実行して認証情報をスキャンし、見つかったシークレットを新たな公開 GitHub リポジトリに流出させ、さらに盗んだ npm 認証情報を使って追加の悪意あるパッケージを公開することで、ワームが拡散できるようにしていた。
Wiz のセキュリティ研究者らによると、Shai-Hulud キャンペーンの「再臨」を突き止めた結果、3 日間で 25,000 人以上の開発者のシークレットが侵害されたという。PostHog に加え、Zapier、AsyncAPI、ENS Domains、Postman が提供するパッケージも影響を受けており、その多くは週あたり数千回ダウンロードされている。
Shai-Hulud 2.0 は、典型的なトロイの木馬のように単に広がるだけではなく、完全なワームのように振る舞う。侵害されたパッケージがインストールされると、マルウェアは npm や GitHub のトークンだけでなく、クラウド認証情報(AWS、Azure、GCP)、CI/CD のシークレット、環境変数、開発者マシンやビルドシステムからのその他の機密データも盗み出すことができる。
PostHog は、侵害されたすべてのトークンを失効させ、悪意あるパッケージバージョンを削除し、「既知の安全」なリリースの提供を開始したと述べている。
しかし、このポストモーテムは、より深く構造的な危険性を浮き彫りにしている。これはパスワードやトークンが偶発的に漏えいしたのではなく、プルリクエストからの悪意あるコードが、高価値のシークレットを取得できるだけの権限で実行されることを許してしまった CI/CD ワークフロー設定のミスだったのだ。
PostHog のリポジトリに対する悪意あるプルリクエストが、プロジェクト全体のフル権限で動作する自動化スクリプトをトリガーした。ワークフローが攻撃者のブランチからのコードを無条件に実行していたため、侵入者は主導権を握ることができた。彼らは組織全体に書き込み権限を持つボットのパーソナルアクセストークンを流出させ、そのトークンを使って新たな悪意あるコードをコミットしたのである。
盗まれたこれらの認証情報を手にした攻撃者は、すべての GitHub シークレット(npm 公開トークンを含む)を収集するために改変した lint ワークフローを展開した。そのトークンが、トロイ化された SDK を npm にプッシュするために使われ、こうして「依存関係ツリーに潜む不死身のワーム」が完成した。
PostHog は現在、npm リリースに「Trusted Publisher(信頼できるパブリッシャー)」モデルを採用し、ワークフロー変更のレビューを全面的に見直し、CI/CD パイプラインでのインストールスクリプトの実行を無効化するなど、さまざまな強化策を講じていると述べている。
このポストモーテムに既視感を覚えるなら、それも無理はない。過大な権限を持つボット、自動操縦で仕事をこなすワークフロー、そしてドキュメントをろくに読んでいないインターン並みの勢いで更新される依存関係。結局のところ、ワームに必要なのはそれだけだった、というわけだ。®
翻訳元: https://go.theregister.com/feed/www.theregister.com/2025/11/28/posthog_shaihulud/