
AIが書いたソフトウェアのための独立したセキュリティエージェント。問題を発見し、それが実在するかどうかを調査し、証拠を提示します。決定論的なコア、APIキー不要、JSONおよびSARIF出力。
AI が書いたソフトウェアのための独立したセキュリティエージェント。問題を発見し、それが実在するかどうかを調査し、その証拠を提示します。
ウェブサイト · ドキュメント · セキュリティとデータフロー · ベンチマーク · 料金 · ブログ · コントリビュート
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は、ベストエフォートの認証情報マスキング後に、選択したプロバイダーへ直接、限定的なコンテキストを送信します。正確な境界とコンテキスト制限についてはセキュリティとデータフローを参照してください。
22.x系のNode.js 22.13以降、またはNode.js 24以降が必要です。Node 18および20は、現在の開発バージョンではサポートされなくなりました。
# Interactive REPL: scan, fix, and ask questions in one session
npx ship-safe
# Full audit: secrets + 31 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, inspect the static rescan
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の結果は検出結果を導入済み、解決済み、未変更、または不確定として分類します。曖昧なマッチは表示されますが、プルリクエストをブロックしません。
scan --json、audit --json、および ci --json には schemaVersion: 1、Ship Safe のバージョン、および UTC の generatedAt タイムスタンプが含まれます。検出結果のパスはデフォルトでプロジェクト相対となっており、ローカルディレクトリ名を漏らすことなくワークステーションと CI の間でレポートを移動できます。コンシューマが明示的にホストパスを必要とする場合にのみ --absolute-paths を使用してください。SARIF レポートはツールメタデータに同じパッケージバージョンを含みます。
| 領域 | 例 |
|---|---|
| AI および LLM セキュリティ | プロンプトインジェクション、エージェントハイジャック、過剰な権限、メモリポイズニング、RAG ポイズニング、安全でないツール呼び出し |
| MCP およびエージェント設定 | 過度に広範なツール権限、汚染されたレジストリ、信頼できないトランスポート、危険な許可リスト |
| アプリケーションセキュリティ | SQL/NoSQL インジェクション、XSS、SSRF、認証バイパス、パストラバーサル、安全でない API ルート |
| シークレットおよびコンプライアンス | API キー、トークン、認証情報、PII、git 履歴に漏洩したシークレット |
| サプライチェーン | タイポスクワッティング、依存関係の混同、危険なインストールスクリプト、固定されていない AI アクション |
| CI/CD | パイプラインのポイズニング、固定されていない GitHub Actions、シークレットのログ出力、安全でないワークフロートリガー |
ship-safe ci を使用してリスクのあるビルドを失敗させ、SARIF を GitHub コードスキャンにアップロードします。
できますし、そうすべきです。実際の問題を見つけるでしょう。しかし、自分の作業について構造的に答えられない3つの問いがあります。
このコードを書いたエージェントは自分の宿題を自分で採点しただけではないか? 作者に作者がミスをしたかどうかを尋ねることはレビューではありません。Ship Safe は別の手法を持つ別のレビュアーであり、公の場で自分自身と意見を戦わせます。データフローのトレースはヒューリスティックパスを覆し、ライブプローブはその両方を覆します。
到達できるものを見ることができるか? リポジトリをレビューするコーディングエージェントは、MCP サーバー設定を読むことができず、起動時に付与された権限を列挙することもできず、まさにその到達範囲が問われている当事者です。ship-safe capabilities はそれらすべてを外部から読み取り、単独では目立たないが組み合わさると危険な組み合わせを報告します: