mcpField
H
Husk

Husk

ローカル
husk-security.devセキュリティ62 日前に更新

Husk について

Huskは、依存関係、漏えいしたシークレット、インストールスクリプト、AI/MCP設定を調べる、開発者向けのローカル優先セキュリティスキャナーです。CLI、ターミナルとウェブのUI、プロジェクトポリシー、CIゲートにより、チームでローカルに検出結果を確認し対処できます。

主な機能

  1. 01依存関係と漏えいシークレットのスキャン
  2. 02危険なスクリプトとエージェント設定の検出
  3. 03オフラインスキャンとアドバイザリ照会
  4. 04プロジェクトポリシーと信頼台帳
  5. 05CIゲートと修正プラン
  6. 06CLI、TUI、ローカルウェブUI

活用シーン

  1. 01プロジェクトのセキュリティ検出結果を確認
  2. 02インストール前にパッケージを検査
  3. 03検出結果の重大度でCIをゲート
  4. 04安全な修正を計画しポリシー判断を記録

MCP 対応

`husk mcp`はstdio経由でMCPサーバーを実行し、エージェントが検出結果を読み、範囲を限定したスキャンを開始できるようにします。`husk mcp install`で設定をエージェントに登録できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
npmhusk-sec0.1.2
cargohusk-sec0.1.2

ツール

10

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

husk

開発者向けのローカルファーストなセキュリティスキャナーです。単一のバイナリで、アカウントは不要です。

CI License: MIT

インストール · クイックスタート · 使い方 · コマンド · 仕組み

husk は、侵害されたパッケージ、漏えいしたシークレット、リスクの高いインストールスクリプト、安全でない AI/MCP 設定をマシン上でスキャンし、修正が必要な項目を表示します。ローカルで実行されるため、ログインもアカウントも不要で、ファイルがマシンの外に送信されることはありません。オンラインスキャンで公開アドバイザリーデータベース(OSV.dev、npm、PyPI、GitHub、CISA KEV/FIRST EPSS)に送信されるのは、パッケージ名、バージョン、CVE ID のみです。--offline を指定すると、ネットワーク呼び出しは一切行われません。

独立した監査を受けていない、バージョン 1.0 未満のソフトウェアです。 リリース間でインターフェースが変更されることがあります。不具合の報告や質問は、Issues までお寄せください。

インストール

husk は Linux と macOS で動作します。Windows では WSL 内で実行してください。WSL ではインストールも動作も Linux とまったく同じです。Windows ネイティブ版はありません。

最新の署名付きリリースをダウンロードし、チェックサムを検証してインストールします。

curl -fsSL https://husk-security.dev/install.sh | sh

~/.local/bin にインストールされます。インストール先は HUSK_INSTALL_DIR または --install-dir で変更できます。このディレクトリがすでに PATH に含まれていない場合、シェルの起動ファイルへの追加を実行前に確認し、変更対象となるファイルの正確な名前を表示します。拒否した場合、またはターミナルなしで実行した場合は、代わりに追加するコマンドが 1 つ表示されます。--no-modify-path を指定すると、起動ファイルへの書き込みは一切行われません。

シェルにパイプするのは避けたいですか? install.sh をダウンロードして内容を確認してから実行してください。すべてのリリースには cosign 署名と SLSA アテステーションが付いています。インストーラーは SHA-256 チェックサムを検証します(cosign が PATH にある場合は署名も検証します)。詳しくはリリースの検証をご覧ください。

その他のインストール方法
ソースコマンド
cargocargo install husk-sec
cargo-binstallcargo binstall husk-sec
npmnpm install -g husk-sec
Nix

インストールせずに実行できます。

nix run github:husk-security/husk -- scan

flake は 2 つのパッケージを公開しています。husk(デフォルト。localhost のウェブ UI を含みます)と、husk-tui(ウェブ UI を含まない同じバイナリのため、Node ツールチェーンは不要です)です。

継続的に使う場合は、flake を入力として追加し、パッケージを設定に含めてください。NixOS の場合:

{
  inputs.husk.url = "github:husk-security/husk";
  inputs.husk.inputs.nixpkgs.follows = "nixpkgs";

  outputs = { nixpkgs, husk, ... }: {
    nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        { environment.systemPackages = [ husk.packages.x86_64-linux.husk ]; }
      ];
    };
  };
}

同じ入力を使う Home Manager の場合:

home.packages = [ husk.packages.x86_64-linux.husk ];

宣言ではなく、コマンドで PATH に追加したい場合は、 nix profile install github:husk-security/husk も使えます。

クイックスタート

husk            # print help (no subcommand does nothing else)
husk scan       # one-shot scan of the current directory, plain terminal summary
husk web        # serve the local web UI and open it in your browser
husk tui        # browse the latest scan in the terminal UI

サブコマンドを指定せずに husk を実行すると、git や cargo と同様にヘルプを表示して終了します。エントリーポイントは、スキャンしてレポートを表示する husk scan、ブラウザーで開くローカルのウェブ UI husk web、ターミナル UI の husk tui です。

使用方法

日常的に実行するコマンドをいくつか紹介します。すべてのサブコマンドとフラグを含む完全な一覧は、コマンドリファレンスを参照してください。

ディレクトリをスキャンして、検出結果レポートを表示します。

$ husk scan --offline .
packages: 286  findings: 36  critical: 5  high: 16  medium: 15  low: 0  info: 0

  critical risky-agent-config  AI agent is allowed unrestricted shell access
           .claude/settings.local.json:4
  high     lifecycle-script    Dangerous npm postinstall script
           package.json:6
  high     risky-agent-config  MCP config contains hardcoded secret
           .mcp.json:7
  ...

パッケージをインストールする前に検査します(OSV.dev にリアルタイムで問い合わせます)。

$ husk check [email protected]
!! vulnerable npm [email protected]
   advisory GHSA-35jh-r3h4-6jhm via OSV.dev
   Command Injection in lodash
   Install a fixed version instead, or avoid the dependency until one is available.

バージョンは @version を末尾に付ける方法(最後の @ で分割するため、@scope/[email protected] も使用できます)と、別の引数として指定する方法があります:husk check npm lodash 4.17.20。パッケージ名のみ(husk check lodash)を指定すると、npm とみなしてマルウェアに関する勧告のみを確認します。

Guide にある追跡対象の Safe Chain タスクを使って、通常のインストールとロックファイルからのインストールを保護します。Husk は、機能の弱いパッケージマネージャー用ラッパーを同梱するのではなく、MIT ライセンスの無料サードパーティーツールを推奨しています。

Review Aikido Safe Chain

プロジェクトポリシーをコミットします(パッケージのブロック/許可、トリアージ済みの検出結果の抑制、CI のしきい値の設定)。.husk/ ディレクトリはコミットすることを想定しています。

$ husk init
Created ./.husk/policy.toml
  `husk scan` and `husk ci` in this project now read this policy.

$ husk approve npm:lodash          # allow a package; recorded in policy + ledger

安全な修正を計画します(デフォルトではドライランです。--apply を指定すると、バックアップを作成して修正を書き込みます)。

husk fix                          # show the plan, change nothing
husk fix --apply                  # write the auto-safe fixes

CI でビルドを判定します。標準出力に JSON を出力し、しきい値以上の場合はゼロ以外の終了コードを返します。

husk ci                           # exit 1 on high+ findings (see JSON output below)
環境変数

husk はいくつかの環境変数を読み取ります。

変数動作
HUSK_HOME状態ディレクトリ(台帳、デーモンの状態、認証情報)。デフォルトは ~/.husk です。
HUSK_CACHE_DIRキャッシュディレクトリ(レポート、スキャンインデックス)。デフォルトは ~/.cache/husk です。
HUSK_PAGER, PAGER長いレポートに使用するページャー(デフォルトは less)。値を空にするか cat を指定すると、ページングを無効にします。
NO_COLORCLI 出力の ANSI カラーを無効にします。
HUSK_TOKENクラウドコマンドで使用するベアラートークンを上書きします(CI または一時的な使用向け)。

コマンドリファレンス

1 つのバイナリに、多数のサブコマンドが用意されています。各コマンドのすべてのフラグを確認するには、husk <command> --help を実行してください。

  • husk scan:今すぐスキャンし、検出結果レポートを表示します
  • husk status:再スキャンせずに、前回のスキャンのレポートを表示します
  • husk tui:最新のスキャン結果を対話型ターミナル UI で開きます
  • husk web:最新のスキャン結果をローカルの Web UI で提供します
  • husk check:1 つのパッケージのマルウェア/脆弱性に関する判定を照会します
  • husk ci:スキャンしてビルドを判定します。しきい値以上の場合は終了コード 1 を返します
  • husk fix:最新のスキャン結果に基づいて修正を計画します。--apply を指定すると書き込みます
  • husk init:コミット対象の .husk/policy.toml プロジェクトポリシーを作成します
  • husk approve:許可/ブロック/抑制の判断をポリシーに記録します
  • husk policy:有効なプロジェクトポリシーとその件数を表示します
  • husk ledger:個人の信頼台帳を表示または検証します
  • husk daemon:一定間隔でスキャンし、前回の実行以降に新たに検出された項目を報告します
  • husk login:husk アカウントにサインインします(近日公開)
  • husk logout:このマシンに保存されている認証情報を削除します
  • husk account:サインイン中のアカウントとマシンのリンクを表示します
  • husk sync:遡及アラートを受け取るため、前回のスキャンのインベントリをアップロードします
  • husk alerts:このアカウントの遡及アラートを一覧表示します
  • husk telemetry:匿名テレメトリーのオプトインを管理します(デフォルトではオフ)
  • husk feedback:husk の開発者にフィードバックを送信します
  • husk mcp:MCP サーバーを実行するか、AI エージェントに登録します

JSON 出力

複数のコマンドが、スキャンレポート全体を JSON で出力します。husk scan --json、 husk status --json、husk tui --json、および husk ci(常に JSON)です。構造は どのコマンドでも同じで、ローカルキャッシュに保存され、すべての UI で表示されるレポートです。 標準出力にプレーンな JSON を出力します。ページャーも色付けも使わないため、そのまま jq に渡しても安全です。

フィールド型意味
api_versionnumberレポート構造のバージョン(現在は 4)。構造が変更されると更新されます。詳細な解析を行う前に確認してください。
generated_atstring (RFC 3339)スキャンが完了した日時です。UI では、24 時間を超えたレポートは古いものと見なされます。
rootsstring[]スキャンされたディレクトリです。
contextobjectシステムコンテキストです。ユーザー、OS/アーキテクチャ、ディストリビューション、カーネル、Git の識別情報、検出されたパッケージマネージャーと開発設定が含まれます。
packagesobject[]パッケージのインベントリです。検出された各座標について {ecosystem, name, version, manifest_path, line} が含まれます。
projectsobject[]検出されたプロジェクト(注意を向ける単位)です。検出結果は Finding.project_id を介してプロジェクトに紐付けられます。
summaryobjectセキュリティの要約です(UI で使用される件数と説明が含まれます)。
findingsobject[]未対応の検出結果です。それぞれに id、title、severity(critical/high/medium/low/info)、category、source、path、line、summary、evidence(機密情報の事前削除済み)、recommendation、references、cves に加え、任意の package、project_id、rule_id、confidence、priority、exploit(CISA KEV/EPSS)、fixed_version が含まれます。
ignoredobject[]プロジェクトポリシーまたは台帳の判断によって非表示にされた検出結果です。findings、統計、スコアリングには含まれません。
controlsobject[]登録済みガイドコントロールの結果です。ステータス、ローカルの証拠、関連する検出結果 ID が含まれます。
remediationsobject[]コントロールが管理する、型付きの修正提案です。実行クラス、重大度、操作、関連する検出結果 ID が含まれます。
guidanceobject評価済みの Markdown ガイドです。ベースライン/推奨項目、スキャンの優先度、レビュー判断、対応済みの割合が含まれます。
providersobject[]インテリジェンスソースごとの情報です。{name, ok, checked_packages, findings, message} が含まれます。ok: false は、カバレッジが不完全であることを意味します。
benchmarksobject[]ステージごとの処理時間です。{stage, elapsed_ms, files_checked, bytes_scanned, packages_checked, findings, workers, detail} が含まれます。
statsobject合計値です。{packages, findings, critical, high, medium, low, info} が含まれます。
deltaobject?同じルートで前回キャッシュされたスキャンからの変更点です。{previous_at, previous_score, score, new_count, unchanged_count, resolved_count, resolved} が含まれます。初回のスキャンではありません。
husk scan --json | jq -r '.findings[].id'                 # every finding id, worst first
test "$(husk status --json | jq .stats.critical)" -eq 0   # fail a script on any critical
husk ci | jq '.providers[] | select(.ok | not)'           # which intel sources had problems

動作の仕組み

  • ローカル優先。 スキャンではファイルを読み取り、静的に解析します。husk がスキャン対象を実行することはありません。結果と状態はお使いのマシン上に保持されます。オンラインスキャンで公開アドバイザリーデータベースに送信されるのは、パッケージ座標と CVE ID のみです。
  • パッケージのカバレッジ。 検出機能はプラグイン可能なレジストリで、約 68 のパッケージエコシステム(言語のパッケージマネージャー、OS/ディストリビューションのデータベース、AI/エージェント/エディター関連、CI/IaC/コンテナー、CycloneDX/SPDX SBOM)を網羅しています。詳細は src/scan/targets/ を参照してください。
  • エクスプロイトを考慮。 CISA KEV と FIRST EPSS の情報を加味し、区別のない CVE リストを並べるのではなく、実際に悪用されている CVE を上位に表示します。
  • 蓄積される状態。 リポジトリにコミットした .husk/policy.toml(ブロック/許可、抑制、CI のしきい値)はリポジトリとともに引き継がれます。個人用のハッシュチェーン付き信頼台帳 ~/.husk/ledger.jsonl には、すべての approve が記録されます。どちらもローカルに保存され、内容を確認でき、削除できます。
  • エージェント向けに設計。 husk mcp は標準入出力経由で Model Context Protocol サーバーを提供し、AI エージェントが検出結果を読み取り、対象を限定したスキャンを実行できるようにします。husk mcp install <agent> は設定を書き込みます。Model Context Protocol Registry には mcp-name: io.github.husk-security/husk として登録されています。エージェント向けの詳細は AGENTS.md と integrations/ を参照してください。

ソースからビルドする

Cargo と Rust 1.95 以降があれば十分です。

git clone https://github.com/husk-security/husk
cd husk
cargo build --release --no-default-features
./target/release/husk scan /path/to/your/project

localhost の Web UI は web/ にある Vite + React アプリで、デフォルトの web Cargo feature のもと、バイナリに(rust-embed を介して)埋め込まれます。ビルド方法は 2 つあります。いずれかを選んでください。

  • フルビルド(デフォルトの feature)。 まずフロントエンドをビルドし、その後コンパイルします。Node が必要なのはこの方法だけです。

    npm --prefix web ci
    npm --prefix web run build      # → web/dist
    cargo build --release           # rust-embed embeds web/dist
    
  • CLI/TUI のみ(Node 不要)。 Web UI を完全に除外するため、事前のビルドは不要です。

    cargo build --release --no-default-features
    

web/dist は生成物で、gitignore 対象です。フロントエンドを先にビルドせずに通常の cargo build を実行すると、web feature には web/dist が必要なため、上記の 2 つの方法のいずれかを案内する明確なエラーが表示され、失敗します。

すでに Nix をお使いの場合、flake には同じツールチェーンが固定されています。nix develop でそのツールチェーンを含むシェルを起動でき、nix build .#husk(Web UI を含む)または nix build .#husk-tui(Node 不要)でバイナリを直接ビルドできます。いずれも必須ではありません。

開発者向けドキュメント(モジュール構成、3 つのプラグイン可能なレジストリ、スキャナーの追加方法)は AGENTS.md にあります。

プライバシーと信頼:husk が読み取るもの、お使いのマシンから外に出ないもの、リリースの署名方法

husk はセキュリティツールであるため、スキャン対象よりも高い基準を自らに課しています。以下のすべての主張は、このリポジトリのコードまたは CI によって保証されています。

husk が読み取るもの。 マニフェストとロックファイル、パッケージマネージャーのデータベース、ドットファイルと設定ファイル、git フックファイル、CI ワークフローファイル、MCP/エージェントの設定、テキストファイル(シークレットのパターン検出用)です。スキャンは厳密に読み取り専用です。husk が書き込むのは独自の状態(台帳、デーモンの状態、クラウド設定)を保存する ~/.husk/ とキャッシュディレクトリだけです。いずれも通常のファイルなので、いつでも確認して削除できます。

husk が決して行わないこと。

  • スキャン対象を実行しません。 パッケージマネージャー、インストールスクリプト、git フック、エディター拡張機能、MCP サーバー、リポジトリのコードは実行せず、静的解析のみで検出します。唯一の例外は、実行ごとに明示的なオプトインが必要な husk fix --apply --deps です。この場合は、最初に内容を表示したうえで、お使いのパッケージマネージャーのバージョン固定コマンドを実行します。
  • ファイルをアップロードしません。 オンラインスキャン中に husk が公開アドバイザリデータベース(OSV.dev、npm、PyPI、GitHub、CISA KEV / FIRST EPSS)へ送信するのは、パッケージ名、バージョン、CVE ID のみです。ファイルの内容、パス、シークレットは送信しません。husk scan --offline はネットワーク呼び出しを一切行いません。
  • デフォルトでホームに接続しません。 アカウントやログイン画面はありません。husk telemetry on を実行するまでテレメトリーは無効であり、DO_NOT_TRACK と HUSK_TELEMETRY_DISABLED による無効化スイッチにも従います。すべてのクラウド機能はオプトイン方式で、使用されるまで無効です。
  • 出力にシークレットを含めません。 シークレットの検出結果に含まれるのは、短く事前に編集された抜粋であり、一致した認証情報そのものではありません。

検証可能な特性。

主張検証方法
100% 安全な Rust(#![forbid(unsafe_code)])grep -rn "forbid(unsafe_code)" src/lib.rs src/main.rs
独自の信頼経路なし:すべての判定は TLS 経由で照会する公開ソースに基づき、スキャン/husk check の経路に husk 独自のフィードや署名ルートはありませんsrc/providers.rs、src/check.rs
リリースに署名済み(cosign keyless + SLSA provenance。CI でタグからビルド)リリースの検証
サプライチェーン検証済みの依存関係(cargo-deny / cargo-machete / Dependabot / Scorecard)ci.yml、scorecard.yml
すべてのサードパーティ製 GitHub Action を完全なコミット SHA に固定(husk は固定されていない Action にフラグを付けます)grep -rn "uses:" .github/workflows/
決定論的な修正:修正適用経路で LLM を使用しませんsrc/remediation/
**`tst/`について。** `tst/`には、意図的に安全でないフィクスチャ(`AKIAIOSFODNN7EXAMPLE`のような偽のAWSキー、プロンプトインジェクションを含むMarkdown、脆弱なバージョン固定など)が含まれており、huskの検出機能を再現性のある方法でテストできます。これらは方針に基づいて偽物であり、crates.ioパッケージから除外されています。このリポジトリ内でスキャナーがそれらを検出した場合、スキャナーもhuskも想定どおりに動作しています。内容とその理由については[`tst/README.md`](tst/README.md)を、対象範囲外であることについては[SECURITY.md](SECURITY.md)をご覧ください。`tst/`は対象範囲外です。

husk自体の脆弱性は、公開のIssueではなく、SECURITY.mdに記載された非公開の窓口から報告してください。

リリースの検証

リリース検証の詳細

各リリースアーカイブには、SHA-256チェックサム、cosignによるキーレス署名(Sigstore FulcioとRekorの透明性ログを使用し、盗まれる可能性のある長期利用鍵は不要)、およびSLSAビルド来歴のアテステーションが含まれています。いずれもタグ付けされたコミットからCIで生成されます。install.shはチェックサムを自動で検証し(cosignが存在する場合は署名も検証します)。手動で検証するには、次のようにします。

VERSION="v0.0.1"
TARGET="x86_64-unknown-linux-gnu"          # or aarch64-apple-darwin, etc.
ARCHIVE="husk-${VERSION}-${TARGET}.tar.gz"

# 1. Checksum
sha256sum -c "${ARCHIVE}.sha256"           # macOS: shasum -a 256 -c ...

# 2. cosign signature: pin the workflow identity and the OIDC issuer
cosign verify-blob \
  --bundle "${ARCHIVE}.sigstore.json" \
  --certificate-identity-regexp "^https://github.com/husk-security/husk/\.github/workflows/release\.yml@refs/tags/v" \
  --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
  "${ARCHIVE}"

# 3. SLSA provenance
gh attestation verify "${ARCHIVE}" --repo husk-security/husk

実行が成功すると、Verified OKと表示されます。IDまたは発行者が一致しない場合、署名は拒否されます。それが目的です。リリースプロセスの詳細は.github/workflows/release.ymlに記載されています。公開には、mainから到達可能なコミットに付けられた安定版のvX.Y.Zタグ、Cargo.tomlとflake.nix内の一致するバージョン、さらに元のワークフロー実行と再実行のそれぞれに対する、明示的に許可された担当者が必要です。このワークフローはタグ保護ルールに依存しません。公開の直前に、リモート上の最新タグとそのmainからの系譜を再確認します。許可されていないタグでも実行を開始できますが、署名ジョブには到達できません。

サポートとライセンス

  • ビルドと開発:上記のソースからのビルドとAGENTS.mdをご覧ください。新しい検出機能には、フィクスチャとテストが付属します。
  • コントリビューション:ビルドとプルリクエストの手順についてはCONTRIBUTING.mdをご覧ください。
  • ヘルプの利用:使い方に関する質問、検出結果の解釈に関する相談、具体的なバグ、機能リクエストは、すべてIssuesで受け付けています。
  • セキュリティ:husk自体の脆弱性は、SECURITY.mdに従って非公開で報告してください。公開のIssueは絶対に作成しないでください。
  • ライセンス:MIT。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。