🟡 Médio | Segurança | Auth
Problema
constant_time_compare compara strings hex (SHA-256) byte a byte (constant-time), mas a.len() != b.len() vaza informação de tamanho do hash.
Impacto
Extremamente baixo em prática (atacante precisaria de >10^6 requisições para extrair 64 chars), mas quebra a premissa de constant-time.
Evidência
src/api/auth/token.rs:131-138: if a.len() != b.len() { return false; }
Recomendação
Usar crate subtle ou constant_time_eq para comparação de bytes. Armazenar hash como [u8; 32] em vez de hex string.
Validação
validate_token com tokens de diferentes tamanhos deve levar o mesmo tempo (±5%).
Prioridade: Média
🟡 Médio | Segurança | Auth
Problema
constant_time_comparecompara strings hex (SHA-256) byte a byte (constant-time), masa.len() != b.len()vaza informação de tamanho do hash.Impacto
Extremamente baixo em prática (atacante precisaria de >10^6 requisições para extrair 64 chars), mas quebra a premissa de constant-time.
Evidência
src/api/auth/token.rs:131-138:if a.len() != b.len() { return false; }Recomendação
Usar crate
subtleouconstant_time_eqpara comparação de bytes. Armazenar hash como[u8; 32]em vez de hex string.Validação
validate_tokencom tokens de diferentes tamanhos deve levar o mesmo tempo (±5%).Prioridade: Média