毎週数百万回ダウンロードされていた著名JavaScriptライブラリ(npmパッケージ)にマルウェアが仕込まれていたことが発覚

news

大規模に利用されているJavaScriptライブラリ(npmパッケージ)がハッキングされ、悪意のあるコードで改変されたバージョンが世界中で使用され、パスワードスティーラーと暗号通貨マイナーをダウンロードしてインストールされていたことがわかりました。

Security issue: compromised npm packages of ua-parser-js (0.7.29, 0.8.0, 1.0.0) - Questions about deprecated npm package ua-parser-js · Issue #536 · faisalman/ua-parser-js
Hi! See a warning at npm - - This package has been hijacked. Please revert to 0.7.28 First question - Can we use range ^...

攻撃者は、インストールスクリプトを改ざんし、インストール中にパッケージが自動的に暗号化されたマイナーと思われるものを実行するようにしていました。

ユーザーエージェント文字列の内部に格納された情報を読み取るためのJavaScriptライブラリであるUAParser.jsが対象となっています。

UAParser.jsは、Facebook、Apple、Amazon、Microsoft、Slack、IBM、HPE、Dell、Oracle、Mozilla、Shopify、Redditなど多くの企業で使用されているライブラリです。

また、npmのページによると、このライブラリは、毎週600万から700万回のダウンロードが定期的に行われています。

UAParser.jsの作者であるFaisal Salman氏は、「誰かが私のnpmアカウントを乗っ取って、マルウェアをインストールする危険なパッケージ(0.7.29、0.8.0、1.0.0)を公開したのだと思います。」とコメントしています

Salman氏は、ハッキングを発見してから数時間後にユーザーが誤って感染してしまうことを防ぐために感染したライブラリのバージョンを削除し、クリーンなバージョンを公開しました。

コードを分析すると、リモートサーバからバイナリをダウンロードして実行するスクリプトが見つかりました。バイナリは、LinuxとWindowsの両方のプラットフォームで提供されていました。

コマンドラインの引数を見ると、そのうちの1つはクリプトマイナーのように見えますが、これはカモフラージュのためかもしれません

GitHubの別のユーザーによると、Windowsシステム上では、このスクリプトはブラウザのクッキー、ブラウザのパスワード、OSの認証情報をエクスポートする機能を含むinfostealerトロイの木馬(Danabotマルウェアの一種である可能性がある)をダウンロードして実行していたとのことです。

このライブラリに依存している大手企業の存在から、米国のサイバーセキュリティ・インフラストラクチャセキュリティ庁(CISA)はこの事件に関するセキュリティアラートを発表し、開発者に安全なバージョンへのアップデートを促しました。

また、GitHubのセキュリティチームも、この事件を受け独自の注意喚起を行い、開発プロセスの一部にこのライブラリが使用されているシステムでは直ちにパスワードのリセットとトークンのローテーションを行うよう呼びかけています。

このパッケージをインストールまたは実行しているコンピュータは、完全に危険な状態にあると考えてください。そのコンピュータに保存されているすべてのパスワードと鍵は、直ちに別のコンピュータからローテーションされるべきです。

このパッケージは削除する必要がありますが、コンピュータの完全な制御が外部の組織に委ねられている可能性があるため、パッケージを削除したからといって、それに起因するすべての悪意のあるソフトウェアが削除されるという保証はありません。

今回発見された悪意のあるnpmパッケージは、これで4つ目となり、Sonatype社はLinuxおよびWindowsシステムを対象に、暗号通貨マイナーをダウンロードしてインストールすることを目的とした同様の悪意のあるコードを含む、新たにリリースされた3つのnpmライブラリを発見していました。

該当するバージョンが稼働しているかは下記コマンドにて確認することができます

find / -name "package-lock.json" -exec grep --color -EHni "ua-parser-js-(0.7.29|0.8.0|1.0.0)" {} \; 2>/dev/null

Comments

Copied title and URL