valvur について
valvurは、7種類のオープンソーススキャナーとAI生成コード向けチェックを組み合わせ、ローカルでセキュリティスキャンを行い、優先度付きの結果を出力します。開発者やコーディングエージェント向けです。ネットワーク接続のないコンテナーでソースのコピーを検査し、修正案は示しますがコードは変更しません。
主な機能
- 017種類のオープンソーススキャナーを統合
- 02依存関係、シークレット、コード、インフラを検査
- 03エージェント設定のリスクと架空パッケージを検出
- 04悪用リスクに基づいて検出結果を統合・順位付け
- 05SARIF、JSON、修正案を出力
- 06ソースを変更せずオフラインでスキャン
活用シーン
- 01AI生成コードのセキュリティ問題をスキャン
- 02インストール前にパッケージの実在性や悪意を確認
- 03エージェント設定の指示注入や認証情報リスクを確認
- 04CIでセキュリティゲートを実行しSARIFをアップロード
MCP 対応
MCPクライアント向けにセキュリティスキャンツールを提供するMCPサーバーです。`uvx --from valvur valvur-mcp`で起動できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
7掲載時のツール一覧 · 2 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| fresh | boolean | いいえ | すべての Scanner を実行します。デフォルトでは、依存関係ファイルも各 Scanner のデータも変更されていない場合、Trivy と OSV-Scanner の前回の結果を再利用します。新しい結果が既存の結果を置き換えます。 |
| profile | enum | いいえ | offline(デフォルト)では、ネットワークにアクセスせずにすべての Scanner を実行します。full では、ローカルデータで回答できない情報をネットワークに問い合わせます。オフラインデータベースの代わりに OSV.dev を使用し、各パッケージの登録サイトで使用年数と採用状況を調べ、JVM および Go の依存関係の有無を確認します。送信されるのはパッケージ名とバージョンのみで、ソースは送信されません。offline | full |
| budget_s | integer | いいえ | Scanner 全体に許可する実行時間(秒、デフォルトは 300)。時間を超えると新しい処理は開始されず、実行中の処理は停止し、中断された Scanner を明記して結果を未完了として報告します。0 は無制限です。 |
| workspace | string | いいえ | スキャンするプロジェクトの絶対パス。デフォルトは現在のディレクトリです。 |
詳細
AI 生成コードをオフラインでセキュリティスキャン。
7 つのオープンソーススキャナーと AI 固有のチェックを、1 つのコマンドで実行し、優先順位付きのレポートにまとめます。
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 を選ぶ理由
- 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 SBOM | valvur の licence-file Check、Syft |
ルールごとのチェック内容と検出できない内容については、valvur の仕組みをご覧ください。
仕組み
- 小さなホストシムが、スキャン対象(git が公開するファイルに加え、
.env*ファイルとエージェント設定)を決定し、必要な公開データを取得して、 取得内容を記録します。 - ネットワークインターフェースを持たない 1 つのスキャンコンテナーが、 標準入力で渡されたファイルのコピーを対象に、すべてのスキャナーを実行します。 コンテナー内の何ものもソースを変更できません。
- 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-python | Python 用 OWASP Benchmark | 40.9 |
| sast-js | valvur の JavaScript 版ツイン:10 個の弱点について、脆弱な例と修正済みの例 | 55.0 |
| secrets | ファイルと履歴に含まれる 10 種類の形式 | 100.0 |
| dependencies | 脆弱なバージョンに固定されたロックファイル、既知の悪意あるパッケージ | 100.0 |
| package-reality | 存在しない名前、類似した名前、悪意のある名前 | 100.0 |
| agent-configuration | 実際のファイルに埋め込まれた指示と隠し Unicode | 94.3 |
| infrastructure | Terraform、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/ には各スキャナーの出力が保存されます。
| スキャナー | ライセンス | 読み取る内容 | 実行条件 |
|---|---|---|---|
| Gitleaks | MIT | スキャン対象のファイルおよび Git 履歴内のシークレット。最新の 5,000 コミットまたは 200 MB まで | 常に |
| Trivy | Apache-2.0 | ロックファイル内の依存関係にある既知の脆弱性。ホストのキャッシュ内にあるデータベースと照合 | 常に |
| OSV-Scanner | Apache-2.0 | OSV のデータを使ってロックファイルを照合します。このデータには、ここにある他のどのツールも報告しない、既知の悪意ある MAL- パッケージが含まれています。offline では、存在する各エコシステム用の OSV オフラインデータベースをホストのキャッシュに取得して使用します。full では、ロックファイルの名前とバージョンを送信する OSV.dev の API を使用します | 常に |
| Opengrep | LGPL-2.1 | 静的解析:ピン留めルール、INFO レベルのシンク一覧、モデル呼び出しからシンクへの汚染ルール、およびリクエストデータに基づく汚染ルール | 常に |
| Checkov | Apache-2.0 | インフラストラクチャの設定ミス:Terraform、CloudFormation、Kubernetes、Dockerfile、その他の CI システム | GitHub ワークフロー以外のインフラストラクチャがある場合 |
| zizmor | MIT | GitHub Actions のワークフロー:ピン留めされていないアクション、書き込み権限、テンプレートインジェクション | ワークフローがある場合 |
| Syft | Apache-2.0 | SBOM、およびそこから読み取る依存関係のライセンス | 要求された場合: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)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。