本文の内容は、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
最新バージョンのf faker.js
6.6.6(不審な数字)が改ざんされています。影響を受けたバージョンは機能しなくなり、これを使用しているプロジェクトの動作がおかしくなります。また、 readme
ファイルが改ざんされ、インターネット上で人気のあるハクティビストについて言及されています。
faker.js リポジトリへのすべてのコミットに endgame タグが追加されました。
報告されているイメージを見ると、このGitHubリポジトリ内の機能コードは、その所有者によってコミット履歴とともに完全に削除されています。しかし、
npmjsの公式サイトでは、このパッケージのさまざまなバージョンの記録が残されており、これにより
ユーザーは古いステーブルバージョンを取得することができます。
faker.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 リポジトリ Github
幸いなことに、
npmjsの公式サイトでは、リリースから数時間後に、影響を受けたバージョンの痕跡を削除しました。そして、
バージョン1.4.0を最新の安定したものとして復活させました。
影響の内容
faker.js
のパッケージは、最新バージョンでは単純に使用できなくなりました。
以下の画像は、 npm start
コマンドを実行した後のコンソールの様子を示しています。
colors.jsの悪意ある動作例
引き起こされた被害はほとんど無視できるものですが、複数のJSアプリケーションが巻き込まれたようです。影響を受けたパッケージのバージョンは、ここ数日ですでに数十万回ダウンロードされています。
つまり、多くのユーザーが、それらの広く知られた機能を利用できないまま、すでに何らかの問題を経験している可能性があります。
対策
該当するバージョンのパッケージをインストールしている場合は、環境から削除してからステーブルバージョンをインストールしてください。
faker.js
パッケージを使用したい場合は、最新のリリースではもう動作しないことを覚えておいてください。そのため、古いバージョンのいずれかをインストールする必要があります。最新のステーブルバージョン5.5.3です。
colors.js
パッケージのステーブルバージョンリリースは、影響を受けたバージョンがすでに
npmjsリポジトリから削除されているため、バグなしでダウンロードできます。
脆弱性のない colors.js 再ステーブルバージョン
ソフトウェアのサプライチェーンに対する攻撃の検出
コンテナイメージが影響を受けるパッケージの影響を受けているかどうかを検査するには、
イメージスキャン を使用できます。
イメージスキャンとは、コンテナイメージのコンテンツやビルドプロセスを分析して、セキュリティ上の問題点や脆弱性、不正行為を検出するプロセスのことです。
この機能を使えば、よく知られているCVEに関連するすべてのパッケージに対して、自動的に警告を出すことができます。さらに、独自のスキャンポリシーを設定して、コンテナイメージ内のその他の潜在的なリスクを検出することもできます。下の画像は、侵害されたnpmパッケージを検出するカスタムス
キャンポリシーを示しています。各パッケージのバージョンごとに、取るべきアクション(警告または停止)を定義できます。

イメージのスキャンでは、次のような結果が得られます。
今後の注意点
これは、1つのオープンソース・プロジェクトを意図的に改変することで、何千ものアプリケーションに影響を与える例です。この種の出来事は、これらのプロジェクトのメンテナンスやサポートの重要性を浮き彫りにします。再び起こる可能性があります。
本記事では、有名で人気のある2つのオープンソースプロジェクトの危殆化について取り上げました。
破損したコンポーネントの存在を軽減するには、インストール可能なバージョンに注意する必要があります。その代わり、イメージスキャンを使って採用されているnpmパッケージを検出することができます。
Sysdigは、インライン・イメージ・スキャン、継続的なスキャン、脆弱性レポートなどの高度なイメージ・スキャン機能を備えています。Sysdigのガイド付きオンボーディングでは、5分以内に設定が完了します。今すぐお試しください!
Sysdigに関するお問い合わせはこちらから