
ship-safe v9.7.5
AIが書いたソフトウェアのための独立したセキュリティエージェント。問題を発見し、それが実在するかどうかを調査し、証拠を提示します。決定論的なコア、APIキー不要、JSONおよびSARIF出力。
AIが書いたソフトウェアのための独立したセキュリティエージェント。問題を発見し、それが実在するかどうかを調査し、証拠を提示します。
ウェブサイト · ドキュメント · セキュリティとデータフロー · ベンチマーク · 料金 · ブログ · コントリビュート
Ship Safe CLI
Ship Safe はリポジトリ内でローカルに動作し、2つのレイヤーで機能します。
決定論的エンジンは、アプリケーションコード、AIエージェント、MCP設定、プロンプト、依存関係、CI/CD、シークレット、クラウド関連の設定にわたって問題を検出します。高速で再現可能、かつベンチマーク済み — これがセンサーレイヤーです。
次に調査レイヤーが、検出結果にどれだけの価値があるかを判断します。シンクに到達する値を追跡し、ルールが欠落していると指摘する制御をプロジェクト内で検索し、単一のファイルには含まれない設定をまたいで攻撃チェーンを構築し、そして — あなたが指示したときには — 漏洩したキーをそのプロバイダーに対して検証します。すべての結論には、そこに至ったパスと読み取った行が付随します:
CONFIRMED — traced end to end (10)
NoSQL Injection via $where [high]
app/data/allocations-dao.js:78 NOSQL_INJECTION_WHERE
why: threshold is assigned from the HTTP request and reaches the sink without validation on that path.
decided by: dataflow
1. value reaches NOSQL_INJECTION_WHERE here app/data/allocations-dao.js:78
2. getByUserIdAndThreshold is called here with threshold app/routes/allocations.js:23
3. threshold is assigned here app/routes/allocations.js:20
fix: Replace $where with standard MongoDB operators ($eq, $gt, $regex, etc.)
OWASP NodeGoat に対する ship-safe investigate の実際の出力。汚染された値はルートファイルで分割代入され、3 ディレクトリ離れた DAO に渡されます。
まずは 1 つのコマンドから始めます:
npx ship-safe
サインアップ不要。スキャンにAPIキーは必要ありません。コアチェックはオフラインで動作します。AIを活用したレッドチームモードは、利用可能な場合に設定済みのプロバイダーを使用します。
完全にローカルなスキャンを保証するには --no-ai を使用してください。プロバイダーを利用した分類、詳細分析、GPT-Redは、ベストエフォートの認証情報マスキング後に、選択したプロバイダーへ直接、範囲を限定したコンテキストを送信します。正確な境界とコンテキスト制限については Security & Data Flow を参照してください。
クイックスタート
# Interactive REPL: scan, fix, and ask questions in one session
npx ship-safe
# Full audit: secrets + 30 agents + deps + remediation plan
npx ship-safe audit .
# Investigate: confirmed / likely / unresolved / refuted, with the evidence
npx ship-safe investigate .
npx ship-safe investigate . --all # also detail unresolved and refuted
npx ship-safe investigate . --verify # probe leaked keys against their providers
# Before you open an unfamiliar folder with an agent: what runs on open?
npx ship-safe trust ~/Downloads/take-home
npx ship-safe trust . --json
# What can an AI agent working in this repo actually reach?
npx ship-safe capabilities .
# AI agent red-team scenarios for agent-readable content
npx ship-safe red-team . --gpt-red
# Interactive fix agent: plan, diff, approve, verify the path closed
npx ship-safe agent .
npx ship-safe agent . --severity critical # critical findings only
npx ship-safe agent . --branch --pr # fix on a branch + open a PR
# Undo the last fix
npx ship-safe undo
# CI/CD mode — fails on any critical finding
npx ship-safe ci . --sarif results.sarif
npx ship-safe ci . --fail-on high # stricter: critical or high
# Gate on evidence instead of severity: block only what was established
npx ship-safe ci . --fail-on-verdict confirmed
npx ship-safe ci . --ignore-refuted # do not block on what was argued away
プルリクエストでは、信頼できるベーススキャンとヘッドスキャンを比較することで、既存のリポジトリの負債を可視化したまま、無関係な変更をブロックしないようにします:
# On the trusted base revision
npx ship-safe ci . --fail-on none --no-deps \
--write-baseline-report /tmp/ship-safe-base.json
# On the pull request head
npx ship-safe ci . --base-report /tmp/ship-safe-base.json --fail-on high
ベース成果物には、ハッシュ化された検出識別子、相対パス、およびルール メタデータが含まれます。生のマッチしたシークレットは保存されません。PRの結果は検出を 導入済み、解決済み、未変更、または不確実として分類します。曖昧なマッチは表示されます が、プルリクエストをブロックしません。
Ship Safe が見つけるもの
| 領域 | 例 |
|---|---|
| AIおよびLLMセキュリティ | プロンプトインジェクション、エージェントハイジャック、過剰な権限、メモリポイズニング、RAGポイズニング、安全でないツール呼び出し |
| MCPおよびエージェント設定 | 過度に広範なツール権限、汚染されたレジストリ、信頼できないトランスポート、危険な許可リスト |
| アプリケーションセキュリティ | SQL/NoSQLインジェクション、XSS、SSRF、認証バイパス、パストラバーサル、安全でないAPIルート |
| シークレットとコンプライアンス | APIキー、トークン、認証情報、PII、git履歴に漏洩したシークレット |
| サプライチェーン | タイポスクワッティング、依存関係の混同、危険なインストールスクリプト、固定されていないAIアクション |
| CI/CD | パイプライン汚染、固定されていないGitHub Actions、シークレットのログ出力、安全でないワークフロートリガー |
仕組み
- ローカルでスキャン - Ship Safeは対象を絞ったエージェントでリポジトリを検査し、該当しないチェックはスキップします。
- 各検出を調査 - 別々のパスがそれが本物かどうかを判断し、安価なものが高価なものを覆すことがないように順位付けされます。トレースされたデータパスは同じファイルに対するモデルの読み取りより上位に、認証に成功したプローブはその両方より上位になります。
- 証拠を読む - 検出は確認済み、可能性あり、未解決、または反証済みに解決され、それぞれが結論の根拠となった行を引用するため、重大度ラベルではなくステップに対して異議を唱えることができます。
- 制御しながら修正 - エージェントは計画と差分を提案し、書き込む前に確認し、結果を検証し、変更を可逆に保ちます。
- CIでゲート -
ship-safe ciを使用してリスクの高いビルドを失敗させ、SARIFをGitHubコードスキャンにアップロードします。
「コーディングエージェントにリポジトリをレビューさせるだけではだめなのか?」
できますし、そうすべきです。実際の問題を見つけるでしょう。しかし、それ自身の作業について構造的に答えられない3つの問いがあります。
このコードを書いたエージェントは自分の宿題を自分で採点しただけではないか? 作者に作者が間違いを犯したかどうかを尋ねることはレビューではありません。Ship Safeは別の手法を持つ別のレビュアーであり、公然と自己矛盾します — データフローのトレースはヒューリスティックパスを覆し、ライブプローブはその両方を覆します。
到達できるものを見ることができるか? リポジトリをレビューするコーディングエージェントは、MCPサーバー設定を読むことができず、起動時に与えられた権限を列挙することもできず、その到達範囲が問題となっている当事者そのものです。ship-safe capabilities はそれをすべて外部から読み取り、単独では目立たないが組み合わさると危険な組み合わせを報告します:
CRITICAL Repository-controlled instructions reach an unattended write capability
1. CLAUDE.md is read as instructions and can be changed by anyone who lands a commit
CLAUDE.md:1
2. Claude Code runs without per-action approval
.claude/settings.json:2
3. shell execute granted: Bash(git push:*)
.claude/settings.json:3
4. filesystem write granted: Write
.claude/settings.json:3
5. mcp-tool write granted: mcp__github__create_pull_request
.claude/settings.json:3
Impact: Text committed to this repository can direct the agent to write files
or run commands with no human in the loop.
Boundary: Require approval for write and execute tools during sessions on
untrusted branches, or remove the pre-granted entries.
それぞれの行は単独では目立たない。しかし、それらが合わさるとプルリクエストから特権書き込みへの経路となり、単一ファイルのレビューではそれを見ることはできない。なぜなら、どの単一ファイルにもその経路は含まれていないからだ。