Introdução
Este laboratório consolida a trilha em um sistema inteiramente fictício. Não existem credenciais, dados pessoais, endereços ou ambientes reais. Os exemplos mostram o mínimo necessário para compreender a falha e concentram o trabalho em correção, teste e prevenção.
O objetivo não é explorar um sistema. É transformar observações técnicas em decisões verificáveis: o que está em risco, como reduzir a exposição, como perceber uma tentativa, como responder e qual risco permanecerá.
Objetivos de aprendizagem
- Modelar ativos, fluxos de dados e trust boundaries de uma aplicação fictícia.
- Relacionar achados a ameaça, impacto, OWASP e CWE quando houver mapeamento adequado.
- Definir prevenção, detecção, resposta, evidências e critérios de aceite.
- Priorizar tratamento e registrar risco residual sem depender de uma fórmula universal.
O sistema fictício
O Portal Farol organiza perfis e reservas de salas de estudo. Usuários comuns atualizam o próprio nome e consultam reservas. Operadores podem suspender contas após um fluxo aprovado. Um serviço interno produz relatórios agregados.
Dados utilizados no laboratório são sintéticos:
- Identificador fictício de usuário.
- Nome de exibição inventado.
- Papel
memberouoperator. - Reserva sem dados de pessoas reais.
- Evento de auditoria sem segredo ou token.
O ambiente possui cliente web, API pública, serviço de domínio, banco de dados e pipeline de logs para um Security Information and Event Management (SIEM).
Deslize horizontalmente para explorar o diagrama em telas menores.
Deslize horizontalmente para explorar o diagrama em telas menores.
Os dois diagramas representam, em conjunto, Cliente → API → Serviço → Banco de dados, com API e serviço enviando eventos a Logs/SIEM.
Trust boundaries e pontos de controle
A primeira trust boundary fica entre cliente e API. Todo campo recebido é não confiável, mesmo quando a interface oficial não o exibe.
A segunda fica entre API e serviço. A API propaga identidade autenticada, mas o serviço continua responsável por autorizar a ação de negócio.
A terceira separa serviço e banco. A identidade técnica recebe apenas as operações necessárias, e consultas usam parâmetros e contratos controlados.
O pipeline de logs cruza outra fronteira. Ele recebe somente eventos estruturados e redigidos, com acesso limitado e retenção definida.
| Fronteira | Controle preventivo | Evidência | Sinal de detecção |
|---|---|---|---|
| Cliente → API | Schema com allowlist, HTTPS e autenticação | Teste de contrato e configuração TLS | Campo inesperado e falha de autenticação |
| API → Serviço | Autorização por ação e recurso | Testes de permissão | Recusas repetidas ou função sensível incomum |
| Serviço → Banco | Menor privilégio e consultas parametrizadas | Política da conta e testes de integração | Erro de consulta e acesso fora do padrão |
| Aplicação → Logs/SIEM | Evento estruturado e redação de dados | Amostra de evento e regra de alerta | Ausência de evento ou correlação disparada |
Roteiro do laboratório
| Passo | Atividade | Saída esperada |
|---|---|---|
| 1 | Compreender o contexto | Jornadas, papéis, restrições e consequência de falha |
| 2 | Identificar ativos | Dados, funções, credenciais, serviço e evidências |
| 3 | Desenhar o fluxo | Componentes, chamadas e armazenamento |
| 4 | Identificar trust boundaries | Mudanças de confiança, identidade ou controle |
| 5 | Localizar vulnerabilidades | Fraquezas reproduzíveis em ambiente autorizado |
| 6 | Relacionar ameaça e impacto | Cenário completo, sem confundir causa e consequência |
| 7 | Classificar o risco | Critérios contextuais e incertezas registradas |
| 8 | Relacionar OWASP e CWE | Categoria e fraqueza somente quando adequadas |
| 9 | Propor controles | Mudanças de design, código, configuração e processo |
| 10 | Definir prevenção | Como reduzir probabilidade ou alcance |
| 11 | Definir detecção | Eventos, regras, responsáveis e limiares |
| 12 | Definir resposta | Triagem, contenção, investigação e comunicação |
| 13 | Definir evidências e aceite | Testes e observações que comprovam o controle |
| 14 | Priorizar o tratamento | Urgência, dependências, custo e redução de risco |
| 15 | Registrar risco residual | Exposição restante, responsável e revisão |
Inventário de ativos
Ativos não são apenas tabelas. No Portal Farol, a função administrativa, a integridade dos papéis, a disponibilidade das reservas, o pipeline de entrega e a capacidade de investigar eventos também possuem valor.
| Ativo | Valor protegido | Proprietário no cenário |
|---|---|---|
| Perfil e papel | Impedir elevação indevida de privilégio | Time de identidade |
| Função de suspensão | Evitar interrupção ou abuso administrativo | Operações do produto |
| Reservas | Preservar integridade e disponibilidade | Time de domínio |
| Pipeline e artefatos | Entregar somente software aprovado | Plataforma |
| Logs de segurança | Sustentar detecção e investigação | Operação de segurança |
Registro dos achados
O mapeamento abaixo usa o OWASP Top 10:2021. CWE aparece apenas quando a fraqueza é suficientemente clara; uma categoria não substitui a descrição da causa.
| ID | Achado | Categoria e fraqueza relacionadas | Consequência principal |
|---|---|---|---|
| F-01 | Mass assignment aceita o campo interno role | A01; CWE-915 | Elevação de privilégio e perda de integridade |
| F-02 | Endpoint administrativo autentica, mas não autoriza a função | A01; CWE-862 | Usuário comum executa ação privilegiada |
| F-03 | Regra assume que toda identidade autenticada está autorizada | A01; CWE-862 | Controle de acesso inconsistente em novos fluxos |
| F-04 | Documento chama Basic Auth com Base64 de criptografia | A02; exposição de credencial | Decisão cria falsa sensação de proteção |
| F-05 | Aplicação aceita HTTP e não publica HSTS | A02; CWE-319 | Tráfego e credenciais podem ficar sem proteção |
| F-06 | Prepared statements existem, mas a propriedade do recurso não é validada | A01; CWE-862 | Consulta segura ainda devolve ou altera recurso indevido |
| F-07 | Relatório concatena um campo de ordenação à consulta | A03; CWE-89 | Estrutura SQL pode ser influenciada por entrada |
| F-08 | Configuração registra RSA-256 sem esquema ou tamanho adequado | A02; CWE-327 | Proteção criptográfica inadequada ou ambígua |
| F-09 | Dado legado utiliza DES | A02; CWE-327 | Algoritmo arriscado protege informação atual |
| F-10 | Operação privilegiada não gera evento útil | A09; CWE-778 | Detecção e investigação ficam incompletas |
| F-11 | Dependência implantada possui vulnerabilidade conhecida aplicável | A06 | Componente expõe o serviço até tratamento |
Achado 1: mass assignment
O handler frágil copia todas as propriedades recebidas. A interface não mostra role, mas isso não é uma fronteira de segurança.
// Frágil: o cliente escolhe quais atributos chegam à entidade.
await users.update(request.user.id, request.body);A correção cria um contrato explícito. Mudança de papel pertence a outro caso de uso, com autorização e auditoria próprias.
const input = {
displayName: String(request.body.displayName),
};
await users.updateProfile(request.user.id, input);O teste envia uma propriedade não prevista e espera rejeição ou descarte seguro conforme o contrato. Depois, lê o usuário e confirma que o papel permaneceu inalterado.
Decisão por cenário
Cenário: o teste encontra role no corpo
A API atualiza o nome corretamente, mas também persiste o papel enviado pelo cliente. Qual ação fecha a causa?
Achados 2, 3 e 6: autenticação não é autorização
O endpoint /admin/users/{id}/suspend valida a sessão, mas não a permissão. O defeito se repete porque a arquitetura trata identidade autenticada como autorização global.
Prepared statements protegem a estrutura da consulta usada pelo endpoint. Eles não verificam se a pessoa pode suspender aquela conta.
if (!authorization.can(request.user, "user:suspend", request.params.id)) {
return response.status(403).json({ code: "FORBIDDEN" });
}
await users.suspendById(request.params.id);O aceite inclui testes de usuário comum, operador, recurso fora do escopo e identidade sem sessão. A aplicação precisa diferenciar autenticação, autorização funcional e autorização sobre o recurso.
Verifique seu entendimento
Se o endpoint usa prepared statements e exige login, o controle de acesso está completo.
Resposta: Falso. Parametrização reduz Injection e login estabelece identidade; a permissão por ação e recurso ainda precisa ser verificada.
Achados 4 e 5: transporte e Basic Auth
Basic Auth codifica usuário e senha em Base64. O desenho só pode utilizá-lo em contexto apropriado e sobre HTTPS; Base64 não é criptografia.
O Portal Farol aceita requisições HTTP e faz redirecionamento sem HSTS. O plano exige HTTPS em toda a aplicação, redirecionamento seguro quando necessário, HSTS após validação da cobertura e eliminação de conteúdo misto.
Critérios de aceite incluem certificado válido, ausência de endpoint funcional apenas em HTTP, cabeçalho HSTS com política aprovada e teste de que credenciais nunca aparecem em URL ou logs.
Achado 7: SQL Injection em outro fluxo
O endpoint administrativo utiliza prepared statements, mas um relatório separado concatena o campo de ordenação. Não é necessário criar um payload ofensivo para demonstrar a causa: o dado controla a estrutura da consulta.
Campos estruturais não usam parâmetro da mesma forma que valores. O código mapeia opções públicas para identificadores conhecidos.
const allowedSort = {
createdAt: "created_at",
room: "room_name",
} as const;
const sortColumn = allowedSort[request.query.sort as keyof typeof allowedSort] ?? "created_at";
const result = await database.query(`SELECT id, room_name FROM bookings ORDER BY ${sortColumn}`);A allowlist é pequena e controlada pelo servidor. Valores de filtro continuam parametrizados. Revisão e testes verificam opções aceitas e rejeitam qualquer estrutura fora do contrato.
Achados 8 e 9: RSA-256 e DES
RSA-256 não descreve uma configuração suficiente. Se indicar chave RSA de 256 bits, é inadequada; se a intenção for combinação com SHA-256, ainda faltam esquema, padding, tamanho de chave, finalidade e política de rotação.
DES também não deve proteger dados atuais. O tratamento começa com inventário de dados, chaves, integrações e compatibilidade; seleciona algoritmo e biblioteca aprovados; migra registros; rotaciona chaves; e verifica que dados antigos não permanecem dependentes do mecanismo legado.
O aceite não é “a configuração mudou”. Evidências incluem teste de interoperabilidade, inventário sem uso residual, rotação executada, acesso às chaves auditado e plano de reversão testado.
Achado 10: logging insuficiente
Suspensão de conta e mudança de papel precisam produzir evento estruturado. O evento registra ator, ação, alvo, resultado, correlação e horário. Senhas, tokens e dados pessoais desnecessários não entram no log.
O SIEM correlaciona tentativas de alteração de role, recusas em endpoint administrativo e uma operação privilegiada bem-sucedida. A regra possui responsável, severidade, playbook e teste controlado.
Detecção sem resposta apenas acumula alertas. O playbook orienta validar a identidade, conter sessão quando necessário, preservar evidências, revisar alterações e comunicar responsáveis.
Achado 11: dependência vulnerável
O laboratório assume uma dependência com vulnerabilidade conhecida e aplicável, sem inventar um identificador CVE. O time confirma versão, alcance do código, exposição e orientação do mantenedor.
O tratamento pode ser atualizar, substituir, desabilitar a funcionalidade afetada ou aplicar mitigação temporária. A decisão registra prazo, proprietário, teste de regressão e risco residual.
Uma Software Bill of Materials (SBOM) atualizada ajuda a localizar onde o componente está implantado. Software Composition Analysis (SCA) alerta sobre informações conhecidas, mas o analista confirma aplicabilidade e prioridade.
Cadeia de ataque e attack tree
A cadeia torna explícita a progressão:
Ativo: função administrativa
→ Ameaça: usuário tenta ampliar privilégios
→ Vulnerabilidade: role aceito e autorização ausente
→ Incidente: conta comum executa suspensão
→ Impacto: indisponibilidade para usuários e perda de integridadeA attack tree mostra caminhos alternativos para o mesmo objetivo.
Objetivo: executar função administrativa
├── Enviar role por mass assignment
├── Chamar endpoint autenticado sem autorização
└── Obter credencial em transporte inseguro
├── Usar HTTP
└── Ausência de política HSTS após acesso seguroO controle mais valioso pode cortar vários ramos. Autorização por ação e recurso bloqueia a função mesmo se outro dado estiver incorreto; HTTPS reduz exposição de credencial; allowlist de propriedades impede a elevação pelo perfil.
Classificação e plano de tratamento
Os níveis deste exercício pertencem ao Portal Farol. “Alto” e “médio” não são valores universais.
| ID | Ativo | Achado | Ameaça | Impacto | Probabilidade | Risco | Controle | Evidência |
|---|---|---|---|---|---|---|---|---|
| F-01 | Papel do usuário | role por mass assignment | Elevação de privilégio | Integridade e acesso | Alta | Alto | DTO com allowlist e fluxo separado | Teste mantém papel original |
| F-02 | Função admin | Endpoint sem autorização | Abuso por usuário comum | Suspensão indevida | Alta | Crítico | Política por ação e recurso | Matriz de testes retorna 403 |
| F-03 | Modelo de acesso | Autenticado tratado como autorizado | Novos handlers repetem a falha | Exposição sistêmica | Média | Alto | Padrão central e revisão de design | Testes de política no pipeline |
| F-04 | Credencial | Base64 tratado como criptografia | Interceptação de credencial | Sequestro de sessão | Média | Alto | HTTPS e correção da documentação | Teste de transporte e revisão |
| F-05 | Canal | HTTP sem HSTS | Downgrade ou tráfego exposto | Confidencialidade | Média | Alto | HTTPS integral e HSTS | Scanner de cabeçalhos e teste manual |
| F-06 | Reserva | Consulta segura sem propriedade | Acesso a recurso alheio | Exposição ou alteração | Alta | Alto | Autorização por proprietário | Teste entre dois usuários sintéticos |
| F-07 | Relatório | Ordenação concatenada | Manipulação da estrutura SQL | Dados e disponibilidade | Média | Alto | Allowlist e valores parametrizados | Teste de contrato e revisão de consulta |
| F-08 | Chaves | RSA-256 ambíguo | Quebra ou uso incorreto | Confidencialidade e integridade | Média | Alto | Padrão criptográfico explícito | Inventário e teste de interoperabilidade |
| F-09 | Dados legados | DES | Quebra de proteção | Exposição de dados | Média | Alto | Migração e rotação de chaves | Relatório sem uso residual |
| F-10 | Auditoria | Logging insuficiente | Abuso não observado | Resposta tardia | Alta | Alto | Eventos, correlação e playbook | Alerta controlado chega ao responsável |
| F-11 | Serviço | Dependência vulnerável | Exploração do componente | Conforme função afetada | Média | Alto | Atualizar ou mitigar com prazo | SBOM, versão e teste de regressão |
Prevenção, detecção, resposta e recuperação
| Achados | Prevenção | Detecção | Resposta | Recuperação |
|---|---|---|---|---|
| Acesso e mass assignment | Allowlist e autorização no servidor | Campo inesperado, recusas e mudança de papel | Revogar sessão e investigar alterações | Restaurar papéis e validar objetos afetados |
| Transporte e criptografia | HTTPS, HSTS e padrões aprovados | Falha TLS, endpoint HTTP e configuração divergente | Bloquear canal, rotacionar segredo exposto | Reemitir credenciais e concluir migração |
| SQL Injection | Allowlist estrutural e parâmetros | Erros e padrões anômalos de consulta | Desabilitar fluxo e preservar evidências | Validar integridade e reabrir com teste |
| Logging e dependência | Eventos obrigatórios, SBOM e atualização | Teste de alerta e nova vulnerabilidade aplicável | Acionar playbook e mitigação | Confirmar versão, serviço e evidências finais |
Critérios de aceite
Um critério precisa ser observável. “Corrigir autorização” é uma intenção; “usuário member recebe 403 e nenhuma alteração ocorre” é verificável.
| Controle | Critério de aceite | Evidência preservada |
|---|---|---|
| Allowlist de perfil | Campo não previsto não altera entidade | Teste automatizado e estado consultado |
| Autorização admin | Somente operador no escopo executa ação | Matriz de identidade, ação e recurso |
| HTTPS e HSTS | Nenhum fluxo sensível opera em HTTP | Configuração, cabeçalho e teste de rota |
| SQL seguro | Opções estruturais ficam na allowlist | Testes e revisão da consulta gerada |
| Criptografia | Algoritmo, esquema, chave e rotação são explícitos | Inventário e execução de migração |
| Logging | Evento chega ao SIEM e dispara regra testada | Evento sintético, alerta e registro de triagem |
| Dependência | Versão afetada deixa os artefatos implantados | SBOM, build e teste de regressão |
Priorização e risco residual
F-02 recebe prioridade imediata porque uma identidade comum alcança função administrativa. F-01 e F-06 compartilham a mesma fronteira de controle e podem entrar no mesmo esforço de autorização, sem esconder critérios separados.
F-05, F-08 e F-09 exigem plano de migração para evitar indisponibilidade ou perda de compatibilidade. Controles temporários não encerram o achado; eles reduzem exposição até a solução definitiva.
Desafio de decisão
Qual é a primeira onda de tratamento?
O time consegue entregar uma mudança curta agora e planejar migrações de infraestrutura no próximo ciclo.
A recomendação considera apenas este contexto; mudanças nas restrições podem mudar a decisão.
O risco residual de uma correção de autorização pode incluir contas de operador comprometidas. Por isso permanecem autenticação forte, revisão de acesso, eventos, alertas e resposta.
Cada risco residual registra proprietário, justificativa, controles ativos, prazo de revisão e gatilhos para reavaliação, como nova exposição, incidente ou mudança de arquitetura.
Referências
- OWASP Top 10:2021 — categorias de riscos de aplicações web.
- MITRE CWE-915 — Improperly Controlled Modification of Object Attributes — fraqueza associada a mass assignment.
- MITRE CWE-862 — Missing Authorization — ausência de verificação de autorização.
- MITRE CWE-89 — SQL Injection — fraqueza de neutralização em comandos SQL.
- MITRE CWE-327 — Broken or Risky Cryptographic Algorithm — uso de algoritmo criptográfico arriscado.
- RFC 7617 — The Basic HTTP Authentication Scheme — Basic Auth e Base64.
- OWASP Threat Modeling Project — processo e recursos para modelagem de ameaças.
Conclusão
Um achado técnico só se torna tratável quando está ligado a ativo, ameaça, impacto e contexto. Classificações OWASP e CWE ajudam a comunicar, mas não substituem a descrição da causa nem a evidência de correção.
O Portal Farol mostrou que mass assignment, autorização, transporte, criptografia, consultas, logging e dependências formam caminhos conectados. O tratamento precisa combinar prevenção, detecção, resposta, recuperação e risco residual explícito.
Revisão do artigo
Pontos principais
- — O fluxo completo liga achado, risco, controle, evidência e risco residual.
- — Trust boundaries orientam validação, autorização, menor privilégio e telemetria.
- — Prevenção, detecção, resposta e recuperação precisam ser planejadas em conjunto.