
Erreichbarkeits-Triage für Schwachstellen-Scans. Speist Scanner-Funde in einen LLM-Agenten ein, der Ihren Quellcode liest und entscheidet, welche CVEs tatsächlich erreichbar sind.
Ein einziger Befehl, der entscheidet, ob eine gemeldete Schwachstelle in einem gegebenen Quellbaum tatsächlich erreichbar ist.
Übergeben Sie ihm eine CVE-Beschreibung oder einen vollständigen Schwachstellen-Scanbericht, und es führt eine LLM-gesteuerte Erreichbarkeitsanalyse über Ihren Code aus und schreibt anschließend strukturierte Urteile, Markdown-Berichte und SARIF, das von der GitHub-Codesuche gelesen wird.
Um die Kosten niedrig zu halten, liest der Agent Ihr Repository nicht in den Kontext des Modells ein. Stattdessen arbeitet er über ein Toolset: ast-grep für strukturelle Code-Navigation, OSV.dev-Abfragen und Seiten-Rendering, um die Advisory und den Fix-Commit abzurufen; und Dependency-Fetching, um eine festgelegte Upstream-Version in die Sandbox zu holen, wenn die betroffene Komponente gebaut statt eingebunden wird.
Die Action läuft auf GitHub Copilot über das im Workflow integrierte
GITHUB_TOKEN. Gewähren Sie copilot-requests: write, und es ist nichts weiter
zu veranlassen. Die Nutzung von OWASP Xpsd wird der Organisation zusammen mit
Ihren übrigen Copilot-Ausgaben in Rechnung gestellt.
permissions:
contents: read
security-events: write
copilot-requests: write # the built-in token authenticates Copilot
Wenn Sie lieber Ihr eigenes Modell verwenden möchten, wechseln provider-type und api-key den Lauf zu Anthropic, OpenAI oder Azure, ohne dass sonst etwas geändert werden muss.
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
Tauschen Sie den Scanner gegen den aus, den Sie bereits verwenden. OWASP Xpsd erkennt das Berichtsformat automatisch:
| Erzeuger | Format |
|---|---|
| Grype | grype -o json, oder SARIF |
| Trivy | trivy -f json, oder SARIF |
| OSV-Scanner | --format json |
| Snyk | snyk test --json, einzeln oder --all-projects |
| jeder SARIF-Erzeuger | SARIF 2.1.0 |
| Urteil | Warnung | Schweregrad |
|---|---|---|
| erreichbar (mittlere/hohe Konfidenz) | Fehler | aus CVSS |
| erreichbar (niedrige Konfidenz), unsicher, Analyse fehlgeschlagen | Warnung, manuelle Prüfung erforderlich | aus CVSS |
| nicht erreichbar | Hinweis, informativ | auf niedrig herabgestuft |
Ein ausgeschlossener Befund wird als niedrig eingestuft, anstatt seine CVSS-Bewertung zu behalten, denn der Score beschreibt die Schwachstelle und nicht das Risiko, das sie für Ihren Code darstellt. Eine kritische Schwachstelle, die nichts erreichen kann, verschüttet diejenige, die es kann. Der tatsächliche Score bleibt in der Warnung erhalten, zusammen mit der Begründung und den Belegen.
Jede Warnung enthält die Begründung des Modells, den Aufrufpfad vom Einstiegspunkt bis zur verwundbaren Verwendung und Beleglinks zu den betroffenen Quellzeilen. Erneute Läufe aktualisieren dieselben Warnungen an Ort und Stelle, und Befunde, die aus einem späteren Upload verschwinden, werden automatisch geschlossen.
Die Kosten fallen pro Befund an, jeweils eine agentische Sitzung, daher ist Filtern der Weg, einen Lauf klein zu halten: min-severity, min-cvss, max-findings und only wählen aus, was betrachtet wird, während is-remote nur Befunde behält, die nachweislich über das Netzwerk erreichbar sind (CVSS AV:N), und is-exploited nur diejenigen behält, die der CVSS-BT-Datensatz als ausgenutzt auflistet. Beide benötigen positive Belege, sodass ein Befund, den sie nicht bestätigen können, verworfen wird. fail-on verwandelt ein erreichbares Urteil in einen fehlgeschlagenen Schritt, wenn Sie den Build mit einem Gate versehen möchten.
Die Erreichbarkeit hängt auch von Fakten ab, die nicht im Code stehen, etwa davon, was tatsächlich kompiliert wird oder was einem Netzwerk ausgesetzt ist. Die Eingabe guidance übergibt diese als Grundwahrheit für die Analyse.
Fehlerberichte und Pull Requests sind willkommen; siehe CONTRIBUTING.md. Melden Sie Schwachstellen vertraulich wie in SECURITY.md beschrieben, das auch das Bedrohungsmodell und bekannte Einschränkungen dokumentiert.
Apache License 2.0, siehe LICENSE. Copyright 2026 ByteRay Ltd.