O OWASP Top 10, 2025

Prévia grátis 5 min de leitura

Trabalho de segurança sem um arcabouço é uma lista das coisas de que você por acaso lembrou. O OWASP Top 10 é o arcabouço que a maior parte do setor usa. É uma lista ordenada das categorias de fraqueza que causam vazamentos, revisada a cada poucos anos a partir de dados reais.

A versão atual é a de 2025, e não é a lista que você talvez tenha decorado:

Categoria
A01:2025 Broken Access Control
A02:2025 Security Misconfiguration
A03:2025 Software Supply Chain Failures
A04:2025 Cryptographic Failures
A05:2025 Injection
A06:2025 Insecure Design
A07:2025 Authentication Failures
A08:2025 Software or Data Integrity Failures
A09:2025 Security Logging and Alerting Failures
A10:2025 Mishandling of Exceptional Conditions

Repare em duas entradas antes de tudo, porque dizem o que mudou no jeito como software é atacado.

A03, Software Supply Chain Failures, é o antigo "componentes com vulnerabilidades conhecidas" crescido em algo bem maior. Agora ele cobre "breakdowns or other compromises in the process of building, distributing, or updating software": as suas dependências, mas também a sua CI, o seu armazenamento de artefatos e o seu próprio notebook. A aula 5 é sobre isso. Ele subiu na lista porque os ataques agora miram as máquinas que constroem software, e não só o software.

A10, Mishandling of Exceptional Conditions, é novo. Ele cobre o que acontece quando a sua aplicação não sabe o que fazer. Exemplos são erros que falham abrindo a porta, mensagens de exceção que vazam detalhes internos, operações de vários passos sem rollback. O resumo do próprio documento é a frase para guardar: "Any time an application is unsure of its next instruction, an exceptional condition has been mishandled."

O que o Rails te dá, e o que não

Boa parte dessa lista é tratada pelo framework se você ficar nos caminhos que ele oferece.

Categoria Contribuição do Rails
A05 Injection Consultas parametrizadas, views escapadas por padrão
A04 Cryptographic Failures has_secure_password, credenciais criptografadas, force_ssl
A08 Integrity Failures Cookies assinados, Gemfile.lock, proteção CSRF
A02 Misconfiguration Padrões sensatos de produção, filter_parameters
A01 Broken Access Control Nada. Esta é inteiramente sua

Essa última linha é por que A01 é a primeira da lista e por que a aula 2 é sobre ela. O Rails deixa alegremente um controller carregar qualquer registro por id para qualquer pessoa. O motivo é que decidir quem pode ver o quê é uma pergunta de domínio e o framework não tem opinião sobre o seu domínio.

flowchart TB
  R["Padrões do Rails"] --> I["Injeção: quase tudo tratado"]
  R --> C["Criptografia: quase tudo tratado"]
  R --> M["Configuração: bons padrões, fáceis de desfazer"]
  R -.->|"nada"| AC["Controle de acesso: inteiramente seu"]
  AC --> D["As suas políticas de domínio decidem quem pode o quê"]

Onde esta aplicação já está

Este repositório fez várias dessas coisas de propósito, e elas valem ser lidas como exemplos e não como lista de conferência.

A política de senha mora num lugar só, Auth::PasswordPolicy, com os limites de tamanho e um formato exigindo minúscula, maiúscula, dígito e símbolo. Uma definição, usada pelo model, pela view e pelo medidor de força: A07 tratado como decisão de design em vez de três cópias que se afastam.

A enumeração de pessoas é defendida de um jeito incomum e correto. O Identity::User define a mensagem de unicidade como "is not available" em vez do padrão do Rails, "has already been taken":

validates :email_address, uniqueness: { case_sensitive: false, message: "is not available" }

A mensagem padrão conta a quem ataca que um endereço está cadastrado. A substituta não conta, e não custa nada.

O transporte é coberto por force_ssl, assume_ssl e o comportamento de cookie seguro do curso de SSL.

As dependências recebem alguma atenção: o Dependabot abre pull requests de atualização para gems e GitHub Actions, e a CI roda bin/importmap audit nos pacotes JavaScript fixados. O outro scanner da CI, o bin/brakeman, confere o código da própria aplicação, não as dependências. Esse é o começo de A03, não o fim.

O objetivo de uma lista

O Top 10 não é uma certificação e não é suficiente. Ele é bom para cobertura: impede que o trabalho de segurança seja a lista de coisas que você acha interessantes. Também dá ao time um vocabulário comum sobre o que vale discutir.

Um jeito útil de segurá-lo: a maioria dos vazamentos é entediante. São checagens de acesso faltando, um padrão mal configurado, uma dependência que ninguém atualizou. Os ataques interessantes viram notícia justamente por serem raros. Um time que gasta a atenção ali enquanto publica um controller sem checagem de propriedade otimizou para a distribuição errada.

O que este curso cobre

  1. O OWASP Top 10, 2025 (esta aula).
  2. Controle de acesso quebrado, em Rails.
  3. Injeção e as formas modernas dela.
  4. Autenticação e sessões.
  5. Cadeia de suprimentos e dependências.
  6. Configuração, segredos e falhar com segurança.
  7. Juntando tudo: auditando esta aplicação.

Pontos-chave

  • A versão atual é o OWASP Top 10:2025, com Broken Access Control em primeiro e Security Misconfiguration em segundo.
  • A03 agora é Software Supply Chain Failures: todo o processo de construir e distribuir, não só gems desatualizadas.
  • A10, Mishandling of Exceptional Conditions, é novo: falhar abrindo, vazar detalhes internos e operações sem rollback.
  • O Rails cuida de boa parte de injeção, criptografia e integridade por padrão; de controle de acesso ele não cuida.
  • Este repositório já aplica uma política de senha única e mensagens de unicidade que não enumeram pessoas.
Aula 1 de 7 · grátis

Continue com a aula 2

Controle de acesso quebrado, em Rails

Mostra como dar escopo à consulta pela pessoa atual, proteger rotas de admin, revisar listas de permit e testar recusas.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...