Communitygithub.com

mstfknn/sast-skills

Coleção de skills para agentes que transformam seu codificador de IA em um scanner SAST completo

O que é sast-skills?

Este pacote transforma assistentes de codificação baseados em LLM, como Claude Code, Codex, OpenCode e Cursor, em scanners SAST (Static Application Security Testing) completos. Ele fornece 31 skills organizadas em 28 classes de vulnerabilidades, incluindo injeção, controle de acesso quebrado, criptografia fraca, manipulação de arquivos, segurança na cadeia de suprimentos, lógica de negócios e riscos específicos de LLM (injeção de prompt e tratamento inseguro de saída). A orquestração é feita em quatro fases — reconhecimento, detecção paralela, relatório consolidado e triagem baseada em evidências — todas controladas a partir de arquivos CLAUDE.md ou AGENTS.md. Cada fase é idempotente e retomável, ignorando trabalhos já realizados. As saídas são em formato JSON canônico, exportáveis para SARIF 2.1.0, HTML ou JSON para integração com GitHub Code Scanning e CI. Suporta instalação zero-config via npx, atualização e verificação de integridade com comandos como doctor.

Funciona com✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/mstfknn/sast-skills/tree/main

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Prévia

Do README da skill

npm version
CI
License: MIT
Node.js

Documentação

O que sast-skills faz?

npm version CI License: MIT Node.js

Transforme seu assistente de codificação LLM em um scanner SAST completo. Skills prontas para Claude Code, Codex, OpenCode, Cursor e qualquer assistente que carregue pastas de skills CLAUDE.md / AGENTS.md.

Claude Code com Opus é recomendado para qualidade; qualquer modelo capaz funciona.

Destaques

  • 31 skills em 28 classes de vulnerabilidades — injeção, controle de acesso quebrado, criptografia fraca, manipulação de arquivos, cadeia de suprimentos, lógica de negócios e riscos específicos de LLM (injeção de prompt, tratamento inseguro de saída).
  • Orquestração em quatro fases — reconhecimento → detecção paralela → relatório consolidado → triagem baseada em evidências, totalmente controlada a partir de CLAUDE.md / AGENTS.md.
  • Idempotente e retomável — cada fase ignora trabalho cuja saída já existe; reexecute após corrigir problemas para atualizar apenas o que está desatualizado.
  • Saída legível por máquina — cada skill emite JSON canônico; sast-skills export agrega para JSON, SARIF 2.1.0 ou HTML para GitHub Code Scanning e CI.
  • Multi-assistente — skills idênticas para Claude Code (.claude/skills) e para cada assistente que usa AGENTS.md (.agents/skills).
  • CLI zero-config — install / update / uninstall / doctor / export, publicado a partir de GitHub Actions com proveniência npm (atestação SLSA).

Fluxo

O orquestrador executa quatro fases — reconhecimento, detecção paralela, síntese e triagem:

flowchart TD
    U(["Usuário: Executar varredura de vulnerabilidades"]) --> R{"Orquestrador CLAUDE.md / AGENTS.md"}
    R --> S1["Passo 1 — sast-analysis<br/>mapeamento de código e arquitetura"]
    S1 -->|sast/architecture.md| S2["Passo 2 — varredura de vulnerabilidades paralela<br/>28 skills: recon, verificação em lote, mesclagem"]
    S2 -->|sast/*-results.md e *-results.json| S3["Passo 3 — sast-report<br/>consolidar e classificar"]
    S3 -->|sast/final-report.md| S4["Passo 4 — sast-triage<br/>eliminação de falsos positivos,<br/>ajuste de gravidade com evidências"]
    S4 -->|sast/final-report-triaged.md e triaged.json| EXP["npx sast-skills export<br/>JSON, SARIF, HTML"]
    EXP --> CS(["GitHub Code Scanning, CI, dashboards"])

Cada passo é idempotente: se seu arquivo de saída já existir, o orquestrador o ignora. Reexecute a varredura após corrigir problemas para atualizar apenas o que está desatualizado.


O que detecta

Todas as skills seguem o mesmo padrão de três fases: recon → verificação em lote (subagentes paralelos, 3 por lote) → mesclagem. Cada uma escreve um relatório markdown legível por humanos e um arquivo JSON canônico de descobertas que sast-skills export agrega.

Reconhecimento e Síntese

SkillFunção
sast-analysisReconhecimento de código, mapeamento de arquitetura, modelo de ameaças
sast-reportConsolidar descobertas por classe em um relatório classificado
sast-triageRemover falsos positivos e ajustar gravidades com evidências do código

Injeção

SkillClasse de Vulnerabilidade
sast-sqliInjeção de SQL
sast-nosqlInjeção NoSQL (Mongo, Firestore, DynamoDB)
sast-ldapInjeção em filtro / DN LDAP
sast-graphqlConstrução insegura de documento GraphQL
sast-xssCross-Site Scripting
sast-sstiInjeção de Template no Lado do Servidor
sast-rceExecução Remota de Código (injeção de comando, eval, desserialização insegura)
sast-xxeEntidade Externa XML
sast-ssrfFalsificação de Solicitação no Lado do Servidor
sast-openredirectRedirecionamento aberto (phishing / roubo de token OAuth)

Controle de Acesso e Autenticação

SkillClasse de Vulnerabilidade
sast-idorReferência Direta Insegura a Objetos
sast-missingauthAutenticação ausente / autorização em nível de função quebrada
sast-jwtImplementações inseguras de JWT
sast-csrfFalsificação de Solicitação entre Sites
sast-corsConfiguração incorreta de CORS

Arquivos, Criptografia e Runtime

SkillClasse de Vulnerabilidade
sast-pathtraversalTravessia de caminho / diretório
sast-fileuploadUpload inseguro de arquivos
sast-cryptoPrimitivas fracas, modos ruins, reutilização de IV, PRNG fraco
sast-prototypePoluição de protótipo JavaScript
sast-redosDoS por regex com retrocesso catastrófico
sast-raceCondições de corrida e TOCTOU

Exposição de Dados e Cadeia de Suprimentos

SkillClasse de Vulnerabilidade
sast-hardcodedsecretsChaves de API / tokens / credenciais em código voltado ao cliente
sast-piiVazamento de PII e credenciais para logs / telemetria / páginas de erro
sast-depsDependências com vulnerabilidades conhecidas (CVE em lockfiles)
sast-iacIaC inseguro (Dockerfile / Terraform / Kubernetes / GitHub Actions)

Lógica de Negócios e Específicas de LLM

SkillClasse de Vulnerabilidade
sast-businesslogicManipulação de preço, bypass de fluxo, abuso de recompensas
sast-promptinjectionTexto não confiável atingindo um prompt LLM (OWASP LLM #1)
sast-llmoutputSaída LLM não validada atingindo sinks de código / HTML / SQL / shell (OWASP LLM #2)

Instalação

npx sast-skills install

O instalador pergunta qual assistente deve ser alvo (claude / agents / all) e se deve instalar no projeto atual ou no diretório home do usuário (project / global). Para pular prompts:

npx sast-skills install --yes --assistant claude --scope project

Se seu projeto já contém um CLAUDE.md ou AGENTS.md, o instalador se recusa a sobrescrevê-lo por padrão — faça um backup ou use --force.

Instalação manual (sem npx / npm)

Use este caminho se não puder executar npx (proxy corporativo, registro npm inacessível, ambiente offline) ou se quiser fixar a fonte deste fork em vez do pacote npm publicado. O instalador CLI faz apenas duas coisas — colocar o arquivo de entrada do orquestrador na raiz do projeto e espelhar cada SKILL.md no diretório oculto correto — portanto, um simples cp -R reproduz exatamente o mesmo resultado.

1. Obter os arquivos empacotados

git clone https://github.com/mstfknn/sast-skills.git

Tudo que você precisa está em sast-skills/sast-files/:

sast-files/
├── CLAUDE.md                       # Entrada do orquestrador para Claude Code
├── AGENTS.md                       # Entrada do orquestrador para Gemini CLI / Codex / OpenCode / Cursor
├── .claude/skills/sast-*/SKILL.md  # 31 skills no formato Claude Code
└── .agents/skills/sast-*/SKILL.md  # Mesmas 31 skills espelhadas para assistentes AGENTS.md

As duas árvores de skills são mantidas sincronizadas por npm run sync — o conteúdo é idêntico, apenas o nome do diretório difere.

2a. Instalar para Claude Code

Defina SAST_SRC para o caminho do clone para que os comandos abaixo sejam copiáveis:

export SAST_SRC=/absolute/path/to/sast-skills
cd /path/to/your-project

Escopo do projeto (recomendado — versionado junto com seu repositório):

cp "$SAST_SRC/sast-files/CLAUDE.md" ./CLAUDE.md
cp -R "$SAST_SRC/sast-files/.claude" ./

Se você já usa um CLAUDE.md no nível do projeto, não o sobrescreva — Claude Code lê apenas um CLAUDE.md por projeto. Mescle o conteúdo do orquestrador (o fluxo de quatro fases) em seu arquivo existente.

Escopo global (skills disponíveis em todos os projetos; orquestrador ainda copiado por projeto):

mkdir -p ~/.claude/skills
cp -R "$SAST_SRC/sast-files/.claude/skills/." ~/.claude/skills/
# Em seguida, em qualquer projeto onde desejar o fluxo de varredura:
cp "$SAST_SRC/sast-files/CLAUDE.md" /path/to/your-project/CLAUDE.md

2b. Instalar para Gemini CLI (e outros assistentes AGENTS.md)

export SAST_SRC=/absolute/path/to/sast-skills
cd /path/to/your-project
cp "$SAST_SRC/sast-files/AGENTS.md" ./AGENTS.md
cp -R "$SAST_SRC/sast-files/.agents" ./

AGENTS.md é a convenção multiassistente adotada por Gemini CLI, Codex CLI, OpenCode e Cursor. Se sua versão do Gemini CLI procura por GEMINI.md em vez disso, renomeie-o — o conteúdo permanece inalterado:

mv AGENTS.md GEMINI.md

3. Verificar a instalação

# Escopo do projeto (Claude Code)
ls CLAUDE.md && ls .claude/skills/ | head

# Escopo do projeto (Gemini / AGENTS.md)
ls AGENTS.md && ls .agents/skills/ | head

# Escopo global (Claude Code)
ls ~/.claude/skills/ | head

Você deve ver todos os 31 diretórios de skill sast-*. Abra o projeto em seu assistente e solicite "Executar varredura de vulnerabilidades" — o orquestrador dentro de CLAUDE.md / AGENTS.md conduz as quatro fases a partir daí.

4. Manter uma instalação manual atualizada

cd "$SAST_SRC" && git pull
# Reexecute os comandos cp do Passo 2a / 2b para atualizar — eles são idempotentes.

Se você mantiver o clone por perto, cd "$SAST_SRC" && git pull && <reexecutar cp> é o equivalente manual de npx sast-skills update.

Comandos CLI

ComandoO que faz
npx sast-skills installCopia CLAUDE.md / AGENTS.md e a árvore de skills para seu projeto ou $HOME
npx sast-skills updateAtualiza uma instalação existente com os arquivos de skill atualmente empacotados
npx sast-skills uninstallRemove skills instaladas; recusa-se a remover um CLAUDE.md modificado sem --force
npx sast-skills doctorVerifica uma instalação e relata OK / AUSENTE / MODIFICADO por arquivo; sai com código diferente de zero em caso de problemas
npx sast-skills export --input sast/ --format sarif --output report.sarifAgrega sast/*-results.json em JSON, SARIF 2.1.0 ou HTML
npx sast-skills export --input sast/ --triaged --format sarifPrefere o sast/triaged.json triado em vez dos resultados brutos por skill
npx sast-skills --versionImprime a versão do CLI instalado

Flags de instalação

FlagPropósito
--yesNão interativo; necessário quando stdin não é um TTY
`--assistant <claudeagents
`--scope <projectglobal>`
--target <path>Alvo de instalação explícito (sobrescreve --scope)
--forceSobrescrever um CLAUDE.md / AGENTS.md pré-existente
--dry-runImprimir o plano de arquivos sem escrever

Executando uma varredura

Após a instalação, abra o projeto em seu assistente de IA e peça:

Executar varredura de vulnerabilidades

ou

Encontrar vulnerabilidades neste código

O orquestrador assume o controle. Ele executa todas as quatro fases automaticamente, respeita a idempotência (reexecuções capturam apenas o que está faltando) e escreve tudo em sast/ na raiz do seu projeto.

Arquivos de saída

ArquivoDescrição
sast/architecture.mdStack de tecnologia, arquitetura, pontos de entrada, fluxos de dados
sast/*-results.mdDescobertas por classe de vulnerabilidade (legível por humanos)
sast/*-results.jsonDescobertas canônicas legíveis por máquina (alimentam sast-skills export)
sast/final-report.mdRelatório bruto consolidado classificado por gravidade
sast/final-report-triaged.mdRelatório triado — falsos positivos removidos, gravidades ajustadas com evidências
sast/triaged.jsonDescobertas canônicas triadas (preferido por sast-skills export --triaged)

Esquema de descobertas

Cada skill escreve sast/<skill>-results.json como uma lista simples de descobertas:

{
  "findings": [
    {
      "id": "sast-sqli-0001",
      "skill": "sast-sqli",
      "severity": "critical|high|medium|low|info",
      "title": "Injeção de SQL em /api/user",
      "description": "…",
      "location": { "file": "src/api/user.js", "line": 42, "column": 10 },
      "remediation": "…"
    }
  ]
}

sast-skills export agrega esses arquivos em um documento envolto em um envelope run — { "run": { "tool": "sast-skills", "version": "<cli-version>" }, "findings": [...] } — estampando a versão do CLI que produziu o relatório. A etapa de triagem escreve sast/triaged.json nessa mesma forma envelopada.

Descobertas triadas adicionam triage_status (confirmed|upgraded|downgraded|false_positive), triage_original_severity (quando a gravidade mudou) e triage_evidence com citações concretas do código.


Integrações com CI

GitHub Code Scanning (SARIF)

Ação composta em .github/actions/scan/action.yml:

- uses: mstfknn/sast-skills/.github/actions/scan@main
  with:
    input: sast/
    output: sast-skills.sarif

Isso executa sast-skills export --format sarif e envia o resultado para Code Scanning via github/codeql-action/upload-sarif@v3.

Gancho pre-commit

Copie hooks/pre-commit para .git/hooks/pre-commit para fazer com que sast-skills doctor proteja cada commit.

Docker

docker build -t sast-skills .
docker run --rm -v "$PWD:/work" sast-skills export --input sast/ --format sarif --output report.sarif

O Dockerfile empacotado é baseado em node:20-alpine com sast-skills definido como ponto de entrada.


Verificar e solucionar problemas

# A instalação está no formato esperado?
npx sast-skills doctor --target . --assistant claude

# Verificação de versão
npx sast-skills --version
npm view sast-skills version    # mais recente no registro

# Atualização
npx sast-skills update

doctor sai com 0 se cada arquivo empacotado no alvo corresponder à cópia da versão instalada, e 1 se algum arquivo estiver AUSENTE ou MODIFICADO. MODIFICADO significa que o arquivo divergiu da cópia empacotada — esperado se você editar o arquivo de entrada, caso contrário, um sinal para executar update.


Contribuindo

Veja CONTRIBUTING.md. Loop do desenvolvedor:

npm install
npm test                                  # suíte vitest (com proteção TDD-guard ativada)
npm run sync                              # espelhar .claude/skills → .agents/skills
node scripts/scaffold-skill.js sast-foo   # esboçar uma nova skill em ambas as árvores
node scripts/register-skill.js sast-foo foo "Foo" "Descrição de injeção Foo"
npm run lint:md                           # markdownlint

…

[truncado para tradução]

Habilidades Relacionadas