skills/34-static-analysis/SKILL.md
Skill de scan automatizado de codigo para vulnerabilidades, bugs e code smells via Semgrep e CodeQL. Use antes de toda release, em PRs grandes, ou quando suspeitar de classe de bug recorrente. Trigger em: "semgrep", "codeql", "static analysis", "scan de seguranca", "SAST", "varredura", "pre-deploy security", "OWASP scan", "CVE check", "auditoria automatizada".
npx skillsauth add felvieira/claude-skills-fv static-analysisInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Eleva a Security Review (skill 06) de "review manual" para "scan + triagem". Semgrep para velocidade e cobertura ampla, CodeQL para taint tracking interprocedural quando o caso exige.
Esta skill segue GLOBAL.md, policies/execution.md, policies/tool-safety.md, policies/quality-gates.md, policies/writing-clarity.md.
Consultar docs/skill-guides/static-analysis.md para rulesets avancados, custom rules e integracao em CI.
.sarif) ou markdown estruturado--config=auto + ruleset OWASP)Detalhes operacionais nas sub-secoes a seguir.
Instalar:
pip install semgrep
# ou via Docker
docker run --rm -v "$PWD:/src" returntocorp/semgrep semgrep --config=auto
Rodar:
# Auto: detecta linguagens, aplica rulesets oficiais
semgrep --config=auto --sarif --output=semgrep.sarif
# Ruleset especifico
semgrep --config=p/owasp-top-ten --sarif --output=owasp.sarif
semgrep --config=p/security-audit
semgrep --config=p/typescript
# Custom rule
semgrep --config=./my-rule.yml src/
Rulesets recomendados por linguagem:
p/typescript, p/javascript, p/react, p/nextjs, p/owasp-top-tenp/python, p/django, p/flask, p/owasp-top-tenp/golang, p/gosecp/java, p/springp/security-audit, p/secrets, p/ciInstalar:
# Download CodeQL CLI
# https://github.com/github/codeql-cli-binaries/releases
Rodar:
# Build database
codeql database create db --language=javascript --source-root=.
# Run query suite
codeql database analyze db --format=sarif-latest --output=results.sarif \
codeql/javascript-queries
# Custom query
codeql query run --database=db my-query.ql
Quando usar CodeQL em vez de Semgrep:
Para escala (multi-linguagem, >20 findings, variant analysis), despachar via Task:
semgrep-scanner — executa scans em paralelo por categoria de linguagem, agrega SARIF. Use quando repo tem 2+ linguagens primarias.semgrep-triager — classifica findings em TP/FP/needs-investigation lendo contexto fonte. Use quando ha >20 findings.codeql-runner — orquestra build de database CodeQL + queries com taint tracking interprocedural. Use quando bug envolve data flow entre arquivos/funcoes.sarif-parsing — parse, dedup, agregacao de SARIF de multiplas fontes. Use quando consolidar Semgrep + CodeQL ou multiplos scans.variant-analysis — caca variantes do mesmo padrao apos achar bug inicial, gera custom rule reusavel. Use apos confirmar bug que pertence a classe (SQLi, XSS, missing auth, etc).Cada subagent tem definicao em .claude/agents/<name>.md com protocolo, inputs, outputs e guardrails proprios. Para uso simples (1 linguagem, scan rapido, poucos findings), rodar inline conforme blocos abaixo.
1. Semgrep --config=auto (5-30s, cobertura ampla)
→ triage via `semgrep-triager` subagent (ou inline se <20 findings)
→ fix critical/high
2. Se finding for bug de fluxo: CodeQL com query especifica
→ variant analysis para achar similares
3. SARIF → markdown report → handoff para skill 06
4. Skill 06 valida findings + adiciona contexto OWASP
5. Reviewer (skill 11) bloqueia merge se Critical/High aberto
Para cada finding, classificar:
Suprimir FP corretamente:
// nosemgrep: rule-id // motivo: contexto valida input acima na linha 42
const sql = `SELECT * FROM users WHERE id = ${id}`;
Nao suprimir sem comentario explicando porque.
| Nivel | Critério | Acao | |---|---|---| | Critical | RCE, SQLi, XSS confirmado, secret hardcoded | bloqueia merge, fix imediato | | High | Auth bypass possivel, SSRF, deps com CVE high | bloqueia merge, fix antes da release | | Medium | Validacao fraca, missing rate limit, dep com CVE medium | fix no proximo sprint | | Low | Code smell, deprecated API, missing header opcional | backlog | | Info | Sugestao de hardening | opcional |
Triagem de findings tem viesses recorrentes. Pensamentos que significam STOP:
| Pensamento | Realidade | |---|---| | "Isso parece falso positivo" | Validacao em outro arquivo nao garante. Verificar fluxo real. | | "Eu sei que esse codigo e seguro" | Sem evidencia (validacao explicita ou teste), e suposicao. | | "Esse modulo e legado, nao toca" | Legado e onde CVE mora. Tratar igual. | | "Suprimir e mais rapido" | FP nao validado vira buraco de seguranca em 6 meses. | | "A regra e generica, nao se aplica" | Genericas pegam padroes reais. Investigar antes de descartar. | | "Tem outros bugs maiores agora" | Critical/High nao espera. Triagem e pre-deploy gate. | | "Funcionava antes do scan" | Bug existia antes — scan so revelou. | | "Vamos abrir issue e seguir" | Critical aberto = no merge. Issue nao substitui fix. |
Toda supressao precisa de comentario explicando por que o codigo e seguro naquele contexto.
internalApi.X sem auditLog)Exemplo Semgrep:
rules:
- id: missing-audit-log
pattern: |
internalApi.$X(...)
pattern-not: |
auditLog($Y)
...
internalApi.$X(...)
message: chamada a internalApi sem auditLog precedente
severity: ERROR
languages: [typescript]
Custom rules vivem em tools/semgrep/ ou .semgrep/ no repo.
Markdown estruturado para handoff:
# Static Analysis Report — <YYYY-MM-DD>
**Tool:** semgrep --config=auto + p/owasp-top-ten
**Scope:** src/
**Duration:** 23s
**Files scanned:** 247
## Summary
- Critical: 1
- High: 3
- Medium: 8
- Low: 14
- Info: 22
## Critical Findings
### F-001: SQL Injection em src/db/users.ts:42
**Rule:** javascript.lang.security.sql-injection
**Confidence:** high (TP confirmed)
**Evidence:**
```ts
const query = `SELECT * FROM users WHERE id = ${userId}`;
Fix: usar prepared statement
const query = `SELECT * FROM users WHERE id = $1`;
db.query(query, [userId]);
Owner: skill 03 (Backend)
...
weak-crypto: hash usado para deduplicacao, nao seguranca
## Integracao com CI
Adicionar a `.github/workflows/`:
```yaml
- name: Semgrep scan
run: semgrep --config=auto --error --severity=ERROR
--error faz CI quebrar em finding Critical/High.
Output deve seguir policies/writing-clarity.md. Sem narrativa, sem hedging, sem prosa decorativa. Tabela de findings + acao concreta por linha.
Apos conclusao, entregar:
.sarif + .mddevelopment
Skill compositora que pega texto/assunto e gera post de blog HTML completo no repo {blog_repo_path} ({github_user_repo_url}), com imagens (via skill 17 fal.ai ou skill 42 Playwright screenshot), commit+push automático, retorna URL pública via GitHub Pages. Trigger em: "post no blog", "publicar post", "escrever post", "blog post", "publish blog", "gera post", "criar post", "novo post no meu blog".
tools
Audita o peso de contexto carregado na sessão — CLAUDE.md, agents, MCP descriptions, rules ativas, skills invocadas e histórico acumulado. Estima tokens por componente, reporta headroom disponível e emite alertas de overflow. Distinto do cost-tracker (skill 30) que rastreia tokens gastos em completions runtime. Trigger em: "contexto inchado", "context overflow", "quanto contexto estou usando", "peso do contexto", "context budget", "tokens carregados", "sessao lenta", "respostas degradadas", "headroom de contexto", "custo fixo de contexto", "overhead de rules", "overhead dos agents", "impacto do MCP no contexto", "espaco no context window", "quanto cabe no context window"
development
Coleta e organiza informacao tecnica multi-fonte antes de escrever docs, PRDs, ADRs ou artigos. Busca em: docs oficiais, GitHub (repos + issues), Stack Overflow, papers e blogs de referencia. Ranqueia fontes por autoridade (oficial 40% + recencia 30% + profundidade 20% + comunidade 10%). Output: memory/research/<slug>.md pronto para alimentar skill 10 (documenter), skill 01 (po-feature-spec), skill 26 (prompt-engineer) ou skill 41 (blog-publisher). Trigger em: "pesquisa tecnica", "levanta informacao", "coleta docs", "busca referencias", "preciso de fontes", "research antes de escrever", "levanta o que existe sobre", "benchmark de solucoes", "o que existe sobre X", "quero entender o estado da arte", "compara abordagens", "levanta referencias", "faz um research de", "coleta fontes sobre", "pesquisa sobre", "quero saber o que existe de", "monta um dossie tecnico", "background tecnico", "due diligence tecnica", "levantamento de alternativas".
development
Extrai e codifica os padroes de coding do projeto existente (naming, estrutura de arquivos, error handling, testing style, import style, API design, async patterns) e usa esses padroes como restricao sobre novo codigo. Garante que o agente code "igual ao resto do projeto" em vez de inventar convencoes proprias. Produce um "code style map" salvo em memory/patterns.md que todas as skills de geracao de codigo devem consultar. Trigger em: "segue o padrao do projeto", "coda igual ao resto", "nao reinventa padrao", "detecta padroes do codebase", "code style do projeto", "padrao do projeto", "convencao do projeto", "coda consistente", "mesma convencao", "sem reinventar roda", "padrao de codigo", "patterns do codebase", "pattern enforcement", "conformidade de padrao", "convencoes de naming", "padrao de tratamento de erro", "mesma estrutura do projeto", "detecta as convencoes", "extrai padroes de coding", "como o projeto estrutura".