
भेद्यता स्कैन के लिए रीचेबिलिटी ट्रायाज। स्कैनर निष्कर्षों को एक LLM एजेंट को भेजता है जो आपके सोर्स कोड को पढ़ता है और तय करता है कि कौन से CVE वास्तव में रीचेबल हैं।
एक ही कमांड जो यह तय करती है कि किसी रिपोर्ट की गई भेद्यता किसी दिए गए सोर्स ट्री में वास्तव में पहुँच योग्य (reachable) है या नहीं।
इसे कोई CVE विवरण, या पूरी भेद्यता स्कैन रिपोर्ट दें, और यह आपके कोड पर LLM-संचालित reachability विश्लेषण चलाता है, फिर संरचित निर्णय (verdicts), markdown रिपोर्ट, और SARIF लिखता है जिसे GitHub code scanning पढ़ता है।
लागत कम रखने के लिए, एजेंट आपके रिपॉज़िटरी को मॉडल के context में नहीं पढ़ता। यह इसके बजाय एक टूलसेट के माध्यम से काम करता है: संरचनात्मक कोड नेविगेशन के लिए ast-grep, advisory और फिक्सिंग कमिट निकालने के लिए OSV.dev लुकअप और पेज रेंडरिंग; और जब प्रभावित कंपोनेंट vendored होने के बजाय बिल्ड किया जाता है, तो sandbox में एक pinned upstream संस्करण लाने के लिए dependency fetching।
यह action वर्कफ़्लो के अंतर्निहित 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, सूचनात्मक | निम्न तक घटाया गया |
बाहर किए गए निष्कर्ष को उसकी CVSS रेटिंग बनाए रखने के बजाय निम्न के रूप में दर्ज किया जाता है, क्योंकि स्कोर भेद्यता का वर्णन करता है, न कि आपके कोड के लिए उससे उत्पन्न जोखिम का। जिस तक कुछ भी नहीं पहुँच सकता, वही उसे दबा देता है जिस तक पहुँचा जा सकता है। वास्तविक स्कोर अलर्ट में बना रहता है, साथ ही तर्क और साक्ष्य भी।
प्रत्येक अलर्ट में मॉडल का तर्क, प्रवेश बिंदु से भेद्य उपयोग तक का कॉल पथ, और संबंधित स्रोत पंक्तियों में साक्ष्य लिंक होते हैं। पुनः-रन उन्हीं अलर्ट को यथास्थान ताज़ा करते हैं, और बाद के अपलोड से गायब होने वाले निष्कर्ष स्वतः बंद हो जाते हैं।
लागत प्रति निष्कर्ष है, प्रत्येक के लिए एक एजेंटिक सत्र, इसलिए फ़िल्टरिंग ही आपके रन को छोटा रखने का तरीका है: 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। कॉपीराइट 2026 ByteRay Ltd.