Pular para o conteúdo
ecdsa.com

Confusão de algoritmo (confusão de chave)

Uma falha de verificação em que a biblioteca deixa o cabeçalho alg do token escolher o algoritmo, de modo que uma chave destinada a um algoritmo é usada com outro — o caso clássico é uma chave pública RSA usada como segredo HS256.
Também escrito comoalgorithm confusion attackkey confusionRS256 to HS256alg confusion

Se um serviço verifica tokens RS256 com verify(token, publicKeyPem) e a biblioteca também aceita HS256 com qualquer chave que receber, o atacante pega a chave pública (publicada no JWKS), calcula um HMAC sobre um cabeçalho e um payload forjados usando esses bytes como segredo e define "alg": "HS256"; o servidor então confere um HMAC válido. Tim McLean descreveu o ataque junto com o none em 2015, e variantes continuam aparecendo em novas bibliotecas e frameworks, inclusive por meio de JWKs embutidas no cabeçalho jwk do token.

A correção (RFC 8725 §3.1) é vincular cada chave a exatamente um algoritmo do lado do verificador: listas de algoritmos permitidos, objetos de chave tipados que não podem servir também como segredo HMAC, alg de cada JWK conferido com o do token e nunca escolher chaves a partir de jwk, jku ou x5u fornecidos pelo token sem uma decisão de confiança. Os nomes de algoritmo totalmente especificados da RFC 9864 eliminam a ambiguidade relacionada dos identificadores polimórficos, como EdDSA.

Padrões e referências

Todos os termos