CommunityPesquisa e Análise de Dadosgithub.com

Albert-4096/linha-de-base-de-seguranca

Use ao revisar, auditar, modelar ameaças ou planejar a segurança de uma aplicação web, API, dashboard, servidor MCP, automação (n8n), serviço auto-hospedado, host Docker ou homelab; ao decidir o nível de segurança necessário; ao caçar vulnerabilidades (BOLA/IDOR, RLS quebrada, segredos vazados, UIs admin expostas, imagens ou pacotes desatualizados); antes de um lançamento ou deploy; após uma suspeita de violação; ou ao escrever regras de AGENTS.md/CLAUDE.md para um projeto construído por IA.

O que é linha-de-base-de-seguranca?

Esta skill fornece um procedimento operacional completo e sistemático para auditoria de segurança de aplicações web, APIs, servidores e ambientes auto-hospedados (homelab). Ela segue três princípios fundamentais: nunca confiar no cliente, nunca confiar no código do modelo e nunca confiar em padrões. A skill adapta o rigor da auditoria ao nível de ameaça real do projeto, classificando-o em quatro tiers (T0 a T3), desde ferramentas de brinquedo sem dados reais até ambientes regulados com dinheiro ou PII em escala. O processo envolve coleta de evidências através de scripts bash para auditoria de hosts Docker e análise de código, seguida por tarefas manuais como inventário de proxies reversos, verificação externa de headers e endpoints sensíveis, rastreamento de autorização, análise de versões contra CVEs conhecidas e verificação de força de credenciais. A saída é um relatório estruturado com escopo, veredito, descobertas ranqueadas por severidade, tabela de atualização e próximas ações. A skill também inclui regras de engajamento (somente leitura, nunca imprimir segredos) e um guia seguro para atualizações de serviços. É compatível com Claude Code, Cursor e outros agentes de IA que executam bash e leem arquivos, sendo ideal para revisões de código, pré-deploy e resposta a incidentes.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Albert-4096/security-baseline-skill/tree/HEAD/skills/security-baseline

Installed? Explore more Pesquisa e Análise de Dados skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Linha de Base de Segurança

Visão Geral

Uma referência completa está em references/baseline.md (seções §0–§18, busque por ## N.). Este arquivo é o procedimento operacional. Princípio central: combine o rigor ao nível de ameaça, depois prove cada descoberta com evidências. Três leis: nunca confie no cliente, nunca confie no código do modelo, nunca confie nos padrões.

Escolha o modo

SolicitaçãoModoLeia em baseline.md
"Planejar / iniciar um projeto com segurança", escrever regras de agentePlanejamento§0, §2, §3, §16
"Revisar / auditar este app / repo / PR"Revisão de código§1.3, §4–§11, §15.2
"Auditar meu servidor / homelab / VPS", "está atualizado?"Auditoria de host§3.3, §8.3, §12, §13
"Fomos hackeados / vazamos uma chave"Incidente§17, §8.2

Uma auditoria de host inclui uma breve revisão de código de cada aplicação voltada para a internet que armazena contas ou dados pessoais.

Passo 1 — Classifique o nível (sempre primeiro, declare no relatório)

Decida com base em fatos observáveis, não no que o proprietário chama:

NívelPredicadoAplique
T0 BrinquedoSem usuários reais ou dados E não acessível pela internet (apenas LAN, ou atrás de SSO)§2, §8
T1 Público, sem contasAcessível pela internet, sem login, sem dados pessoais armazenadosT0 + §9, §10
T2 Contas / dados de usuárioQualquer login, qualquer dado pessoal (nomes, e-mails, listas de convidados), qualquer chave de API ou token que ele armazenaTudo
T3 Dinheiro / PII em escala / reguladoPagamentos, saúde, cofres de credenciais, finanças, dados de >1k pessoas, contratos com clientesT2 + revisão externa + §14

Um host de homelab é classificado no nível mais alto de qualquer coisa que ele executa. Um agregador de credenciais (gerenciador de senhas, n8n, Home Assistant, Portainer, titular de docker.sock) é T3 por raio de explosão.

Passo 2 — Colete evidências (somente leitura)

Execute os scripts inclusos via bash. Em um host remoto, transmita-os via SSH: ssh host 'bash -s -- --remote-digests' < scripts/audit-docker-host.sh e ssh host 'bash -s -- <project-dir>' < scripts/scan-code.sh.

  • bash scripts/audit-docker-host.sh --remote-digests — Patches do SO, flag de reinicialização, soquetes de escuta, firewall, sshd, usuário/privilegios/portas publicadas/docker.sock de cada container, NOMES de env vars com aparência de segredo, frescor da imagem (UP-TO-DATE / OUTDATED / local-build).
  • bash scripts/scan-code.sh <project-dir> — grep por leads de segredos, injeção, XSS, mass assignment, IDs de tenant fornecidos pelo cliente, capturas fail-open, criptografia fraca, lockfiles, riscos de Dockerfile/compose, inventário de rotas.

Em seguida, faça o que os scripts não conseguem:

  1. Inventário de proxy reverso: liste cada hostname público, seu destino, e se a autenticação está na frente (NPM DB / Caddy / rótulos Traefik). UIs administrativas (lista §3.3) em um hostname público sem SSO/lista de acesso = descoberta.
  2. Visão externa: de fora do caminho LAN, curl -sI https://<host> para cabeçalhos (§10.2), e probe /.env, /.git/config, /admin, /api com GET apenas.
  3. Rastreamento de autorização para cada app T2+: para cada rota, nomeie a verificação de autorização e de onde vem o principal/ID do tenant (§4.3). Aplique a pergunta §1.3.
  4. Confiança do proxy: se um app lê X-Forwarded-For, verifique qual hop ele confia ($proxy_add_x_forwarded_for anexa; o primeiro valor é controlado pelo atacante).
  5. Força da credencial por função: para cada função (admin, funcionário, voluntário, token API/MCP), descubra como seu segredo é definido, incluindo seed, caminhos legados e de migração que ignoram a verificação normal de comprimento. Verifique o comprimento real dos valores .env com awk -F= '{print $1, length($2)}', nunca imprimindo-os. Um segredo fraco combinado com um limite de taxa contornável é uma descoberta, não duas.
  6. Versões vs avisos: para cada aplicação voltada para a internet, compare a versão em execução com a versão atual e CVEs conhecidos. Use pesquisa web para avisos de segurança do produto.

Portão do host (a checklist §16 é por projeto; use esta para um host)

  • Cada hostname público está listado, e cada UI administrativa (§3.3) tem SSO, uma lista de acesso ou VPN na frente, ou não é pública
  • Hypervisor, Docker, NPM/proxy admin, cofre de senhas admin: nunca públicos
  • Cadastro aberto desabilitado em cada app auto-hospedada que não precisa (Vaultwarden, Open WebUI, Gitea, Immich, …)
  • Portas acessíveis pela WAN = apenas 80/443 (+ VPN). Portas publicadas pelo Docker ignoram ufw: verifique encaminhamentos do roteador e DOCKER-USER
  • O proxy passa um IP de cliente que os apps não podem ser enganados (§4.5, X-Forwarded-For)
  • Membros do grupo docker listados; cada um é equivalente a root
  • Arquivos de segredos com modo 600; nenhum .env/chaves legível mundialmente
  • SO atualizado, nenhuma reinicialização pendente há mais de 7 dias; imagens atuais (tabela de frescor)
  • Backups executados recentemente e um restore foi testado (§13.4)

Regras de engajamento

  • Somente leitura por padrão. Sem escritas, reinicializações, atualizações, POSTs que alteram dados, força bruta ou varredura de hosts que o proprietário não possui.
  • Nunca imprima valores de segredos. Relate apenas o nome da variável e arquivo:linha.
  • Inspecione armazenamentos de configuração (tabelas de config de BD, configurações JSON, env docker inspect) por chaves e comprimentos apenas: jq 'paths', SELECT key FROM …, awk -F= '{print $1, length($2)}'. Nunca despeje uma linha ou arquivo de configuração inteiro para olhá-lo: conterá chaves de API.
  • Mudanças (atualizações, chmod, correções de configuração) acontecem apenas após o relatório, e apenas quando o solicitante as pediu. Para atualizações, siga "Atualizando com segurança" abaixo.

Passo 3 — Relatório (exatamente este formato)

  1. Escopo e nível: o que foi examinado, o nível e o motivo em uma linha.
  2. Veredito: uma frase — pode-enviar / corrija-primeiro / pare.
  3. Descobertas, classificadas de Críticas a Baixas. Cada descoberta tem: título, CONFIRMADO (você reproduziu ou leu o caminho exato do código/config) ou LEAD (plausível, não comprovado), evidência (arquivo:linha, comando + trecho de saída), impacto em uma frase, correção.
  4. Tabela de frescor (auditoria de host): componente, versão em execução, mais recente, risco de atualização.
  5. Cobertura: as seções do portão §16 que você verificou, e as que não verificou e por quê. Silêncio não é aprovação.
  6. Próximas ações, numeradas, do menor esforço ao maior risco primeiro.

Atualizando com segurança ("certifique-se de que tudo está atualizado")

  1. Confirme que um backup existe e é recente (§13.4). Registre o ID da imagem atual de cada container para que o rollback seja image: <repo>@<old digest>.
  2. Sem estado = sem volume nomeado ou bind mount que o app escreve, e sem banco de dados. Sites nginx estáticos, gotenberg, flaresolverr são sem estado. Se não tiver certeza, trate como portador de dados.
  3. Classifique: com migração de dados ou esquema (bancos de dados, Immich, Paperless, Vaultwarden, Firefly, n8n, Home Assistant) → um de cada vez, leia as notas de versão para mudanças radicais primeiro. Sem estado (sites nginx estáticos, ferramentas) → em lote.
  4. Nunca pule uma versão principal de banco de dados (postgres 15→17) através de docker pull. Isso requer um dump/restore.
  5. docker compose pull && docker compose up -d por projeto, depois verifique a saúde: status do container, logs para erros e uma verificação HTTP da URL pública.
  6. Builds locais (local-build) atualizam reconstruindo com --pull. Pacotes do SO precisam de sudo; se você não tiver, relate a lista e a flag de reinicialização.
  7. Se pulls falharem com 429 toomanyrequests, pare. Peça docker login no host, ou tente novamente após 6 h. Não repita.

Erros comuns

ErroCorreto
Relatar tudo como "Alto"Gravidade = explorabilidade × nível × raio de explosão
Tratar um hit de script como descobertaA saída do script é um LEAD até você ler o código
"Container executa como root" sem verificarMuitas imagens reduzem privilégios no entrypoint; verifique ps internamente
"Porta 9000 está aberta" em um host LANDiga quem pode alcançá-la: apenas LAN, WAN via encaminhamento do roteador, ou via proxy
Pular o nível e auditar um site estático como um bancoNível primeiro; T1 precisa de cabeçalhos e dependências, não de RLS
Atualizar tudo com :latest de uma só vezUm serviço com dados de cada vez, com um digest para rollback
Corrigir desabilitando o controle (RLS off, CORS *)Corrija a política, nunca a remova (§7.2)

Habilidades Relacionadas