オープンソースプロジェクトへの悪意ある改変で数千に影響 – Sysdig Secure

By 清水 孝郎 - JANUARY 12, 2022

SHARE:

本文の内容は、2022年1月12日にAlberto Pellitteriが投稿したブログ(https://sysdig.com/blog/malicious-modifications-detection-sysdig/)を元に日本語に翻訳・再構成した内容となっております。

2022年の初頭、非常に人気の高いJavaScriptのオープンソースパッケージである colors.js faker.jsの2つのパッケージが、使用できないほどに改変されました。原因はさまざまですが、特筆すべきは、これらの依存関係を利用した複数のアプリケーションが関与していたことです。
影響を受けた2つのパッケージは、JavaScriptアプリケーションで異なる目的に使用することができます。 colors.jsはnode.jsのコンソールで色やスタイルのカスタマイズを可能にし、 faker.jsは大量のフェイクデータを生成するテスト目的で広く使用されています。どちらも有効期間中に何億回もダウンロードされており、そのため影響が大きいのです。
この記事では、これらのプロジェクトがどのように破損したのか、悪意のある変更がJSアプリにどのような影響を与えるのか、そしてSysdig Secureでその存在を検知する方法を理解し、このようなシナリオが再び起こった場合に備えます。


ソフトウェア・サプライチェーンの危殆化

faker.js

最新バージョンのfaker.js 6.6.6(不審な数字)が改ざんされています。影響を受けたバージョンは機能しなくなり、これを使用しているプロジェクトの動作がおかしくなります。また、 readmeファイルが改ざんされ、インターネット上で人気のあるハクティビストについて言及されています。

endgame tag in all commits to faker.js repositoryfaker.js リポジトリへのすべてのコミットに endgame タグが追加されました。
報告されているイメージを見ると、このGitHubリポジトリ内の機能コードは、その所有者によってコミット履歴とともに完全に削除されています。しかし、npmjsの公式サイトでは、このパッケージのさまざまなバージョンの記録が残されており、これによりユーザーは古いステーブルバージョンを取得することができます。

faker.js repository GitHubfaker.js リポジトリ GitHub


colors.js

数日後、 colors.js パッケージも破損しましたが、この場合はユーザーのコンソールが無限ループに陥るバグでした。このバグの主な原因は、このコードの一部です。

…
require('./extendStringPrototype')();
/* remove this line after testing */
let am = require('../lib/custom/american');
am();
for (let i = 666; i < Infinity; i++) {
  if (i % 333) {
    // console.log('testing'.zalgo.rainbow)
  }
  console.log('testing testing testing testing testing testing testing'.zalgo)
}

影響を受けるパッケージのバージョンは、1.4.1、1.4.2、および1.4.44-liberty-2です。

colors.js repository Githubcolors.js リポジトリ Github
幸いなことに、npmjsの公式サイトでは、リリースから数時間後に、影響を受けたバージョンの痕跡を削除しました。そして、バージョン1.4.0を最新の安定したものとして復活させました。

影響の内容

 faker.js のパッケージは、最新バージョンでは単純に使用できなくなりました。
さらに悪いことに、 color.js の最新版では、ユーザーのコンソールが無限ループに陥り、Zalgoテキストシンボル(テキストを不気味に見せるUnicode文字を組み合わせたシーケンス)が表示されることがありました。
以下の画像は、 npm start コマンドを実行した後のコンソールの様子を示しています。

Example colors.js malicious behavior colors.jsの悪意ある動作例
引き起こされた被害はほとんど無視できるものですが、複数のJSアプリケーションが巻き込まれたようです。影響を受けたパッケージのバージョンは、ここ数日ですでに数十万回ダウンロードされています。
つまり、多くのユーザーが、それらの広く知られた機能を利用できないまま、すでに何らかの問題を経験している可能性があります。

対策

該当するバージョンのパッケージをインストールしている場合は、環境から削除してからステーブルバージョンをインストールしてください。
 faker.js パッケージを使用したい場合は、最新のリリースではもう動作しないことを覚えておいてください。そのため、古いバージョンのいずれかをインストールする必要があります。最新のステーブルバージョン5.5.3です。
colors.js パッケージのステーブルバージョンリリースは、影響を受けたバージョンがすでにnpmjsリポジトリから削除されているため、バグなしでダウンロードできます。

colors.js restaured version without vulnerabilities脆弱性のない colors.js 再ステーブルバージョン

ソフトウェアのサプライチェーンに対する攻撃の検出

コンテナイメージが影響を受けるパッケージの影響を受けているかどうかを検査するには、イメージスキャン を使用できます。
イメージスキャンとは、コンテナイメージのコンテンツやビルドプロセスを分析して、セキュリティ上の問題点や脆弱性、不正行為を検出するプロセスのことです。
この機能を使えば、よく知られているCVEに関連するすべてのパッケージに対して、自動的に警告を出すことができます。さらに、独自のスキャンポリシーを設定して、コンテナイメージ内のその他の潜在的なリスクを検出することもできます。下の画像は、侵害されたnpmパッケージを検出するカスタムスキャンポリシーを示しています。各パッケージのバージョンごとに、取るべきアクション(警告または停止)を定義できます。

Sysdig secure dashboard alert configuration
イメージのスキャンでは、次のような結果が得られます。
Search results for Sysdig Secure

Policy Sysdig Secure


今後の注意点

これは、1つのオープンソース・プロジェクトを意図的に改変することで、何千ものアプリケーションに影響を与える例です。この種の出来事は、これらのプロジェクトのメンテナンスやサポートの重要性を浮き彫りにします。再び起こる可能性があります。
本記事では、有名で人気のある2つのオープンソースプロジェクトの危殆化について取り上げました。
破損したコンポーネントの存在を軽減するには、インストール可能なバージョンに注意する必要があります。その代わり、イメージスキャンを使って採用されているnpmパッケージを検出することができます。

Sysdigは、インライン・イメージ・スキャン、継続的なスキャン、脆弱性レポートなどの高度なイメージ・スキャン機能を備えています。Sysdigのガイド付きオンボーディングでは、5分以内に設定が完了します。今すぐお試しください!