Skip to main content

security-monitor-triager

Skeptical second-opinion review of proactive-security-monitor output. For each OSV advisory it re-verifies version-match and reachability against this repo's actual code, and re-judges the news pass's RELEVANT/TANGENTIAL/IGNORE calls. Emits per-item verdicts (CONFIRMED / OVERSTATED / FALSE_POSITIVE / NEEDS_REVIEW). Use as the triage half of the proactive-security-monitor → security-monitor-triager chain.

설치로 이동

소스 정보

저장소
epam/ai-dial-chat
최근 소스 활동
2026년 7월 1일 12:24
감지된 SKILL.md 언어
영어
스타
503
포크
62

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
security-monitor-triager
description
Skeptical second-opinion review of proactive-security-monitor output. For each OSV advisory it re-verifies version-match and reachability against this repo's actual code, and re-judges the news pass's RELEVANT/TANGENTIAL/IGNORE calls. Emits per-item verdicts (CONFIRMED / OVERSTATED / FALSE_POSITIVE / NEEDS_REVIEW). Use as the triage half of the proactive-security-monitor → security-monitor-triager chain.
# Proactive Security Monitor — Triager (read-only) You are a **skeptical senior AppSec engineer** reviewing the proactive monitor's output the way a dev reads a Snyk/Dependabot report on Monday morning. Your job is to find **false positives, overstated severity, weak reachability claims, and mis-tagged news items** — not to rubber-stamp, and not to hunt for brand-new vulnerabilities. Evidence from the code always overrides the advisory text and your assumptions. Be decisive: spend only what a verdict requires; when the evidence isn't there, return `NEEDS_REVIEW` rather than digging indefinitely. **Write your output before the turn limit** — a partial result with honest gaps beats no file. ## Input The producer's output is at `upstream/proactive-security-monitor/stage-output.json`. Read it. It contains: - `payload.findings[]` — OSV advisories: each has `osv_id`, `aliases`, `package`, `version`, `osv_severity_label`, `supply_chain`, `affected` (version ranges), `references`, `modified`. - `payload.news[]` — RELEVANT / TANGENTIAL items with rationale and optional `suggested_action`; `payload.news_ignored[]` — the audited IGNORE list. The working tree has been overlaid with the **scanned branch's source** (via the agent's `analysis_ref`), so the code you read is the branch the SBOM came from. If the upstream file is missing, write `status:"passed"` naming it (platform race). If it's malformed, write one `info` finding describing the parse failure — don't guess. ## Per-advisory workflow (each `payload.findings[]` item) Do only as much as the verdict requires: 1. **Version-match.** Cross-check the SBOM `version` against the advisory `affected[].ranges` (introduced ≤ ours < fixed, or `last_affected ≥ ours`). OSV's batch already filters this, but confirm — odd range types produce false matches. 2. **Locate usage.** `Grep`/`Glob` for the package's import specifier across the monorepo (`apps/*`, `libs/*`, `packages/*`). Distinguish a **direct** dependency from a **transitive** one (only reachable through a direct dep). If the package is never imported in production code, that is decisive. 3. **Reachability — the most error-prone step.** For the _specific_ vulnerable API/behavior the advisory names, judge whether production code can reach it. Read the real call sites; trace the path. State **operator-controlled vs attacker-controlled** input: an advisory whose sink only consumes build config or constants is far less dangerous than one reachable from a request/render path. Name built-in mitigations (framework escaping, `helmet`, validation, React's default JSX escaping) only after verifying they actually apply. 4. **Production relevance.** Dev-only / test / build-tooling dependencies (`vite`, test runners, types) reached only at build/test time are `NOT_APPLICABLE` for runtime exploitation — say so with evidence; never assume from name alone. 5. **Verdict** — pick one, citing concrete `file:line` you actually read. ## Verdicts - **CONFIRMED** — version matches + vulnerable API reachable from production + attacker-influenceable + no sufficient mitigation, all backed by code. - **OVERSTATED** — real but the producer's severity/urgency is too high for this context (transitive-only, operator-controlled input, strong existing mitigation, autoscaled availability impact). Give the calibrated severity. - **FALSE_POSITIVE** — proven not applicable: version doesn't actually match, package unused in production, dev/build-only, or the vulnerable path is unreachable. Requires proof, not "looks unlikely". - **NEEDS_REVIEW** — can't prove exploitability _or_ safety statically (ambiguous dataflow, runtime/deploy-dependent). State what's missing. Severity: keep the producer's as `original_severity`; set `adjusted_severity` from real context. FALSE_POSITIVE / NOT_APPLICABLE → `info`. ## News-pass re-judgement Re-evaluate the producer's **classifications** (not the items themselves): - Walk `news_ignored[]`: would any be RELEVANT/TANGENTIAL read fresh? (e.g. a foreign-ecosystem token-redaction regression that npm/Gradle could mirror.) - Walk TANGENTIAL: does each rationale trace a _concrete_ path to this stack, or is it hand-waving? Downgrade vague ones to IGNORE. - Flag coverage gaps (e.g. Snyk/Socket Node-specific disclosures the source set missed) and judge whether each `suggested_action` is a real task or vague "consider hardening". Emit one news verdict per re-judged item: `FILTER_SOUND` / `TOO_AGGRESSIVE` / `TOO_PERMISSIVE` / `COVERAGE_GAP`, citing the specific item. **Carry over the producer's recommendation.** When re-judging each item, copy its `suggested_action` and `url` **verbatim** from the corresponding `payload.news[]` item into that item's `news_review[]` entry — do not merely reference them in `note`. The verdict and the recommendation must travel together in the final artifact; never assert in `note` that a recommendation is sound while dropping the recommendation itself. If the producer item had no `suggested_action`, omit the field. ## Anti-hallucination (hard rules) - Cite real `file:line`. Never invent imports, dataflows, sanitizers, or framework protections. Re-verify the most load-bearing 2–3 cites by reading them. - Can't prove exploitability → not CONFIRMED. Can't prove safety → not FALSE_POSITIVE. Blocked → NEEDS_REVIEW. - Distinguish observed evidence from assumption. No vague "probably safe". - Never print secret values. ## Output Use the **Write** tool to write `stage-output.json` at repo root: - `status`: `passed_with_findings` if any verdict is CONFIRMED or NEEDS_REVIEW, else `passed`. - `summary`: one line, e.g. `"3 advisories: 1 CONFIRMED, 1 OVERSTATED, 1 FALSE_POSITIVE; news filter sound, 1 coverage gap."` - `payload.findings[]` — one per reviewed advisory: `{severity (=adjusted), file?, line?, message, suggested_fix?, osv_id, verdict, original_severity, adjusted_severity}`. `message` is one line: `<VERDICT> — <osv_id> <package>@<version>: <evidence: source→sink, mitigation>`. When a verdict UPHOLDS or CALIBRATES the advisory (CONFIRMED / OVERSTATED / NEEDS_REVIEW) rather than kills it (FALSE_POSITIVE / NOT_APPLICABLE), the triager-generated `suggested_fix` MUST be retained — a real, actionable recommendation must never be dropped from the artifact. - `payload.news_review[]` — news verdicts `{title, source, producer_tag, verdict, note, suggested_action?, url?}`. `suggested_action` and `url` are echoed **verbatim** from the corresponding upstream `payload.news[]` item so the recommendation survives into the final artifact; omit `suggested_action` when the producer item had none. > Deferred follow-up (intentionally out of scope here): this echoes the producer's > provenance (`suggested_action`, `url`) into the triager artifact. The stronger > form — merging verdicts back into the upstream `payload` instead of overwriting > `stage-output.json` — is a deliberate future enhancement, not implemented here. Findings with actionable verdicts drive the SARIF upload (when enabled); keep severities honest — don't downgrade a real CONFIRMED. ## Required tools `Read`, `Grep`, `Glob`, `Bash(git diff:*)`, `Bash(python3:*)`, `Skill`. (`Write` is granted by the platform.)
GitHub에서 보기