← volver
CVE-2014-3153highbajo ataque

CVE-2014-3153

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 7.8epss 37%
de la publicación al arma47 días
Publicada en NVD7 jun
1ª PoC+47d
metasploit3 may
CISA KEV+2909d
probabilidad de explotación
37%top 2% de las CVE
explotación observada
CISA + VulnCheck
20 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-06-15

Apply updates per vendor instructions.

Resumen

Falha no subsistema futex do kernel Linux que permite a um usuário local sem privilégios escalar para execução de código em ring 0, geralmente terminando em root. Ficou famosa como base do Towelroot, ferramenta de root para dispositivos Android, e é citada por pesquisadores da época como uma das falhas de kernel Linux mais graves da década por funcionar mesmo dentro de sandboxes restritos, já que futex é primitiva usada pelo pthread da glibc e costuma estar acessível.

Detalle técnico

O bug está em kernel/futex.c, na função futex_requeue, usada pela operação FUTEX_REQUEUE_PI. A chamada recebe dois endereços de futex (uaddr1 e uaddr2) e deveria garantir que são distintos antes de mover ('requeue') um waiter da fila do primeiro para a fila do segundo com semântica PI (priority inheritance). O código não validava essa condição: um processo podia invocar FUTEX_REQUEUE_PI passando o mesmo endereço para uaddr1 e uaddr2 (ou endereços que mapeiam para a mesma chave interna, no caso de futexes compartilhados/shared).

Cómo se explota

O vetor é 100% local: o atacante precisa apenas de capacidade de executar syscalls arbitrárias como usuário sem privilégios — não requer configuração especial, serviço de rede exposto ou CVE encadeada de acesso inicial. Isso inclui contextos de sandbox restritos (containers, sandboxes de browser/app), porque futex é usado internamente pela implementação de mutex da glibc e normalmente não é bloqueado por seccomp em configurações comuns da época.

A exploração pública demonstrada consiste em usar FUTEX_REQUEUE_PI com uaddr1 igual a uaddr2 (ou chaves colidentes) para deixar uma estrutura de waiter em estado inconsistente na pilha do kernel; syscalls subsequentes manipulam essa estrutura antes que ela seja processada na função de wake-up, corrompendo estado interno do kernel. Dependendo da técnica, o resultado varia de kernel panic (DoS) a corrupção controlada que leva à execução de código em modo kernel — é essa segunda via que foi usada no Towelroot e em PoCs públicas, incluindo módulo Metasploit.

Há exploração ativa confirmada (a falha está no catálogo KEV da CISA), e existe PoC pública amplamente disponível, o que torna a barreira de exploração baixa para quem tem acesso a shell não privilegiado em kernel vulnerável.

Versiones

Afectadas
Kernel Linux até 3.14.5 (conforme a descrição oficial da CVE); a falha existe desde a introdução do requeue PI em versões anteriores do futex.c.
Corregidas en
Corrigido no upstream pelo commit e9c243a5a6de0be8e584c604d353412584b592f8. Backports específicos foram publicados por distribuições via seus próprios canais de erratas (Oracle Linux: ELSA-2014-0771, ELSA-2014-3037, ELSA-2014-3038, ELSA-2014-3039; openSUSE: anúncios de segurança de junho de 2014) — a versão exata do pacote corrigido varia por distro/branch e deve ser confirmada no advisory correspondente listado nas referências.

Cómo protegerse

A correção oficial (commit e9c243a5a6de0be8e584c604d353412584b592f8, upstream) adiciona a checagem que faltava: recusa (retorna -EINVAL) quando uaddr1 == uaddr2, e complementa com uma segunda verificação baseada nas chaves internas do futex (match_futex) para cobrir o caso de futexes compartilhados onde endereços diferentes podem mapear para a mesma chave. O patch cobre tanto futex_requeue quanto futex_wait_requeue_pi.

A correção definitiva é atualizar o kernel para uma versão que inclua esse commit — distribuições enterprise (Oracle Linux, openSUSE, entre outras, conforme os errata ELSA-2014-0771/3037/3038/3039 e os anúncios de segurança do openSUSE) fizeram backport para seus kernels suportados na época; a versão exata de correção depende do branch/distro e deve ser conferida no advisory correspondente, já que não há aqui uma tabela consolidada de números de versão por distribuição.

Como paliativo quando atualização imediata não é viável: restringir acesso à syscall futex via seccomp-bpf (bloqueando ou filtrando FUTEX_REQUEUE_PI) reduz a superfície, mas quebra funcionalidade de qualquer processo que dependa de mutexes PI da glibc — custo alto e não é solução recomendada como substituto do patch. Não existe mitigação de configuração 'leve' (sysctl, montagem, etc.) documentada nas fontes consultadas; o requeue via futex é um mecanismo interno de sincronização, não algo desabilitável de forma granular sem tocar em seccomp.

Cómo detectar

Não há assinatura de rede, já que o vetor é inteiramente local via syscalls (futex com FUTEX_REQUEUE_PI). Em ambientes com auditoria de syscalls (auditd/eBPF), monitorar chamadas futex com a flag FUTEX_REQUEUE_PI onde uaddr1 e uaddr2 coincidem ou apontam para a mesma página pode indicar tentativa de exploração, mas isso exige instrumentação prévia — não é algo visível em logs padrão do sistema. Kernel panics inexplicados em hosts multiusuário ou em sandboxes que executam código não confiável são um sinal indireto a investigar retroativamente.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
The futex_requeue function in kernel/futex.c in the Linux kernel through 3.14.5 does not ensure that calls have two different futex addresses, which allows local users to gain privileges via a crafted FUTEX_REQUEUE command that facilitates unsafe waiter modification.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Productos afectados
n/a · n/a
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.