Categorias
Kernel

Falha de segurança no Linux: randomização de cache usava semente fixa, corrigido no kernel 6.15

Correção no Linux 6.15 resolve falha de segurança onde a randomização de cache usava inadvertidamente a mesma semente, comprometendo a eficácia da proteção contra exploits de memória.

Uma correção importante foi incluída nos primeiros pull requests para o ciclo do kernel Linux 6.15, visando resolver uma falha de segurança que comprometia a eficácia da randomização de cache. A falha, descoberta por engenheiros do Google, afetava a função kvmalloc e resultava no uso da mesma semente de randomização, tornando a proteção CONFIG_RANDOM_KMALLOC_CACHES ineficaz.

A funcionalidade CONFIG_RANDOM_KMALLOC_CACHES foi projetada para criar múltiplas cópias de caches SLAB e selecionar aleatoriamente uma delas com base no endereço do código, dificultando a exploração de vulnerabilidades de memória. No entanto, a falha fazia com que a mesma semente aleatória fosse sempre utilizada, comprometendo a aleatoriedade da seleção.

“Isso é problemático porque __kmalloc_node usará o endereço de retorno como semente para derivar o cache aleatório a ser usado. Como todas as chamadas para kvmalloc_node usarão a mesma semente quando o tamanho for grande, a proteção se torna completamente inútil,” explicam os comentários no código do Google.

Gong Ruiqi, da Huawei, que desenvolveu a solução para o problema, explicou:

“Isso significa literalmente que todo kmalloc invocado via kvmalloc usaria a mesma semente para randomização de cache (CONFIG_RANDOM_KMALLOC_CACHES), o que torna essa proteção não funcional.

A causa raiz desse problema, na minha opinião, é que usar RET_IP sozinho não consegue identificar o local de alocação real no caso de kmalloc ser chamado dentro de wrappers não in-line ou funções auxiliares. E acredito que pode haver casos semelhantes em outras funções. No entanto, não pensei em nenhuma boa solução para isso. Então, por enquanto, vamos resolver este caso específico primeiro.

Para __kvmalloc_node_noprof, substitua __kmalloc_node_noprof e chame __do_kmalloc_node diretamente, para que RET_IP possa pegar o endereço de retorno de kvmalloc e diferenciar cada invocação de kvmalloc.”

Com as atualizações SLAB pendentes para a janela de mesclagem do Linux 6.15, essa falha será corrigida e, presumivelmente, será retroportada para kernels estáveis existentes para resolver essa proteção de segurança ineficaz.

Links relevantes:

Por Emanuel Negromonte

Fundador do SempreUPdate. Acredita no poder do trabalho colaborativo, no GNU/Linux, Software livre e código aberto. É possível tornar tudo mais simples quando trabalhamos juntos, e tudo mais difícil quando nos separamos.

Sair da versão mobile