
취약점 스캔을 위한 도달 가능성 분류. 스캐너 결과를 LLM 에이전트에 전달하여 소스를 읽고 실제로 도달 가능한 CVE를 판별합니다.
보고된 취약점이 특정 소스 트리에서 실제로 도달 가능한지 여부를 단 하나의 명령으로 판별합니다.
CVE 설명 또는 전체 취약점 스캔 보고서를 입력하면, 코드에 대해 LLM 기반 도달 가능성 분석을 실행한 뒤 구조화된 판정, 마크다운 보고서, 그리고 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은 도달 가능한 항목을 묻어버립니다. 실제 점수는 근거와 추론 내용과 함께 경고에 그대로 남습니다.
각 경고에는 모델의 근거, 진입점에서 취약한 사용 지점까지의 호출 경로, 관련 소스 라인으로의 증거 링크가 포함됩니다. 재실행 시 동일한 경고가 제자리에서 갱신되며, 이후 업로드에서 사라진 발견 항목은 자동으로 닫힙니다.
비용은 발견 항목당, 즉 각각 하나의 에이전트 세션 기준이므로, 실행 규모를 작게 유지하려면 필터링을 사용하십시오: 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.