A VUSec relata dois exploits de prova de conceito contra o kernel Linux usando Branch Target Reuse (BTR), uma técnica Spectre-v2 que explora previsões antigas de desvios após a reutilização de código JIT. No exploit detalhado para o cBPF do Linux, a taxa de vazamento chegou a 8 bytes por segundo em CPUs Intel modernas.
O que é Branch Target Reuse (BTR)
BTR é uma técnica de execução especulativa — quando o processador antecipa o caminho de um programa antes de confirmar qual instrução deve executar. A VUSec descreve a técnica como uma forma de Spectre-v2 voltada a mecanismos JIT, que compilam código durante a execução de um programa.
O processador usa um buffer de destinos de desvio (BTB, na sigla em inglês) para prever o destino de desvios indiretos. Quando um mecanismo JIT libera uma região de código, uma previsão antiga pode permanecer no BTB. Se a memória for reutilizada para código novo, essa previsão pode direcionar a execução especulativa a um ponto inadequado do código recém-gerado.
Como uma previsão antiga alcança código JIT reutilizado
Na sequência descrita pela VUSec, um desvio indireto é treinado para apontar a um trecho de código JIT. Esse trecho é liberado e, depois, outro código ocupa uma parte do mesmo endereço. Se a entrada antiga continuar no BTB e o processador a selecionar, a execução especulativa pode entrar no código novo em um deslocamento obsoleto ou desalinhado.
A técnica depende de condições específicas: o invasor precisa conseguir executar código sem privilégios em um mecanismo JIT, e a previsão antiga precisa sobreviver e ser selecionada. A VUSec demonstra que essa combinação pode permitir a divulgação especulativa de dados; o resultado não significa que qualquer execução de Linux seja explorável.
O que a VUSec relata sobre o cBPF do Linux
A VUSec relata dois exploits de ponta a ponta em prova de conceito contra o kernel Linux. O detalhado usa programas cBPF — a versão clássica do Berkeley Packet Filter — instalados como filtros seccomp. Para esse exploit em CPUs Intel modernas, a taxa de vazamento informada é de 8 bytes por segundo.
A demonstração também recuperou o hash da senha de root no processo su, depois que su root carregou o hash na memória. Esse resultado descreve uma demonstração de pesquisa, não um ataque observado em uso amplo.
Resultados diferentes para SpiderMonkey e GraalVM
Além do cBPF do Linux, a VUSec avaliou o SpiderMonkey, mecanismo JIT usado pelo Firefox, e o GraalVM. Os resultados variam entre os alvos: a taxa de 8 bytes por segundo pertence ao exploit cBPF descrito e não deve ser atribuída aos outros mecanismos.
Para o SpiderMonkey, a VUSec relata ataques viáveis e uma prova de conceito, com vazamento estimado em dezenas de bytes por segundo em CPUs Intel. Um exploit completo de ponta a ponta no navegador ainda exige mais trabalho, segundo a equipe.
No GraalVM, os pesquisadores obtiveram reutilização estável de endereços e acesso especulativo além de uma operação de mascaramento. Nos experimentos descritos, porém, a compilação e a coleta de lixo apagaram as entradas do BTB antes de serem usadas. A VUSec não considera esse resultado uma impossibilidade fundamental; a estratégia atribuída ao GraalVM randomiza as posições do cache de código JIT para dificultar a reutilização de regiões.
A mitigação do Linux descrita pela VUSec
A VUSec relata que desenvolvedores do kernel upstream incorporaram uma mitigação para x86. Quando um programa cBPF reutiliza uma região cBPF/eBPF executada anteriormente, a medida emite uma barreira de predição de desvios indiretos (IBPB) em todos os núcleos e desestimula a reutilização da região. Segundo a VUSec, ela se aplica com ou sem a tecnologia IBT habilitada.
A VUSec também relata que a Mozilla considerou medidas baseadas em IBPB enquanto priorizava a conclusão e a implantação do isolamento de sites.