Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-42089 — ローカルパッケージインストールヘルパーが、呼び出し元から提供されたパッケージ名を過信していました。yeoman-environmentでは、不足しているジェネレーターがユーザーの確認なしにインストールされる可能性があり、攻撃者が制御するプロジェクトメタデータがパッケージインストールおよびコード実行経路に変わる恐れがあります。 | Kitploit
ツール/GitHubGitHub/0xmrma/cve-2026-42089
脆弱性分析コード分析エクスプロイトサプライチェーンセキュリティ論文と研究学習と教育
GitHub0xmrma/cve-2026-42089

CVE-2026-42089

ローカルパッケージインストールヘルパーが、呼び出し元から提供されたパッケージ名を過信していました。yeoman-environmentでは、不足しているジェネレーターがユーザーの確認なしにインストールされる可能性があり、攻撃者が制御するプロジェクトメタデータがパッケージインストールおよびコード実行経路に変わる恐れがあります。

リポジトリを見る
1ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-42089

ローカルパッケージインストールヘルパーが、呼び出し元から提供されたパッケージ名を信頼しすぎていました。yeoman-environment では、不足しているジェネレーターがユーザーの確認なしにインストールされ、攻撃者が制御するプロジェクトメタデータがパッケージインストールおよびコード実行の経路となる可能性がありました。

はじめに

この問題は、generator-jhipster をレビューしている際に、単純なセキュリティ上の疑問を念頭に置いて発見しました。

攻撃者が制御するプロジェクトメタデータによって、開発者ツールがユーザーが明示的に要求する前にサードパーティのコードを取得して実行させられるか?

このケースでは、答えは「はい」でした。

当初はJHipsterの問題に見えましたが、より深い上流の根本原因が yeoman-environment にあることが判明しました。

脆弱な動作は、Yeoman のローカルジェネレーターインストールフローにありました。そこでは、呼び出し元から提供された不足しているパッケージが、ユーザーの確認なしに自動的にインストールされていました。攻撃者が制御するパッケージ名をそのパスに渡すダウンストリームコンシューマーでは、それが実際のパッケージインストールおよびコード実行チェーンを生み出すのに十分でした。

この問題は CVE-2026-42089 となりました。

yeoman-environment: yeoman-environment on GitHub
パッケージ: yeoman-environment (npm)
CVE: CVE-2026-42089

この影響を受けたのは yeoman-environment です。これは Yeoman のジェネレーター読み込みおよびブートストラップフローの背後にあるランタイムレイヤーです。公式プロジェクトは、これをジェネレーターのライフサイクルとディスカバリを処理するコンポーネントと説明しており、2026年6月26日時点で、npmパッケージページには 1,466,426 週間ダウンロード と表示されており、これはJavaScriptツールエコシステムで広くデプロイされているパッケージです。

photo0

攻撃チェーン

攻撃者が制御するプロジェクト設定 -> 呼び出し元から提供されたジェネレーターパッケージ名 -> yeoman-environment が不足しているパッケージをサイレントインストール -> ダウンストリームツールがインストールされたジェネレーターコードを読み込む -> CLI ブートストラップ中にパッケージインストールとコード実行が発生


yeoman-environment の動作

yeoman-environment は、Yeomanベースのツールの背後にあるランタイムおよびジェネレーター読み込みレイヤーです。

とりわけ、以下の処理を行います。

  • ジェネレーターの検索
  • ローカルリポジトリ管理
  • 不足しているジェネレーターのパッケージインストール
  • ジェネレーターの登録と読み込み

つまり、これは信頼の境界に直接位置しています。

関連する疑問は、Yeoman が「単なるローカルツール」であるかどうかではありません。

関連する疑問は、信頼できない入力がパッケージインストールとコード読み込みの動作に影響を与えることができるかどうかです。

このケースでは、それが可能でした。


この表面領域を調査する価値があった理由

私はここでメモリ破壊やクラッシュのみのバグを探していたわけではありません。

より重要なターゲットは、拡張とパッケージ解決の表面領域でした。

以下のようなシステムはすべて、

  • 別のレイヤーからパッケージ名を受け取り、
  • それらを自動的にインストールし、
  • その後、読み込み可能にする

これらは厳密な精査に値します。

これは、ダウンストリームコンシューマーがそれらのパッケージ名をプロジェクトローカルデータから導出できる場合に特に当てはまります。

まさにこれこそ、通常の設定が静かにセキュリティ境界になる可能性がある場所です。

それが正しい調査対象でした。


私が焦点を当てた境界

最初に generator-jhipster を通じて動作を再現しました。

重要なパスは以下の通りです。

  • プロジェクトローカルの .yo-rc.json がブループリントパッケージを宣言する
  • JHipster が CLI ブートストラップ中にそのブループリントエントリを読み取る
  • 不足しているブループリントパッケージが Yeoman のインストールパスに渡される
  • Yeoman がそれらをサイレントインストールする
  • ダウンストリームロジックがブループリント CLI モジュールをインポートする

つまり、次のような無害なコマンドでも、

root@kitploit:~
jhipster --help

要求されたコマンドが完了する前にパッケージインストールに到達する可能性がありました。

これは実際の信頼境界の失敗です。

ダウンストリームのトリガーがそれを露呈するのに役立ちましたが、安全でないデフォルトの動作は Yeoman にありました。


根本原因

バグは単純でした。

yeoman-environment において、脆弱なメソッドは次の通りです。

root@kitploit:~
async installLocalGenerators(packages) {
    const entries = Object.entries(packages);
    const specs = entries.map(([packageName, version]) => `${packageName}${version ? `@${version}` : ''}`);
    const installResult = await this.repository.install(specs);
    const failToInstall = installResult.find(result => !result.path);
    if (failToInstall) {
        throw new Error(`Fail to install ${failToInstall.pkgid}`);
    }
    await this.lookup({ packagePaths: installResult.map(result => result.path) });
    return true;
}

このメソッドは、呼び出し元から提供されたパッケージ名を直接以下の方法でインストールしていました。

root@kitploit:~
this.repository.install(specs)

ユーザーに事前に確認を求めないままです。

これが脆弱性の核心です。

なぜ悪用可能か

パッケージ名が信頼できるソースから来る必要がないからです。

ダウンストリームコンシューマーがそれらを攻撃者が制御するプロジェクトメタデータから導出する場合、悪用チェーンは簡単です。

  • 攻撃者が間接的にパッケージ名を制御する
  • ダウンストリームツールがそれらを Yeoman に渡す
  • Yeoman がサイレントインストールする
  • ダウンストリームコードが新たにインストールされたパッケージを読み込み可能にして続行する

これは単に「パッケージインストールが発生した」という話ではありません。

これは、明示的な同意の境界なしに、信頼できない入力がパッケージインストールシンクに渡されるということです。


なぜこれが単なるツールの動作ではなくセキュリティ問題なのか

重要な区別は、信頼できない入力からのサイレントインストールです。

以下の間には実際に違いがあります。

  • ユーザーが明示的にパッケージをインストールすることを決定すること
  • プロジェクトローカルデータが呼び出し元に要求させたために、フレームワークがパッケージをサイレントインストールすること

この違いは、パッケージがその後すぐに読み込み可能になる場合にさらに重要になります。

問題はサードパーティのジェネレーターが存在することではありません。

問題は、Yeoman が呼び出し元から提供されたパッケージ名を、ユーザーの確認なしにデフォルトでインストール可能として扱ったことです。

これにより、安全でないダウンストリームの信頼前提が事実上悪化します。

修正が確認ゲートを追加したのは、まさにそのためです。


PoC

私は2層の証明を使用しました。なぜなら、それらが根本原因と実際のダウンストリーム影響の両方を示したからです。

PoC 1: ストックのダウンストリームトリガー

最初の証明では、未修正の generator-jhipster を使用しました。

まだインストールされていないブループリントパッケージを参照するルート .yo-rc.json を持つプロジェクトを作成し、次を実行しました。

root@kitploit:~
jhipster --help

これにより、JHipster は不足しているブループリントを、ヘルプが完了する前に Yeoman のローカルジェネレーターインストールフローに渡しました。

重要な結果は以下の通りです。

  • 無害に見えるコマンドがパッケージ解決とインストール動作に到達した
  • プロジェクトローカルメタデータだけでインストールパスをトリガーするのに十分だった

これにより、実際のトリガー条件が明確に確立されました。

PoC 2: 制御されたパッケージ実行パス

2番目の証明では、制御されたローカルレジストリと、インポート時の副作用を安全に示すように設計されたパッケージを使用しました。

これが重要だったのは、より強力なストーリーを示したかったからです。

  • プロジェクトローカルメタデータがパッケージ選択に影響を与える
  • Yeoman がパッケージをサイレントインストールする
  • ダウンストリームロジックがインストールされたブループリント CLI モジュールを読み込む
  • コード実行がブートストラップ中に到達可能になる

これは最も強力な証拠チェーンでした。なぜなら、問題を以下の範囲から

「予期しないインストール試行」

以下の範囲へと移行させたからです。

「インストールとダウンストリームコード読み込みパスが実際に到達可能である」

これこそが、信頼境界の失敗がはるかに否定しにくくなるポイントです。


PoC がこのように選ばれた理由

最初のPoCはサイレントインストール動作を証明します。

2番目のPoCは、その動作がなぜ重要かを証明します。

この分割は重要でした。

以下のように留まる報告は、

「パッケージがインストールされる可能性がある」

以下のように示す報告よりも弱いです。

  • 攻撃者が制御する入力がインストールパスに到達する
  • インストールが確認なしに発生する
  • ダウンストリームロジックによりコード実行が到達可能になる

それが完全なストーリーです。


影響範囲

アドバイザリの処理とローカルレビュー中に、この動作は installLocalGenerators() の導入まで遡って調査されました。導入は以下のバージョンです。

root@kitploit:~
yeoman-environment 2.9.0

したがって、影響範囲は次の通りです。

root@kitploit:~
>= 2.9.0 かつ < 6.0.1

修正バージョンは次の通りです。

root@kitploit:~
6.0.1

修正分析

修正は正確で最小限でした。

6.0.1 では、installLocalGenerators() が変更され、強制インストールが明示的に要求されない限り、インストール前に確認ステップが追加されました。

修正後の形状は次のようになりました。

root@kitploit:~
async installLocalGenerators(packages, forceInstall = false) {

そして次のようになります。

root@kitploit:~
const { aproveInstall } = await this.adapter.prompt({
    message: `次のパッケージをローカルリポジトリにインストールする必要があります: ${specs.join(', ')}。続行しますか?`,
    type: 'confirm',
    name: 'aproveInstall',
    default: false,
});

ユーザーが拒否した場合、インストールは中断されます。

これは正しい修正です。なぜなら、不足していた信頼境界を復元するからです。

  • 呼び出し元から提供されたパッケージ名は、デフォルトではサイレントインストールされなくなる
  • 明示的なユーザーの承認が必要
  • ダウンストリームツールはもはや偶発的な暗黙の信頼に依存できない

この修正は次のコミットで導入されました。

root@kitploit:~
78d2af7

次のPRを通じて。

root@kitploit:~
PR #753

これは、このようなセキュリティ問題に求めるまさにその種類の修復です。

  • 小さい
  • 直接的
  • 推論しやすい
  • 脆弱性のあるシンク自体に結びついている

重大度と分類

この問題は、外観上の問題や驚くべき動作以上の影響があるため、合理的に真剣に受け止められました。

脆弱な動作は以下につながる可能性があります。

  • 攻撃者が選択したパッケージのインストール
  • 無害なコマンドパスからのパッケージインフラストラクチャへのネットワークアクセス
  • ダウンストリームのコード読み込み到達可能性
  • 影響を受けるコンシューマーにおける開発環境の侵害

この問題に関連付けられたCVSSベクトルは次の通りです。

root@kitploit:~
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

これはダウンストリームの悪用ストーリーとして理にかなっています。

  • ローカル実行コンテキスト
  • 低複雑性
  • 事前の特権不要
  • ユーザー操作が必要
  • パッケージ実行パスに到達した場合の機密性、完全性、可用性への高い影響

開示

この問題は、最初は generator-jhipster に対する非公開報告として始まりました。なぜなら、それが私が最初に検証した実際のトリガーパスだったからです。

トリアージ中に、JHipster メンテナーから、自動インストール動作自体が yeoman-environment にあると指摘され、上流の修正が参照されました。

それにより、正しい方向転換が行われました。

  • 根本原因を Yeoman に絞り込む
  • JHipster をダウンストリームの影響を受けるコンシューマーとして扱う
  • 上流の問題を非公開で報告する

Yeoman メンテナーは問題をレビューし、影響範囲を確認し、非公開アドバイザリを通じて追跡しました。

その後、報告には次のCVEが割り当てられました。

CVE-2026-42089

そのアドバイザリは、generator-jhipster を通じた実際のダウンストリームトリガーパスも文書化していました。

これは、調整された開示が時々もう1ステップ必要とする理由の良い例です。

  • 最初に実際のトリガーを特定する
  • 次に真の所有権の境界を特定する

ここでは、ダウンストリームでの再現は有用でしたが、CVE の適切な場所は上流パッケージでした。


このバグが実際に教えること

ここでの重要な教訓は単純です。

パッケージインストールは、ローカル開発ツールであってもセキュリティ境界である

多くの人は、これがCLIツールで発生するという理由で、このような問題を本能的に軽視します。

それは間違いです。

本当の疑問は、ツールがローカルかどうかではありません。

本当の疑問は次の通りです。

信頼できない入力が、明示的なユーザーの決定なしにツールにコードを取得させ、信頼させることができるか?

このケースでは、可能でした。

それが本当の教訓です。

この問題は、優れた脆弱性研究に関する重要な点も強化します。

  • 最初に再現した製品が常に真の根本原因の所有者であるとは限らない
  • ダウンストリームのPoCがリスクを明らかにすることが多い
  • 上流の信頼境界の誤りが、実際の修正が属する場所である

それがまさにこのCVEの形状でした。


要点

  • パッケージインストールヘルパーはセキュリティ境界である
  • 呼び出し元から提供されたパッケージ名はデフォルトでサイレントインストールされるべきではない
  • ローカルプロジェクトメタデータは、拡張の読み込みに影響を与える場合に危険になりうる
  • generator-jhipster でのダウンストリーム再現が問題を明確に露呈した
  • それでも根本原因は yeoman-environment にあった
  • 明示的な確認ゲートを追加することが正しい修正であった

最後に

この脆弱性は派手なペイロードに関するものではありませんでした。

それは、正しい信頼境界の質問をすることに関するものでした。

ダウンストリームツールがプロジェクトローカルデータにパッケージ選択に影響を与えさせました。 Yeoman は不足しているパッケージを確認なしでインストールしました。 残りのコード読み込みチェーンが残りを行いました。

それが、これが CVE-2026-42089 になった理由です。

yeoman-environment 6.0.1 で修正されました。

ツールをダウンロード