Skip to main content

Lottie Playerのnpmパッケージが侵害され、暗号資産ウォレットの窃取に悪用

著者
feature open source

2024年10月31日

0 分で読めます

2024年10月31日、人気のnpmパッケージが侵害され、暗号資産が不正に奪われる事件が発生しました。

Lottie Playerのnpmパッケージ侵害:要点まとめ

人気のnpmライブラリ@lottiefiles/lottie-playerに、ユーザーに暗号資産ウォレットへの接続を促す悪意のあるコードが含まれていることが判明しました。

npmパッケージの公開に使われていたnpmレジストリアカウントのトークンが侵害され、npmのバージョン2.0.5、2.0.6、2.0.7に悪意のあるコードが追加されました。これらのバージョンはnpmから削除され、その後、プロジェクトのGitHubコードリポジトリにある安全なコードから2.0.8がリリースされました。内容は2.0.4と同一です。

Lottie Playerのnpmパッケージの安全なバージョンと脆弱なバージョン

対応可能な状況に応じて、アップグレードまたはダウングレードすることで、公開が確認されている次の3つの悪意あるバージョンを修正できます。

  • 安全と確認されているバージョン:@lottiefiles/lottie-player <= 2.0.4 

  • 脆弱性が確認されているバージョン:@lottiefiles/lottie-player@2.0.5, @lottiefiles/lottie-player@2.0.6, and @lottiefiles/lottie-player@2.0.7

  • 安全と確認されているバージョン:@lottiefiles/lottie-player@2.0.8

Snykで脆弱性の有無を確認する方法

依存関係ツリーの管理に依存関係自動化ツールを使い、npmレジストリに公開された悪意のあるバージョンにアップグレードしてしまった可能性があります。または、CIや開発環境で最新バージョンにそのままアップグレードし、その変更を反映してしまった可能性もあります。

Snykではさまざまな方法で、悪意のあるバージョンをインストールしていないか確認できます。

Snyk Dependency ReportsのUI

グループまたは組織の「Dependencies」メニューを開き、検索対象を絞り込むフィルターを適用します。次に「Dependencies」の検索ボックスを開き、「lottiefiles」と入力して全文検索します。

以下の例のように、検索結果が表示されなければ、検索対象のプロジェクトではこの依存関係が使われていません。

「lottiefiles」の検索結果が見つからず、パッケージ依存関係の一覧が表示されたSnyk Dependenciesダッシュボード。

検索語を「lottie」だけにすると、名前にその文字列を含む別の依存関係が見つかります。

lottie-reactやlottie-webのバージョンを含む、Lottieパッケージの検索結果を表示したSnyk Dependenciesページ

選択すると、どのプロジェクトで使われているか、該当する脆弱性やライセンスの問題、その他のサプライチェーンセキュリティ情報を確認できます。

lottie-webのバージョン5.12.2と5.9.6の2つを表示する依存関係ダッシュボード。1つの項目にはMITライセンスと表示されています。

Snyk CLI

開発ワークフローやCIのビルドプロセスでSnyk CLIを使っていれば、Snykのスキャン結果に脆弱なパッケージの情報が表示され、問題を把握できます。たとえば、次のような情報です。

$ snyk test

Testing /Users/lirantal/projects/repos/your-project-name...

Tested XXX dependencies for known issues, found 1 issue, YYY vulnerable paths.

Issues with no direct upgrade or patch:
  ✗ Embedded Malicious Code [Critical Severity][https://security.snyk.io/vuln/SNYK-JS-LOTTIEFILESLOTTIEPLAYER-8310516] in @lottiefiles/lottie-player@2.0.5
    introduced by [path to the package]
    No upgrade or patch available (Upgrade to versions <2.0.4 || >2.0.8 recommended)

@lottiefiles/lottie-playerで何が起きたのか

2024年6月にCDN経由でユーザーを侵害したPolyfillライブラリへの攻撃と同様の手口で、今回のインシデントも、暗号資産ウォレットを通じて資産を窃取しようとするものです。この攻撃は、同年1月までさかのぼることが確認されています。

lottie-playerのコードリポジトリでは、https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.jsやhttps://cdn.jsdelivr.net/npm/@lottiefiles/lottie-player@2.0.5/dist/lottie-player.min.js,などのCDN経由でライブラリを使うと、以下のような暗号資産ウォレットのログイン画面が表示されるという報告がユーザーから寄せられました。GitHubのイシュースレッドをご覧ください。

WalletConnect、MetaMask、Trust Wallet、Exodus、Uniswap Wallet、Phantom、Ledger Live、Coinbaseを一覧表示する、暗号資産ウォレットの接続メニュー

依存関係のバージョンを適切に固定せず、サードパーティのCDN経由で@lottiefiles/lottie-playerを使っていた多くのユーザーには、最新リリースとして侵害されたバージョンが自動的に配信されました。安全性が確認されたソースコードを使って新しいバージョン(実質的にはコードを2.0.4に戻したもの)が公開されたことで、これらのユーザーにも修正が自動的に適用されたと考えられます。

とはいえ、lottie-playerコンポーネントに依存するプロジェクトの数と、すでにダウンロードされた悪意のあるバージョンの数を考えると、影響はかなり大きいと考えられます。

  • 73個のnpmパッケージがこのパッケージに依存しています

  • 安全と確認されているバージョン2.0.4は、過去7日間に36,762回ダウンロード

  • 修正版として最近公開された2.0.8は、過去12時間に約890回ダウンロード

CDNに関連するサプライチェーンセキュリティ上の懸念を軽減するには?

lottie-playerのWebコンポーネント侵害やPolyfillの悪意ある依存関係のようなセキュリティインシデントを今後防ぐため、次のようなセキュリティのベストプラクティスに従うことをおすすめします。

  • Content Security Policy(CSP)を導入し、信頼できないソースからスクリプトや画像タグ、その他のオブジェクトがWebアプリケーションに挿入されるのを防ぎましょう。

  • ネットワーク経由のCDNアセットでもパッケージマネージャー経由でも、依存関係のバージョンは必ず固定しましょう。

  • Lottie Playerチームのこちらのコメントや、その他の公式チャンネルで公開されている軽減策に従いましょう。

アプリケーションを検証する

アプリケーションやプロジェクトをテストしたい方で、Snykをご利用でない場合は、無料トライアルに登録して上記のテストを実施できます。トライアルでは、CLIまたはSCMからオープンソースの依存関係やコンテナイメージをスキャンし、脆弱なバージョンのlottie-playerを使用していないか確認できます。プロジェクトに潜むほかのセキュリティ上の脆弱性も見つけられる可能性があります。

開発しながらコードを安全に

Snykはコードの品質とセキュリティ上の問題をスキャンし、IDE上で修正方法を提案します。