npmは、実際のStylusライブラリのすべてのバージョンを削除し、「セキュリティ保持」ページに置き換えました。これにより、このパッケージに依存する世界中のパイプラインやビルドが停止しています。
セキュリティプレースホルダーのウェブページは、通常、npmjs.com(主にJavaScriptやNode.js開発で利用される世界最大のソフトウェアレジストリ)の管理者によって悪意のあるパッケージやライブラリが削除された際に表示されます。
しかし、Stylusの場合はそうではありません。Stylusは、週に300万回ダウンロードされる正当な「革命的」ライブラリであり、開発者に表現力豊かなCSS生成手段を提供しています。
Stylusがnpmjsによって「誤ってBAN」される
数時間前、npmjsはStylusパッケージのすべてのバージョンを削除し、「セキュリティ保持パッケージ」ページを公開しました。

(npmjs.com)
「Stylusはnpmjsによって誤ってBANされました」と、Stylus開発者のLei Chen氏がGitHubのイシューで述べています。プロジェクトのメンテナーは「現在、npmjsがStylusへのアクセスを復旧するのを待っています。」
「私はStylusの現メンテナーです。Stylusライブラリは悪意のあるものとしてフラグ付けされ…、これによりStylusに依存する多くの[ライブラリ]やフレームワークがインストールに失敗しています」とChen氏はX(旧Twitter)でも投稿しています。「npmjs公式チームがこの問題に気付くよう、このメッセージのリツイートにご協力ください。」
Stylusの元のnpmjsページ(下図参照)には、この正当なライブラリがCSS開発のための「革命的新言語」であり、週に約300万回ダウンロードされていることが示されています。

実際、Stylusに依存するさまざまなプロジェクトの開発者たちが声を上げています:
「この管理上のエラーのせいでビルドが失敗し、ソフトウェアのアップデートが公開できません」と、ある開発者が投稿しています。
typescript-plugin-css-modules(週に最大50万回ダウンロード)などのパッケージもStylusに依存していると、フルスタック開発者のChanuka Asanka氏が指摘しています:
「パイプラインが失敗しています。npmやyarnがこのようなことを行う際、事前通知があるか知っている方はいませんか?」

実際に何が起こったのか?
通常、npmのパッケージが削除されるのは、オープンソースの利用規約の1つ以上に違反した場合や、悪意のあるコードが含まれている場合が一般的です。しかし、Stylusの場合はそうではなく、すべてのバージョンがクリーンかつ正常に動作しているようです。
サプライチェーンセキュリティ企業Mend.ioのセキュリティ研究者Tom Abai氏が原因を突き止めました。
Abai氏はこの件を調査する中で、少なくとも最新バージョン(0.64.0)のStylusが「クリーン」であることを確認しましたが、パッケージに関連して奇妙な点が浮かび上がりました:

「…調査の中で1つ奇妙なことが判明しました。それは、このオーナーpanyakor…、彼はstylus npmパッケージのオーナーの1人のようですが、先週3つの悪意のあるパッケージを公開していました…」とAbai氏は述べています。
npmjs.comは、他の多くのオープンソース開発プラットフォームと同様に、複数のメンテナーがパッケージに登録・貢献できる仕組みです。Chen氏がStylusの主開発者であっても、他にもnpmアカウントがメンテナーとして登録されています。
「Panya氏はstylusパッケージのメンテナーの1人であり、これらのパッケージを公開しました。そのため、彼のアカウントがBANされ、彼に関連するすべてのパッケージが削除され、Stylusもその中に含まれていました。これが今回の経緯です。NPMによる大きな誤報です」とAbai氏は述べています。
BleepingComputerも、npmアカウント「panya」がStylusおよびAbai氏の投稿にある3つのパッケージのメンテナーとしてnpmjs.comに登録されていたことを確認しました(これら3つはStylusとは無関係)。
Abai氏が指摘したパッケージ:@pwa-ib/eslint-plugin-compat、@blocks-shared/desktop-title、@tui-react-internal/select-account-iconは「panya」氏によって公開されており、現在はnpmjs.comレジストリ上で認証が必要となり、一般公開されていません。
しかし、BleepingComputerはこれらのパッケージを入手・調査し、Abai氏の指摘が正しいことを確認しました。
例えば、@blocks-shared/desktop-title内の「extract.js」ファイルには、業界で何度も見られてきた依存性混乱の概念実証(PoC)エクスプロイトが含まれています:

(Bleeping Computer)
BleepingComputerは、npmレジストリおよび親会社であるGitHubに対し、公開前にコメントを求めました。
執筆時点で、npmアカウント「panya」にはパッケージが1つも登録されておらず、レジストリがすべてのPoCエクスプロイトとStylusを誤って削除した可能性が高いことを示しています。
どうすればよいか?
幸いなことに、Stylusの開発者やオープンソースコミュニティのメンバーが、Stylusに依存するnpmやyarnの開発者向けに、詳細な対策方法を共有しており、ライブラリへのアクセス維持やビルド復旧が可能です。
npm開発者は、package.json
のdependencies
セクションでブランチ、タグ、コミットハッシュを指定して、Stylusパッケージを「動的に参照」することができます、とChen氏は述べています。例:
{ "dependencies": { "stylus": "github:stylus/stylus#version-you-need" } }
オーバーライドを使うのもnpm開発者向けのもう一つの選択肢です:
「npm v8.3.0以降でサポートされているoverrides
セクションに指定することで、他の依存関係が使用するstylus
パッケージのバージョンを上書きできます」
{ "overrides": { "stylus": "github:stylus/stylus#version-you-need" } }
「注意:指定したタグ、ブランチ、コミット(例:0.54.4
)がstylus/stylus
リポジトリに存在することを確認してください。依存関係の古い情報で問題が発生した場合はnpmキャッシュ(npm cache clean --force
)をクリアしてください。」
まとめとして、Chen氏は次のように繰り返しています:
「Stylusには悪意のあるコードは含まれていません。これは確認済みです。npmmirror.com(アリババがスポンサーの非営利ミラー)が[ライブラリへの]アクセスを再開しました」と、Lei Chen氏が記しています。
偶然かどうかは不明ですが、「Stylus Tools component」というツールにCVEが報告されています。
Panya(Stylusの元メンテナー)は、自分のアカウントで悪意のあるコードを含むパッケージ(セキュリティ研究目的?不明)を公開しましたが、Stylusの新バージョンに悪意のあるコードを含めてはいません。
npmjsからの公式対応を待っています。はい、彼らの対応を待っています。
コメント欄に回避策が提供されています。必要に応じて適用してください。」
過去にも、オープンソース開発者が意見の不一致や抗議のためにレジストリから自分のライブラリを削除してビルドを壊したり、コードを意図的に破壊したりして話題になったことがあります。
今回の件は、管理上のミスと思われる理由で、レジストリが正当なプロジェクト全体を削除した初めての注目すべき事例となりました。
CISOが実際に使うボードレポートデッキ
CISOは、クラウドセキュリティがビジネス価値をどのように生み出すかを明確かつ戦略的に示すことが、経営陣の賛同を得る第一歩であることを知っています。
この無料で編集可能なボードレポートデッキは、セキュリティリーダーがリスク、影響、優先事項を明確なビジネス用語で提示するのに役立ちます。セキュリティアップデートを意味のある会話や迅速な意思決定につなげましょう。