報告された脆弱性が、特定のソースツリー内で実際に到達可能かどうかを判断するコマンド1つ。
CVEの説明、あるいは脆弱性スキャンレポート全体を渡すと、コードに対してLLM駆動の到達可能性分析を実行し、構造化された判定、Markdownレポート、そしてGitHubコードスキャンが読み取るSARIFを出力します。
コストを抑えるため、エージェントはリポジトリをモデルのコンテキストに読み込みません。 代わりにツールセットを通じて動作します。構造的なコードナビゲーションにはast-grep、アドバイザリと修正コミットを取得するためのOSV.dev検索とページレンダリング、そして影響を受けるコンポーネントがvendoredではなくビルドされる場合に、固定された上流バージョンをサンドボックスに取り込むための依存関係フェッチです。
このアクションは、ワークフローに組み込まれたGITHUB_TOKENを通じてGitHub Copilot上で実行されます。copilot-requests: writeを付与すれば、他に何も準備する必要はありません。OWASP Xpsdの利用料金は、他のCopilotの支出と同様に組織に請求されます。
permissions:
contents: read
security-events: write
copilot-requests: write # the built-in token authenticates Copilot
独自のモデルを持ち込みたい場合は、provider-type と api-key を指定することで、他の設定を変更することなく実行を Anthropic、OpenAI、または Azure に切り替えられます。
name: reachability
on:
workflow_dispatch:
schedule:
- cron: "0 6 * * 1"
permissions:
contents: read
security-events: write
copilot-requests: write
jobs:
reachability:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: anchore/sbom-action@v0
with: {format: cyclonedx-json, output-file: sbom.cdx.json, upload-artifact: false}
- uses: anchore/scan-action@v6
with: {sbom: sbom.cdx.json, output-format: json, output-file: scan.json, fail-build: false}
- uses: byteray-ai/xpsd@v1
id: xpsd
with:
scan-file: scan.json
model: gpt-5.3-codex
min-severity: high
max-findings: "10" # cap the analyzed findings, highest severity first
# min-cvss: "7.0" # numeric floor instead of the severity band
# is-remote: "true" # only findings shown to be network-reachable (AV:N)
# is-exploited: "true" # only findings CVSS-BT lists as exploited
# max-cycles: "30" # tool-call budget per finding
# max-tokens: "150000" # token budget per finding; first ceiling hit wins
# fail-on: reachable # fail the step when something is reachable
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: ${{ steps.xpsd.outputs.sarif-file }}
category: xpsd-reachability
スキャナーは、すでに運用しているものに差し替えてください。OWASP Xpsd はレポート形式を自動検出します:
| 生成元 | 形式 |
|---|---|
| Grype | grype -o json、または SARIF |
| Trivy | trivy -f json、または SARIF |
| OSV-Scanner | --format json |
| Snyk | snyk test --json、単一または --all-projects |
| 任意の SARIF 生成元 | SARIF 2.1.0 |
| 判定 | アラート | 重大度 |
|---|---|---|
| 到達可能(信頼度: 中/高) | error | CVSS に基づく |
| 到達可能(信頼度: 低)、不確定、解析失敗 | warning、手動レビューが必要 | CVSS に基づく |
| 到達不能 | note、情報提供 | low に引き下げ |
除外された検出結果は、CVSS 評価を維持するのではなく low として記録されます。スコアは脆弱性そのものを表すものであり、あなたのコードに対するリスクを表すものではないからです。到達不能な critical は、到達可能な critical を埋もれさせてしまいます。実際のスコアは、根拠と証拠とともにアラート内に残ります。
各アラートには、モデルの判断理由、エントリーポイントから脆弱な使用箇所までのコールパス、および該当するソース行への証拠リンクが含まれます。再実行すると同じアラートがその場で更新され、後のアップロードで消えた検出結果は自動的にクローズされます。
コストは検出結果ごとにかかり、それぞれ 1 回のエージェントセッションを消費するため、実行を小さく保つにはフィルタリングが重要です: min-severity、min-cvss、max-findings、only で対象を選択し、is-remote はネットワーク到達可能(CVSS AV:N)であることが示された検出結果のみを、is-exploited は CVSS-BT データセットが悪用済みと記載している検出結果のみを保持します。どちらも肯定的な証拠を必要とするため、確認できない検出結果は除外されます。fail-on を使うと、到達可能という判定をステップ失敗に変換し、ビルドをゲートできます。
到達可能性は、実際に何がコンパイルされるか、何がネットワークに公開されるかといった、コードに含まれない事実にも依存します。guidance 入力は、それらの事実を解析のためのグラウンドトゥルースとして渡します。
バグ報告とプルリクエストを歓迎します。CONTRIBUTING.md を参照してください。脆弱性は SECURITY.md に記載された方法で非公開で報告してください。同ドキュメントには脅威モデルと既知の制限事項も記載されています。
Apache License 2.0、LICENSE を参照してください。Copyright 2026 ByteRay Ltd.