
Exploit de escalonamento de privilégios no kernel Linux para CVE-2026-46242, um use-after-free por condição de corrida no epoll, com obtenção de root 99% confiável em desktops, servidores e dispositivos Android.

Um processo sem privilégios escalando para root no Google kernelCTF.
Bad Epoll (CVE-2026-46242) é uma race condition use-after-free no subsistema epoll
do kernel Linux. Este bug permite que um processo sem privilégios se torne root, não apenas em desktops e servidores Linux, mas também em dispositivos Android.
Bad Epoll foi reportado e explorado por Jaeyoung Chung como uma submissão 0-day ao Google kernelCTF, que recompensa um exploit do kernel Linux com $71.337+.
[!NOTE] A IA da Anthropic, Mythos, encontrou outro bug de race no mesmo código do epoll, mas perdeu Bad Epoll.
Um bug raro que pode dar root no Android. A maioria dos bugs de escalonamento de privilégio no Linux não consegue dar root no Android. O Copy Fail e suas variantes, por exemplo, precisam de módulos que o Android nunca carrega. Das cerca de 130 vulnerabilidades exploradas no kernelCTF do Google, apenas cerca de dez são candidatas a dar root no Android. Bad Epoll é uma delas.
Sem kill-switch. Copy Fail e suas variantes podem ser neutralizados descarregando seus módulos vulneráveis, mas o epoll não tem essa opção. É uma funcionalidade central do kernel na qual o sistema operacional, serviços de rede e navegadores confiam. A única maneira de corrigi-lo é aplicar o patch.
Janela de race minúscula, mas o ataque é 99% confiável. A janela de race do bug tem apenas cerca de seis instruções de largura, e uma tentativa normal quase nunca a acerta. O exploit amplia essa janela e executa um loop de repetição que nunca trava o kernel. O resultado é um exploit 99% confiável, como a visão geral do ataque abaixo descreve.
Um único commit em 2023 introduziu duas race conditions separadas no código do epoll, com apenas cerca de 2.500 linhas no total. Ambas se revelaram bugs críticos que podem levar ao escalonamento de privilégio.
A primeira foi encontrada pelo Mythos da Anthropic e reportada como CVE-2026-43074. Esse resultado é impressionante por si só, porque bugs de race no kernel são conhecidos por serem difíceis de encontrar. Mostrou a capacidade de um modelo de IA de fronteira em encontrar bugs de race. Um pesquisador independente posteriormente submeteu um exploit 1-day para ele ao kernelCTF.
A outra race é Bad Epoll, que Mythos perdeu. Dado que Mythos encontrou o primeiro bug neste pequeno caminho de código do epoll, é provável que tenha examinado a mesma área com profundidade significativa. Não podemos saber exatamente por que perdeu Bad Epoll, mas dois fatores provavelmente a tornaram difícil de encontrar.
A janela de race é minúscula. Tem apenas cerca de seis instruções de largura, então o interleaving exato das threads é difícil de imaginar mesmo ao olhar para o código vulnerável.
Havia pouca evidência em tempo de execução. Após a correção de CVE-2026-43074, o use-after-free de Bad Epoll geralmente não aciona o KASAN, o principal detector de erros de memória do kernel. Sem esse sinal, Mythos pode não ter tido confiança suficiente para reportá-lo como um bug real.
Bad Epoll também foi difícil de corrigir. O primeiro patch dos mantenedores não corrigiu completamente o problema, e um patch correto só foi publicado dois meses após o bug ser reportado pela primeira vez. Isso é muito tempo para um kernel que geralmente lida com problemas de segurança com urgência.
No geral, Bad Epoll mostra como as race conditions são difíceis em todas as etapas. Elas são difíceis de encontrar mesmo para um modelo de fronteira, difíceis de corrigir corretamente e, como a próxima seção mostra, difíceis de explorar de forma confiável. Também sugere uma direção de pesquisa de vulnerabilidades que ainda vale a pena explorar na presença de modelos de IA de fronteira: descobrir o verdadeiro impacto de segurança por trás de condições de temporização estreitas e evidências fracas.
Aqui está uma visão geral de alto nível do ataque, para os curiosos.
Dois objetos epoll ligados. Fechar ambos ao mesmo tempo aciona a race.
Dois dos caminhos de fechamento do epoll são executados ao mesmo tempo e colidem. Um libera um objeto enquanto o outro ainda está escrevendo nele, e isso é o use-after-free (UAF).
A janela de race e como o exploit a direciona.
O exploit usa quatro objetos epoll agrupados em dois pares. Um par aciona a race, enquanto o outro se torna a vítima. A partir daí, o exploit transforma a escrita UAF de 8 bytes em um UAF em um objeto de arquivo e usa um ataque cross-cache para controlar completamente o conteúdo do arquivo.
Transformando o bug em uma leitura arbitrária de memória do kernel através de /proc/self/fdinfo.
Com esse controle, o exploit obtém uma leitura arbitrária da memória do kernel através de /proc/self/fdinfo. Finalmente,
sequestra o fluxo de controle e executa uma cadeia ROP para obter um shell root.
Mais detalhes estão disponíveis no writeup completo do exploit e no código.
Como o epoll não pode ser desabilitado, Bad Epoll não tem uma solução alternativa simples. O único remédio é aplicar o patch.
a6dc643c6931,
ou o backport da sua distribuição assim que estiver disponível.Bad Epoll foi introduzido por
58c9b016e128 (2023-04-08)
e corrigido por
a6dc643c6931 (2026-04-24).
Muitas distribuições Linux podem ser afetadas se usarem kernels baseados em v6.4 ou mais recentes e ainda não tiverem backportado a correção. Verifique as atualizações de segurança do kernel da sua distribuição para um backport do commit de correção acima. Kernels mais antigos baseados em v6.1 não são afetados porque o bug foi introduzido no v6.4.
O exploit atual foi escrito para os seguintes alvos do Google kernelCTF.
lts-6.12.67 (LTS), 99% confiávelcos-121-18867.294.100 (COS), 98% confiávelO exploit para Android ainda está em andamento.
O nome segue a série "Bad" de bugs do kernel que dão root no Android, cujas entradas anteriores incluem Bad Binder, Bad IO_uring e Bad Spin. Bad Epoll é a contraparte do epoll.
Esta página é a versão curta. Você pode encontrar a análise completa da causa raiz, o writeup do exploit e o código do exploit nos links a seguir.
Bad Epoll foi reportado e explorado por Jaeyoung Chung.
Muito obrigado ao nosso grupo de pesquisa, CompSec Lab, e especialmente a Eulgyu Kim, Woohyuk Choi, Dae R. Jeong e meu orientador Byoungyoung Lee, pela orientação e apoio.
| Data | Evento |
|---|
| 2023-04-08 | O bug foi introduzido no epoll (commit 58c9b016e128). |
| 2026-02-17 | Reportamos o bug para [email protected]. |
| 2026-02-17 | Os mantenedores propuseram um protótipo de patch, mas não era uma correção correta e a discussão então parou. |
| 2026-04-02 | A correção para o bug que Mythos encontrou (CVE-2026-43074) foi incorporada na mainline. |
| 2026-04-22 | Reportamos novamente o problema restante. |
| 2026-04-24 | A correção para este bug foi incorporada na mainline (commit a6dc643c6931). |