サプライチェーン攻撃はどのようにして成立するか(ライブラリ利用者側)
サプライチェーン攻撃はどのようにして成立するか(ライブラリ開発者側)とは分けて考えるshokai.icon
タイミング
npm preinstallやnpm postinstallで任意のコードを実行できる
https://docs.npmjs.com/cli/v8/using-npm/scripts#life-cycle-operation-order
JSではなくunixコマンドをpackage.jsonに書く
その場で実行せず、ただファイルを配置するだけの可能性もある
.git/hooks/に何か入れるとか
gitコマンドやテキストエディタなどの権限で攻撃が実行される
require/importした時
nodeコマンドの権限内で何でもできる
デフォルトでは新規process立ち上げたりも可能
任意コマンドのインストール
npmは任意の名前の実行コマンドをインストールできる
例
https://www.npmjs.com/package/@openai/codex と https://www.npmjs.com/package/codex
どちらもcodexというコマンドが入る
13年前からあるcodex npmは個人が作って公開しているもの
npm runの中では./node_modules/.bin/がpathの先頭に入る
任意コマンドのインストールと合わせると
プロジェクトのローカルにインストールしてて、グローバルにコマンドインストールしてないから大丈夫というわけではなくなる
Typosquatting
ライブラリ名を打ち間違える
フィッシング詐欺みたいなもの
たぶん有名ライブラリの1文字違いとかは狙われてる
npm isntallってtypoしてもinstallできてうれしいね、みたいな牧歌的な時代からだいぶ変わってきたshokai.icon
https://docs.npmjs.com/cli/v11/commands/npm-install
aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall