vuln-research — скилл для Claude Code: анализ CVE и установка
Скилл проверяет, затрагивает ли CVE ваш проект: от версии зависимости и достижимости уязвимого кода до патча и вариантов снижения риска.
npx skills add briiirussell/cybersecurity-skills --skill vuln-research -a claude-codeЧто делает vuln-research
Скилл разбирает конкретную CVE или раскрытую уязвимость: сверяет затронутые версии с рекомендациями поставщика и историей исправления, ищет уязвимый пакет и проверяет, вызывает ли его ваш код. Также он помогает выяснить, есть ли публичный PoC и отмечена ли уязвимость в CISA KEV.
Для проверки он предлагает изучить lock-файлы, дерево зависимостей и исправляющий коммит; для поиска вызовов — использовать grep. Затем рассматриваются обновление, временные меры защиты или принятие риска. Это повод не считать зависимость безопасной лишь потому, что уязвимый путь пока не найден: скилл требует обосновать вывод о недостижимости. Он дополняет dependency-audit и finding-triage.
Какие задачи решает
- уточнить, какие версии зависимости затронуты CVE
- проверить, достижим ли уязвимый код из проекта
- найти публичный PoC и признаки активной эксплуатации
- выбрать обновление или временную меру защиты
- зафиксировать основания для принятия риска
Примеры запросов агенту
- Проверь, затрагивает ли CVE-2024-12345 наши зависимости и используется ли уязвимый путь.
- Разбери эту CVE: найди исправляющий коммит, уязвимые версии и публичный PoC.
- Проверь, есть ли патч для этой уязвимости, и предложи меры, если обновиться сейчас нельзя.
Как установить vuln-research
1Через Skills CLI (Vercel)
npx skills add briiirussell/cybersecurity-skills --skill vuln-research -a claude-code2Вручную: положить файлы
~/.claude/skills/vuln-research/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/vuln-research/
1Через Skills CLI (Vercel)
npx skills add briiirussell/cybersecurity-skills --skill vuln-research -a codex2Вручную: положить файлы
.agents/skills/vuln-research/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add briiirussell/cybersecurity-skills --skill vuln-research -a cursor2Вручную: положить файлы
.cursor/skills/vuln-research/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install briiirussell/cybersecurity-skills vuln-research2Вручную: положить файлы
.github/skills/vuln-research/SKILL.md1Через Skills CLI (Vercel)
npx skills add briiirussell/cybersecurity-skills --skill vuln-research -a gemini-cli2Командой платформы
gemini skills install https://github.com/briiirussell/cybersecurity-skills --path skills/vuln-researchВручную: положить файлы
.devin/skills/vuln-research/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add briiirussell/cybersecurity-skills --skill vuln-research -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о vuln-research
Как установить vuln-research в Claude Code?
Выполните npx skills add briiirussell/cybersecurity-skills --skill vuln-research -a claude-code. Файл скилла находится по пути ~/.claude/skills/vuln-research/SKILL.md.
Что делает vuln-research?
Скилл исследует конкретную CVE: проверяет версии, использование уязвимого кода, наличие PoC и исправления, а также возможные меры защиты.
Как vuln-research проверяет достижимость уязвимого кода?
Он предлагает изучить коммит с исправлением и искать вызовы уязвимой функции в проекте. Если вызовов не найдено, вывод о недостижимости нужно обосновать.
Исходный текст
SKILL.md · MIT
---
name: vuln-research
description: "Research a specific CVE or vulnerability disclosure end-to-end — what version is affected, is your code reachable, is there a public PoC, is there a patch, what's the exposure window, what's the mitigation if you can't patch immediately. Use when the user mentions 'CVE,' 'vulnerability research,' 'is this CVE relevant,' 'zero-day,' 'CISA KEV,' 'GitHub Security Advisory,' 'reachability analysis,' 'patch analysis,' 'exploit availability,' 'EPSS,' 'CVSS,' or 'should we drop everything and patch this.'"
allowed-tools: Read, Grep, Glob, Bash, WebSearch, WebFetch
---
# Vuln Research — CVE Deep-Dive and Applicability Assessment
When a CVE drops, the question isn't "do we have this package?" — `dependency-audit` answers that. The questions are:
- Is the vulnerable code path actually invoked in our usage?
- Is there a public proof-of-concept making this easy to exploit?
- Is there a patch? When? What's our exposure window if we can't deploy in 24 hours?
- If we can't patch, what's the mitigation?
- Is CISA tracking it as actively exploited?
This skill walks that workflow end-to-end. Pairs with `dependency-audit` (which surfaces the CVE in the first place) and `finding-triage` (which closes the disposition loop).
## Workflow
### Step 1 — Pull the canonical sources
Start with the authoritative descriptions; everything downstream is summarized or sometimes wrong.
- **NVD record** — `https://nvd.nist.gov/vuln/detail/CVE-YYYY-NNNNN`
- **Vendor advisory** — search the vendor's security page; this is usually the most accurate description of which versions are affected and what the fix is
- **GitHub Security Advisory** — `https://github.com/advisories/GHSA-...` (often more concise than NVD, sometimes has detail NVD lacks; check the parent project's security tab)
- **CISA Known Exploited Vulnerabilities catalog** — `https://www.cisa.gov/known-exploited-vulnerabilities-catalog`. If the CVE is here, treat as actively exploited — patch within CISA's stated due date
- **EPSS score** — `https://www.first.org/epss/` — Exploit Prediction Scoring System; a 30-day probability of exploitation. Useful tiebreaker between high-CVSS-low-EPSS vs medium-CVSS-high-EPSS
### Step 2 — Confirm affected versions
Vendor advisories sometimes hedge ("affects versions before X"); pin down the exact range.
- Check the vendor's release notes and the commit history of the fix
- For OSS projects: find the patch commit (usually mentioned in the advisory) and run `git tag --contains <commit>` to see which releases include the fix
- For closed-source: the advisory is the only source — verify version comparisons carefully (semver isn't always observed)
- For monorepos / re-publishers: confirm the same fix landed in any forks or distributions you depend on
### Step 3 — Map to your environment
```bash
# Is the package installed at all?
npm ls <package> # or yarn why <package>, pnpm why <package>
pip show <package> # or pip list | grep <package>
bundle info <gem>
go list -m all | grep <package>
# What version exactly?
# Inspect lockfiles directly — the resolved version is what runs, not the range
grep -A1 '"<package>"' package-lock.json
# Where is it used?
# Direct dependency, transitive, dev-only?
npm ls <package> --omit=dev # production-reachable?
```
If transitive, walk up the dependency tree until you find which direct dependency is pulling it in. That's where the override / pin / replacement lives.
### Step 4 — Reachability analysis (the high-leverage step)
A CVE is only exploitable if you actually call the vulnerable code path. This is where dependency-audit's noise gets cut down to real risk.
**Read the patch.** The fix commit shows exactly which function / file / API was vulnerable. Then:
```bash
# Does your code call the vulnerable function directly?
grep -rn "vulnerableFunction\|VulnerableClass" . \
--include="*.{js,ts,py,rb,go,java}" \
--exclude-dir=node_modules
# Does the dependency call it internally even if you don't?
# Trickier — you have to read the parent's source. For an indirect call:
cd node_modules/<package>
grep -rn "vulnerableFunction" .
```
**Common reachability outcomes:**
- **Reachable, direct:** You call the bad code. Highest priority — patch or workaround now
- **Reachable, indirect:** Your dependency calls the bad code as part of normal use. Still high priority
- **Not reachable:** The bad code is in a feature you don't use (different module, different entry point, different runtime). Lower priority; still recommend patching but won't break SLA
- **Unknown:** Document as unknown and patch on the cautious side
Don't write "not reachable" without showing the work. Future-you will want to revisit when usage changes.
### Step 5 — Check for public PoCs and active exploitation
- **GitHub:** search for `CVE-YYYY-NNNNN` in code and repos — PoCs land here within days of disclosure
- **CISA KEV:** if listed, it's actively exploited in the wild
- **Exploit-DB:** `https://www.exploit-db.com/` — confirmed exploits
- **Vendor's security mailing list:** sometimes the most recent intel
- **GreyNoise:** `https://www.greynoise.io/` — internet-wide scanning telemetry; if attackers are mass-scanning for this, your exposure window is now
- **Twitter / Mastodon security circles** — for breaking intel, but verify against canonical sources before acting
**EPSS interpretation:**
| EPSS score | Meaning |
|---|---|
| > 0.7 | High probability of exploitation in next 30 days — treat as urgent |
| 0.1 – 0.7 | Meaningful exploitation likelihood — patch on regular cadence |
| < 0.1 | Low predicted exploitation — patch when convenient |
EPSS is empirically tuned; it correlates better with actual exploitation than CVSS does.
### Step 6 — Patch / mitigate / accept-risk
**Patch (preferred):**
- If a patched version exists and you can deploy quickly — upgrade the package, run tests, deploy
- For transitive deps without a direct patch, use `overrides` (npm) / `resolutions` (yarn) / `pin` to force the patched version
**Mitigate (when you can't patch):**
- Disable the affected feature if your code doesn't need it
- Add a request-level filter (WAF rule, proxy filter) that blocks the known-malicious input pattern — for exploitation that goes through HTTP, this is often deployable in hours
- Network-segment the vulnerable service so it can't be reached from untrusted networks
- Add detection (see `siem-detection`) so you'll see exploitation attempts even if mitigations fail
**Accept risk (only when truly justified):**
- Code path is genuinely unreachable in your usage
- Vulnerable component is in an internal-only service with no untrusted input
- Compensating controls reduce exploitation likelihood / impact enough to justify
- See the Accepted Risk disposition in `owasp-audit`'s Report Format — three required fields (why, compensating controls, re-evaluation trigger). No exceptions.
### Step 7 — Document and close the loop
After deciding:
- Record the decision in your vuln-tracking system (Jira, Linear, Vanta, etc.)
- For accept-risk: set a re-evaluation date and a calendar reminder
- For patches: confirm via `npm ls` / lockfile that the patched version is actually deployed (rollouts are not the same as decisions)
- For mitigations: write a runbook entry so the next person knows the mitigation exists and why
## Common research traps
- **The advisory says "fixed in vX" but the package never released vX** — happens with abandoned projects. Use `overrides` to a known-good fork, or replace the dependency
- **The vendor patched it silently** — fix landed before the CVE; advisory is for the version before the silent fix. Verify the fix commit is in your version
- **The CVE applies to a sibling package you also have** — same code, different name (forks, monorepo siblings). Search every package you have for the vulnerable function, not just the named one
- **The CVSS is high but the EPSS is low** — usually means complex preconditions in the wild. Patch but don't panic
- **The CVSS is medium but the EPSS is high** — usually means it's already being exploited in mass scans. Treat as urgent
- **The PoC needs auth that's hard to get** — but your application makes that auth easy to get (signup is open). The "complexity" attacker rating doesn't account for *your* threat model
## Output Format
```markdown
# Vulnerability Assessment: CVE-YYYY-NNNNN
## Date: [date]
## Assessor: [name]
### Summary
- **Title:** [from advisory]
- **CVSS / EPSS:** [scores]
- **CISA KEV:** [yes / no, and due date if listed]
- **Affected versions:** [exact range]
- **Our version:** [version + how installed]
### Reachability
- **Direct call:** [yes / no — with evidence]
- **Indirect via dependency:** [yes / no — with evidence]
- **Verdict:** Reachable / Not reachable / Unknown
### Exploitation availability
- **Public PoC:** [yes / no — link]
- **Active exploitation:** [yes / no — source]
### Decision
- [ ] Patch (target deploy: [date])
- [ ] Mitigate (controls: [list]; re-evaluate: [date])
- [ ] Accept risk (why / compensating controls / re-eval trigger)
### Action items
| Item | Owner | Deadline |
|------|-------|----------|
### References
[Links to advisory, patch commit, PoC, EPSS, CISA, etc.]
```
## Boundaries
- Research vulnerabilities affecting code, dependencies, or systems the user has authorization for
- Do not develop, weaponize, or distribute exploits — read existing PoCs only for the purpose of assessing applicability
- For internal-only vulnerabilities or pre-disclosure intel, do not redistribute without authorization
- If research surfaces an unreported vulnerability in someone else's code, follow responsible disclosure — do not publish, do not exploit
- Refuse requests to use CVE research output to attack systems
## References
- NVD (National Vulnerability Database)
- CISA Known Exploited Vulnerabilities Catalog
- GitHub Security Advisories Database
- EPSS (Exploit Prediction Scoring System) — FIRST.org
- MITRE CVE — `cve.mitre.org` (now redirects to `cve.org`)
- Exploit-DB
- GreyNoise — internet scanning telemetry
- "Patch Tuesday" / vendor-specific cadences for context on disclosure timing
- Project Zero disclosure policy — the reference for responsible disclosure timelines
© briiirussell · MIT · briiirussell/cybersecurity-skills