Skip to content

MASWE-0023: Padding Arriscado

Content in BETA

This content is in beta and still under active development, so it is subject to change any time (e.g. structure, IDs, content, URLs, etc.).

Send Feedback

Visão Geral

Ataques de oráculo de preenchimento (padding oracle attacks) são um tipo de exploração de canal lateral que permite aos atacantes descriptografar ou manipular dados sem conhecer a chave. Esses ataques não ocorrem porque o esquema de preenchimento em si está quebrado, mas surgem quando o aplicativo revela se ocorreu um erro de preenchimento (por meio de mensagens de erro ou diferenças de tempo), criando um oráculo. Ao enviar textos cifrados modificados e observar a resposta do aplicativo, um atacante pode recuperar gradualmente o texto simples ou forjar textos cifrados, comprometendo tanto a confidencialidade quanto a integridade.

Abaixo estão dois exemplos comuns de contextos criptográficos em que o preenchimento arriscado pode se tornar um problema:

  • Criptografia Simétrica: Em modos de cifra de bloco (por exemplo, AES-CBC), o preenchimento PKCS#7 é amplamente utilizado e não está quebrado (não é proibido pelo NIST). No entanto, torna-se vulnerável a ataques de oráculo de preenchimento se o sistema vazar mensagens de erro detalhadas ou diferenças de tempo. Para mitigar isso, os criptógrafos geralmente usam modos de criptografia autenticados como AES-GCM ou combinam AES-CBC com uma verificação de integridade separada (por exemplo, HMAC em um esquema Encrypt-then-MAC).
  • Criptografia Assimétrica: Com RSA, o PKCS#1 v1.5 é conhecido por ser suscetível a ataques como Bleichenbacher (baseados em oráculos de preenchimento). Esse esquema mais antigo agora é desencorajado ou proibido por vários padrões (por exemplo, consulte RFC 8017, Seção 7.2 de novembro de 2016 ou NIST SP 800-131A Rev.2, Seção 6 de março de 2019).

No entanto, simplesmente usar um esquema de preenchimento suscetível a ataques de oráculo de preenchimento não garante uma vulnerabilidade. Como mencionado acima, o aplicativo também deve vazar informações (o "oráculo") que indiquem se ocorreu um erro de preenchimento. Se ambas as condições forem atendidas, os atacantes podem usar esses sinais para recuperar dados confidenciais ou criar textos cifrados maliciosos.

Impacto

  • Perda de Integridade: Os atacantes podem modificar textos cifrados, explorando o oráculo de preenchimento para enganar o sistema e fazer com que aceite dados alterados maliciosamente, levando a modificações não autorizadas de dados.
  • Perda de Confidencialidade: Os atacantes podem usar o oráculo de preenchimento para descriptografar iterativamente informações sensíveis, como senhas ou tokens de sessão, levando à exposição de dados confidenciais.

Modos de Introdução

  • Preenchimento Não Autenticado para Criptografia Simétrica: Usar esquemas de preenchimento como PKCS#7 sem autenticar o texto cifrado (por exemplo, com HMAC) permite ataques de oráculo de preenchimento em modos como AES-CBC.
  • Preenchimento Arriscado em Criptografia Assimétrica: Usar esquemas como PKCS#1 v1.5 para criptografia RSA sem tratamento estrito e uniforme de textos cifrados inválidos permite ataques de oráculo.
  • Exposição de Erros Criptográficos: Revelar mensagens de erro detalhadas ou variações de tempo durante a descriptografia pode vazar informações exploráveis por atacantes.

Mitigações

  • Use Modos de Criptografia Simétrica Autenticados: Prefira modos de criptografia autenticados como AES-GCM, que eliminam a necessidade de validação de preenchimento separada e incorporam verificações de integridade. Se AES-CBC precisar ser usado, adote o paradigma Encrypt-then-MAC (por exemplo, anexe HMAC). Consulte NIST SP 800-175B Rev.1, Seção 4.3.
  • Use Esquemas de Preenchimento Seguros para Criptografia Assimétrica: Substitua esquemas arriscados como PKCS#1 v1.5 por outros seguros, como OAEP (Optimal Asymmetric Encryption Padding). Consulte NIST SP 800-56B Rev.2, Seção 7.2.2.
  • Não Exponha Erros Criptográficos: Não exponha mensagens de erro criptográficas, como erros de preenchimento, aos usuários. Isso impede que atacantes obtenham pistas sobre a correção do preenchimento.