npmパッケージevent-streamで悪意あるコードを発見、過去2.5か月で800万回ダウンロード
2018年11月27日
0 分で読めます広く利用されているnpmパッケージevent-streamに、flatmap-streamという悪意あるパッケージが含まれていることが判明しました。ソースリポジトリに寄せられたGitHubのIssueで明らかになりました。
event-streamパッケージを使うと、ストリームの作成や操作を簡単に行えます。非常に人気があり、週に約200万回ダウンロードされています。悪意ある子パッケージは、2018年9月に追加されて以来、約800万回ダウンロードされました。
この悪意あるパッケージを脆弱性データベースに登録しました。Snykでプロジェクトを監視していて、悪意ある依存関係(event-stream@3.3.6またはflatmap-streamのすべてのバージョン)が見つかった場合は、Snykの通常のアラートでお知らせします。
Snykでプロジェクトを監視しておらず、このパッケージが使われているか確認したい場合は、Snykでリポジトリをこちらからテストするか、CLIを使ってプロジェクトをローカルでテストしてください。
これまでの経緯を振り返ります。
人気のnpmパッケージevent-streamは、積極的にはメンテナンスされていません。実際、READMEの見た目を少し変更したときと今回の悪意あるライブラリを除けば、数年間更新されていませんでした。
攻撃者とみられる人物(GitHubハンドル名はright9ctrl)は、ライブラリのメンテナンスを手伝いたいと申し出たと報じられています。元のメンテナーであるDominic Tarrは、ユーザーのためを思ってか、これに同意し、right9ctrlに公開権限を付与しました。所有権の移譲はオープンソースの世界では比較的一般的な慣行です。元の作者がプロジェクトのメンテナンスを続けられない、または続ける意思がない場合に、プロジェクトの維持に役立てられます。
残念ながら、新しい所有者はevent-streamパッケージの依存関係としてflatmap-streamという悪意あるライブラリを追加しました。その結果、(悪意あるバージョン3.3.6を使用していた)event-streamパッケージのすべてのユーザーがこれをダウンロードし、実行することになりました。この悪意あるライブラリは、これまでに約800万回ダウンロードされています。
ライブラリの追加はよく行われるため、新しいライブラリが十分に確認されなかったのも無理はありません。さらに、このライブラリは約束された機能(フラットマップストリームの処理)を実際に果たしていたようです。最後に、ライブラリ内の悪意あるコードは検出を逃れるために難読化されていました(後に解析され、悪意あるコードの存在が明らかになりました)。
この悪意ある依存関係は2.5か月間検出されず、11月20日にユーザーのAyrton Sparling氏が不審な依存関係に気づき、報告しました。難読化コードを含むこの依存関係が悪意あるものだとすぐに判明し、11月26日の今日、広く知られることになりました。Snykは直ちに脆弱性をデータベースに登録し、現在調査を進めているNode Foundation Securityワーキンググループに報告しました。npmもこの事態を受けて対応し、問題のevent-streamバージョン3.3.6とともに、悪意あるライブラリflatmap-streamの公開を取り下げました。
悪意あるコードの動作については、アプリケーションからビットコインを盗み、採掘したビットコインを本来の送金先ではなく攻撃者のウォレットに送ることが目的だったようです。詳しくはSnykのアドバイザリーページをご覧ください。
何をすべきでしょうか?
まず、問題の悪意あるライブラリを使用しているかどうか確認してください。使用していた場合、今後アプリケーションをビルドできなくなりますが、すでにデプロイ済みのアプリケーションには悪意あるコードが含まれており、実行されている可能性があります。
Snykでプロジェクトを監視している場合、アプリケーションにこの悪意あるパッケージが含まれていれば、Snykの通常のアラートでお知らせします。
まだSnykでプロジェクトを監視していない場合は、こちらからリポジトリをテストするか、CLIを使ってプロジェクトをローカルでテストできます。
影響を受けている場合、次に何をすればよいですか?
まず、アプリケーションから悪意あるパッケージを削除してください。event-streamをバージョン3.3.4に戻すことで対応できます。
アプリケーションが悪意あるライブラリを使用していて、ビットコインを扱う場合は、過去3か月の動作を確認し、採掘または送金されたビットコインがウォレットに入っていないケースがないか調べてください。
アプリケーションがビットコインを扱っていない場合でも、特に機密性の高いアプリケーションであれば、過去3か月の動作を確認し、特に意図しない宛先へのネットワーク経由のデータ送信など、不審な動きがないか調査することをおすすめします。このコードがビットコインの窃取以外のことを行う可能性は低いと考えていますが、全容の分析はまだ続いています。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。



