mcpField
V
valvur

valvur

ローカル
pypi.orgセキュリティ02 日前に更新

valvur について

valvurは、7種類のオープンソーススキャナーとAI生成コード向けチェックを組み合わせ、ローカルでセキュリティスキャンを行い、優先度付きの結果を出力します。開発者やコーディングエージェント向けです。ネットワーク接続のないコンテナーでソースのコピーを検査し、修正案は示しますがコードは変更しません。

主な機能

  1. 017種類のオープンソーススキャナーを統合
  2. 02依存関係、シークレット、コード、インフラを検査
  3. 03エージェント設定のリスクと架空パッケージを検出
  4. 04悪用リスクに基づいて検出結果を統合・順位付け
  5. 05SARIF、JSON、修正案を出力
  6. 06ソースを変更せずオフラインでスキャン

活用シーン

  1. 01AI生成コードのセキュリティ問題をスキャン
  2. 02インストール前にパッケージの実在性や悪意を確認
  3. 03エージェント設定の指示注入や認証情報リスクを確認
  4. 04CIでセキュリティゲートを実行しSARIFをアップロード

MCP 対応

MCPクライアント向けにセキュリティスキャンツールを提供するMCPサーバーです。`uvx --from valvur valvur-mcp`で起動できます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"maverickhq-valvur": {
"command": "uvx",
"args": [
"valvur"
]
}
}
}
起動コマンドuvx valvur

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypivalvur1.6.0

ツール

7

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

パラメーター型必須説明
freshbooleanいいえすべての Scanner を実行します。デフォルトでは、依存関係ファイルも各 Scanner のデータも変更されていない場合、Trivy と OSV-Scanner の前回の結果を再利用します。新しい結果が既存の結果を置き換えます。
profileenumいいえoffline(デフォルト)では、ネットワークにアクセスせずにすべての Scanner を実行します。full では、ローカルデータで回答できない情報をネットワークに問い合わせます。オフラインデータベースの代わりに OSV.dev を使用し、各パッケージの登録サイトで使用年数と採用状況を調べ、JVM および Go の依存関係の有無を確認します。送信されるのはパッケージ名とバージョンのみで、ソースは送信されません。offline | full
budget_sintegerいいえScanner 全体に許可する実行時間(秒、デフォルトは 300)。時間を超えると新しい処理は開始されず、実行中の処理は停止し、中断された Scanner を明記して結果を未完了として報告します。0 は無制限です。
workspacestringいいえスキャンするプロジェクトの絶対パス。デフォルトは現在のディレクトリです。

詳細

valvur

AI 生成コードをオフラインでセキュリティスキャン。
7 つのオープンソーススキャナーと AI 固有のチェックを、1 つのコマンドで実行し、優先順位付きのレポートにまとめます。

PyPI Python 3.11+ CI OpenSSF Scorecard Licence: Apache-2.0
Scorecard の Code-Review、Branch-Protection、Contributors チェックには 2 人目のメンテナーが必要ですが、valvur のメンテナーは 1 人です(MAINTAINERS.md)。

ステータス:1.6.0。このツリーが宣言しているバージョンです。上の PyPI バッジは pip install valvur でインストールされるバージョンを示し、変更履歴には各バージョンでの変更が記載されています。

Claude Code で使用する場合: /plugin marketplace add MaverickHQ/valvur を実行し、続けて /plugin install valvur@valvur を実行して、プロジェクトをスキャンするよう指示します。
ターミナルから使用する場合は、 Docker または Podman を起動した状態で uvx valvur scan を実行します。

valvur が、ロックファイルで固定されたパッケージが悪意のあるものとして公開されているプロジェクトをスキャンし、検出結果を一覧表示します

valvur を選ぶ理由

  • 7 つのスキャナーで、レポートは 1 つ。 Gitleaks、Trivy、OSV-Scanner、Opengrep、Checkov、zizmor、 Syft を固定バージョンでインストールし、valvur 独自の AI 生成コード向けチェックとともに、 1 つのコンテナ内で実行します。2 つのスキャナーが同じ脆弱性を報告した場合も、検出結果は 2 件ではなく 1 件となり、 すべての検出結果がまとめて優先順位付けされます。
  • マシンの外に何も出ないことを検証できます。 アカウントも API キーもテレメトリーも不要です。 スキャナーはネットワークインターフェースのない 1 つのコンテナ内で実行され、ソースコードはマウントせずにコピーします。 公開データの取得はすべて run.json に記録され、マシンの外に出たものも確認できます。何もありません。 1 つのコマンドで確認できます。
  • AI 生成コード特有の問題に対応しています。 モデルが攻撃者に登録されるパッケージ名をでっち上げることがあります。 エージェントの指示ファイルには、悪意のある指示や隠し Unicode が埋め込まれることがあり、 エージェントの設定からトークンが漏れることもあります。valvur は従来のシークレット、脆弱な依存関係、設定ミスのチェックに加えて、 これらもオフラインでチェックします。
  • 重要な検出結果を 10 件。400 件ではありません。 検出結果は、CVSS だけでなく CISA KEV と FIRST EPSS を基に、 攻撃者が悪用しているかどうかに応じて優先順位付けされます。ルール別、ディレクトリ別にグループ化され、 開発時のみ使う依存関係の優先度は下げられます。
  • 最終的な判断はあなたに委ねられます。 valvur は修正を提案しますが、自動で適用することはありません。 検出結果をゼロにするよう指示されたエージェントは、代わりにコードを削除したり、抑制設定を書いたりすることがあります。 そして、検出結果が消えたことは、脆弱性が修正されたことを意味しません。

検出対象

分野valvur が報告する内容検出ツール
幻覚によるパッケージ存在しない依存関係、または広く知られた名前と1文字違いの依存関係を、PyPI、npm、RubyGems、Packagist、crates.io のすべての名前とオフラインで照合しますvalvur の dependency-reality Check
悪意のあるパッケージOpenSSF の malicious-packages に掲載された、悪意のある依存関係OSV-Scanner、および同じ Check
エージェントの設定注入された指示、隠し Unicode、バージョンが固定されていない MCP サーバー、一律の承認、コマンドを実行するフック、情報漏えいにつながる設定valvur の ai-artifact Check
脆弱な依存関係ロックファイルから既知の CVE を検出し、悪用状況に基づいて優先順位を付け、更新すべき直接依存パッケージを示しますTrivy、OSV-Scanner
シークレットファイルおよび git 履歴内の認証情報Gitleaks
コードインジェクション、パストラバーサル、SSRF、オープンリダイレクト、XXE、安全でない Cookie、および eval、シェル、クエリ、DOM に到達するモデル出力Opengrep、valvur のルールを使用
インフラストラクチャTerraform、CloudFormation、Kubernetes、Dockerfile の設定ミスCheckov
CI ワークフローバージョンが固定されていないアクション、書き込み権限、テンプレートインジェクションzizmor
ライセンスと SBOMプロジェクトライセンスの欠落や矛盾、および要求された場合の CycloneDX SBOMvalvur の licence-file Check、Syft

ルールごとのチェック内容と検出できない内容については、valvur の仕組みをご覧ください。

仕組み

  1. 小さなホストシムが、スキャン対象(git が公開するファイルに加え、 .env* ファイルとエージェント設定)を決定し、必要な公開データを取得して、 取得内容を記録します。
  2. ネットワークインターフェースを持たない 1 つのスキャンコンテナーが、 標準入力で渡されたファイルのコピーを対象に、すべてのスキャナーを実行します。 コンテナー内の何ものもソースを変更できません。
  3. 1 つの検出結果モデルが、報告内容を正規化して優先順位を付け、シムが 結果フォルダーをプロジェクトに書き込みます。
.security-scan/          ← ignores itself in git, so it is never committed
├── SUMMARY.md           ← start here: the verdict, anything that failed, the top groups
├── REMEDIATION.md       ← a ranked proposal: you choose what to apply
├── findings.json        ← every finding, normalised, secrets redacted
├── results.sarif        ← SARIF 2.1.0, for code scanning and IDEs
└── run.json             ← what ran, what was fetched, and what left the machine: nothing

スキャン結果は findings、clean、または inconclusive で終了します。データが古い場合、エコシステムが未検査の場合、またはスキャナーが完了しなかった場合には、clean とは決して報告せず、その理由も示します。

主張ではなく、測定結果

valvur が検出すると主張する内容のうち、どれだけが実際に検出されるかを スコアとして測定しています。OWASP Benchmark の計算式で採点する 9 つのトラックで構成され、2 ポイントを超える低下を許さないラチェットを設けています。Linux と macOS の両方で、100 点中 74.1 です。

トラック内容スコア
sast-pythonPython 用 OWASP Benchmark40.9
sast-jsvalvur の JavaScript 版ツイン:10 個の弱点について、脆弱な例と修正済みの例55.0
secretsファイルと履歴に含まれる 10 種類の形式100.0
dependencies脆弱なバージョンに固定されたロックファイル、既知の悪意あるパッケージ100.0
package-reality存在しない名前、類似した名前、悪意のある名前100.0
agent-configuration実際のファイルに埋め込まれた指示と隠し Unicode94.3
infrastructureTerraform、Kubernetes、Dockerfile、Actions の不備95.0
real-code-precision保守されている 48 個のプロジェクト。すべての検出結果を手作業で判定2.3
llm-outputコード、シェル、クエリ、DOM に到達するモデル出力:生成したツインと公開済みのアドバイザリ 5 件79.0

トラック 8 は、ほとんど脆弱性のない保守中のコードにおける適合率です。検出結果 171 件のうち、実際の脆弱性は 3 件です。トラック 9 は、シンクに到達するモデル出力に関するルールを測定します。生成したフロー 34 件のうち 30 件を誤検知なしで検出しますが、LangChain、LlamaIndex、Vanna で公開されたアドバイザリ 5 件はどれも検出しません。これらのフローはそれぞれ関数をまたいでいます。各ルールの適合率は docs/RULES.md に、手法、ゲート、および valvur が主張しない内容は docs/EVALUATING.md に記載されています。懐疑的な視点でお読みください。

使ってみる

AI コーディングエージェントで

Claude Code プラグインには、MCP サーバー、ワークフローを実行するスキル、そしてエージェントが valvur に検出されたパッケージをインストールする前に確認を求めるフックが含まれています。Kiro ではこれを Power として利用します。どの MCP クライアントでも、uvx --from valvur valvur-mcp でサーバーを実行できます。 エージェント向けガイドには、11 種類のクライアントの設定、7 つのツール、および 確認しない モードに必要な権限が記載されています。

コマンドラインから

スキャナーはコンテナー内で実行されるため、マシンに Docker または Podman が必要です。不足しているものは valvur doctor で確認できます。

pip install valvur          # or: uv tool install valvur
valvur scan                 # offline by default; --profile full adds the registries' answers
valvur check npm left-pad   # before an install: real, a near-miss, or malicious?
valvur gate . --fail-on high --no-inconclusive

コマンドラインガイドには、すべてのコマンド、初回スキャンで取得する内容、結果フォルダー、設定ファイルが記載されています。

CI で
- uses: MaverickHQ/valvur-action@16b19e275f843419887873ed536a71f872607e24 # v0.2
  with: { fail-on: high, no-inconclusive: "true" }

このアクションはスキャンを実行し、results.sarif をコードスキャンにアップロードして、ジョブの継続可否を判定します。 CI ガイドでは、判定、独立したステップとしてのイメージ、および GitLab について説明しています。

オープンソースのスキャナーを基盤に

valvur は検出エンジンを構築していません。7 つのオープンソーススキャナーが検出を担い、その功績に値します。valvur は 1 つのファイルセット、1 つの検出結果モデル、エクスプロイトを考慮した優先順位付け、および独自の 3 つのチェックを追加します。すべてのスキャナーは、ファイルのコピーを渡され、1 つのコンテナー内で実行されます。run.json には実行された各スキャナーのバージョンが記録され、raw/ には各スキャナーの出力が保存されます。

スキャナーライセンス読み取る内容実行条件
GitleaksMITスキャン対象のファイルおよび Git 履歴内のシークレット。最新の 5,000 コミットまたは 200 MB まで常に
TrivyApache-2.0ロックファイル内の依存関係にある既知の脆弱性。ホストのキャッシュ内にあるデータベースと照合常に
OSV-ScannerApache-2.0OSV のデータを使ってロックファイルを照合します。このデータには、ここにある他のどのツールも報告しない、既知の悪意ある MAL- パッケージが含まれています。offline では、存在する各エコシステム用の OSV オフラインデータベースをホストのキャッシュに取得して使用します。full では、ロックファイルの名前とバージョンを送信する OSV.dev の API を使用します常に
OpengrepLGPL-2.1静的解析:ピン留めルール、INFO レベルのシンク一覧、モデル呼び出しからシンクへの汚染ルール、およびリクエストデータに基づく汚染ルール常に
CheckovApache-2.0インフラストラクチャの設定ミス:Terraform、CloudFormation、Kubernetes、Dockerfile、その他の CI システムGitHub ワークフロー以外のインフラストラクチャがある場合
zizmorMITGitHub Actions のワークフロー:ピン留めされていないアクション、書き込み権限、テンプレートインジェクションワークフローがある場合
SyftApache-2.0SBOM、およびそこから読み取る依存関係のライセンス要求された場合:scan --sbom、または [scan] の下に sbom = true を設定
チェック読み取る内容
ai-artifactエージェント設定:注入された指示、隠れた Unicode、ピン留めされていない MCP サーバー、一括承認、コマンドを実行するフック、および漏えいにつながる可能性のあるローカル設定
dependency-reality宣言されたすべての依存関係を Name Index と照合します。実在するか、また full ではどれほど古く、どの程度採用されているかを確認します。宣言済みまたはロック済みのすべての依存関係を、OpenSSF の悪意あるパッケージ一覧から毎日作成される既知の悪意あるパッケージ一覧と照合します
licence-fileプロジェクト独自のライセンス:欠落しているか、マニフェストの宣言と矛盾しているかを確認します

エクスプロイト情報は、CISA KEV と FIRST EPSS から取得します。公開された一次情報源であり、監査とミラーリングが可能です。独自のデータベースはなく、ベンダーロックインにつながるものもありません。

対応していないこと

  • 到達可能性解析は行いません。 脆弱な関数が呼び出されていることを証明するものではありません。
  • 自動修正は行いません。 修正内容はご自身で選択してください。
  • 侵入テストは行いません。 DAST、エクスプロイト、デプロイ済みシステムのスキャンは行いません。
  • コード品質解析は行いません。 セキュリティのみを対象とします。
  • 商用 SAST より多くの問題を検出することは目指していません。 エンジンの深さではなく、信頼性、1 つの成果物における幅広い対応、優先順位付けで勝負します。

プラットフォーム

プラットフォームサポート状況
Linux、Docker および Podmanサポートしています。すべてのコミットで、amd64 上の Docker と Podman、および arm64 上の Docker に対して E2E テストスイートを実行し、公開済みイメージを使ったスキャンも両方で実行します。受け入れテストセットは、GitHub の Linux ランナーで毎晩実行されます
macOS、Docker Desktop または Podmanサポートしています。各フェーズの終了時に、Apple シリコン搭載 Mac 上の Docker Desktop で手動テストを実施します。内容は、受け入れテストセットと、そのコミットからビルドしたイメージに対する E2E テストスイートです(docs/acceptance/)。毎コミットではありません。コンテナーランタイムにはネストされた仮想化が必要ですが、GitHub の macOS ランナーはこれを提供していません
linux/amd64 および linux/arm64両方に対応しています。1 つのイメージインデックスに署名し、それぞれの SBOM を用意しています
WSL2 経由の Windowsサポートしています。WSL 内では valvur は Linux 上で動作します
ネイティブ Windowsサポートを表明していません。テストされておらず、valvur は起動時にその旨を表示します
SELinux 強制モードのホスト(RHEL、Fedora)サポートしています。ソースコードはスキャン領域にコピーされ、マウントされることはないため、その SELinux ラベルは関係ありません。valvur は独自のキャッシュマウントにラベルを付けます

エアギャップ環境ですか? データベース、Name Index とその悪意あるリスト、KEV、EPSS、OSV のデータベースはすべてイメージの外部にあり、それぞれにミラー設定があります。詳しくは docs/AIR-GAPPED.md をご覧ください。

プライバシー

valvur は何も収集しません。アカウント、API キー、テレメトリーは不要で、valvur のいかなる部分もユーザーやコードについて報告しません。結果は .security-scan/ に保存され、このディレクトリ自体は git で無視されます。ホストが取得するのは公開データで、各取得内容は run.json に記録されます。 python3 scripts/verify-offline.py で確認でき、Linux では unshare -rn valvur scan で実証できます (方法)。

ドキュメント

ガイド対象
仕組みオフラインでの実証、各チェック、ランキング
AI コーディングエージェントプラグイン、機能、11 個の MCP クライアント、7 個のツール
コマンドラインコマンド、Results Folder、設定
CIゲート、GitHub Action、パイプライン内のイメージ
valvur の評価監査:スコア、ゲート、制限事項
ルール各静的解析ルールの測定済み精度
エアギャップ環境での使用すべてのデータソースのミラー
すべてのドキュメントプロトコル、判断事項、リリース、記録

コミュニティとサポート

  • 質問やアイデア: Discussions。
  • バグ、および valvur が見逃した問題: https://github.com/MaverickHQ/valvur/issues。`valvur doctor --bundleが作成する tarball を添付してください。含まれるのはバージョン情報と最後のrun.json` のみで、ソースコード、生の出力、検出結果は含まれません。
  • セキュリティ: valvur の脆弱性が疑われる場合は、誤った clean の判定も含め、SECURITY.md に従って非公開で報告してください。
  • 貢献: CONTRIBUTING.md にセットアップ方法と、原則として受け付けない項目の簡単な一覧があります。MAINTAINERS.md には、現在は 1 人である valvur のメンテナーと、保証できる内容が記載されています。有料プランもサポート契約もありません。

ライセンス

Apache-2.0 です。LICENSE をご覧ください。明示的な特許ライセンス条項があるため、MIT ではなく Apache-2.0 を選択しました。 同梱されるスキャナーにはそれぞれ独自のライセンスがあり、上記および NOTICE に記載されています。valvur に GPL または AGPL のコンポーネントは追加されていません。Alpine のベースには、すべての Linux コンテナーと同様に GPL のユーザーランドが含まれており、公開済み SBOM ですべて開示しています (ADR-0005)。

コメント

MCP は初めてですか?

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

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