← voltar
CVE-2019-2215highsob ataqueCWE-416

CVE-2019-2215

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 7.8epss 44%
da publicação à arma0 dias
Publicada no NVD11 de out.
1ª PoC4 de out.
metasploit26 de set.
CISA KEV+754d
probabilidade de exploração
44%top 1% das CVEs
exploração observada
simCISA + VulnCheck
61 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-05-03

Apply updates per vendor instructions.

Resumo

Use-after-free no driver Binder do kernel Android (drivers/android/binder.c ou drivers/staging/android/binder.c, dependendo da árvore), que permite a um app malicioso local escalar de contexto de aplicação para execução no kernel, com controle total do dispositivo. A falha já havia sido corrigida no upstream do Linux em dezembro de 2017, mas o patch nunca chegou a diversos kernels Android (3.18, 4.4, 4.9) até o boletim de segurança de outubro de 2019 — é um caso clássico de patch gap entre upstream e branches vendor/Android. Importa porque foi explorada in-the-wild antes da divulgação pública, encadeada com uma falha de sandbox do Chrome (CVE-2019-2025) em campanhas atribuídas a spyware comercial.

Detalhamento técnico

A vulnerabilidade é um use-after-free (CWE-416) na lógica de gerenciamento de threads do Binder, o mecanismo de IPC do Android usado por praticamente todo app e serviço de sistema para se comunicar entre processos. O driver permite que um processo registre um binder_thread e associe esse thread a uma fila de espera usada pelo epoll (via binder_poll). Quando o ioctl BINDER_THREAD_EXIT é disparado, a estrutura do thread é liberada (kfree), mas a referência que ela mantinha na wait_queue do epoll não era removida corretamente em todos os caminhos de código.

O atacante controla a sequência de chamadas: abre /dev/binder, registra o file descriptor num epoll, e força a liberação do binder_thread enquanto ainda existe uma referência pendente na wait_queue. Quando um evento subsequente dispara a callback associada a essa wait_queue, o kernel acessa memória já liberada, que o atacante pode ter realocado com dados controlados — o clássico primitivo de UAF para escrita/leitura arbitrária e, a partir daí, escalonamento de privilégio no kernel.

O Binder é código extremamente exposto: roda com privilégios de kernel, é acessível a qualquer app sem permissão especial (só precisa abrir /dev/binder, algo que toda aplicação Android faz implicitamente) e processa lógica complexa de referência de objetos entre processos. Isso torna a superfície de ataque grande e o bug relativamente fácil de disparar de dentro de um app comum, sem exigir capacidades de root ou permissões elevadas.

A análise técnica mais detalhada foi publicada pelo Project Zero do Google (pesquisadora Maddie Stone, sob o codinome informal 'Bad Binder'), que demonstrou uma cadeia de exploração completa obtendo execução arbitrária no kernel a partir de um app sandboxed em dispositivo Pixel.

Como é explorada

O vetor primário é um aplicativo local malicioso instalado no dispositivo — a descrição oficial já deixa isso explícito. Não há interação do usuário necessária além de ter o app instalado e em execução; o app dispara a sequência de ioctls/epoll para produzir o UAF sem qualquer aviso ou permissão visível ao usuário. A CVSS reflete isso com AV:L (acesso local) e PR:L (privilégio baixo, o de qualquer app comum).

A rota secundária de exploração é encadear esta falha com uma vulnerabilidade separada em um componente exposto à rede (por exemplo um bug de sandbox escape em navegador), permitindo que um atacante remoto obtenha inicialmente execução de código em contexto de app sandboxed via web e depois use o binder UAF para escapar do sandbox e obter privilégio de kernel. Essa foi exatamente a cadeia documentada pelo Project Zero, associada a exploração ativa antes da correção pública, o que motivou a inclusão da CVE no catálogo KEV da CISA.

A exploração não é trivial — exige entender a estrutura interna do binder_thread, técnicas de heap grooming para realocar a memória liberada com dados controlados, e normalmente bypass de KASLR/mitigações de kernel. Ainda assim, existem PoCs públicos (incluindo notas de exploração publicadas por pesquisadores independentes cobrindo kernels 3.4.x e 3.18.x em dispositivos Samsung com Android e LineageOS) e um módulo Metasploit, o que reduz a barreira de reprodução para quem já tem acesso a um app instalável no dispositivo-alvo.

Versões

Afetadas
Kernels Android baseados nos branches 3.18, 4.4 e 4.9 sem o backport do fix upstream de dezembro de 2017; identificado como Android ID A-141720095 pelo Google. Distribuições Linux genéricas (não-Android) tipicamente não são afetadas porque o driver binder não é habilitado por padrão nos kernels que empacotam.

Como se proteger

A correção definitiva é aplicar o patch do kernel Android incluído no boletim de segurança de outubro de 2019 e mantê-lo em toda a cadeia de build de firmware — o fornecedor do dispositivo (fabricante do aparelho) precisa distribuir uma atualização de sistema/firmware que incorpore o fix do binder, já que o usuário final não consegue aplicar patch de kernel Android isoladamente sem OTA do fabricante. Em distribuições Linux de propósito geral (Debian, Slackware), o driver binder normalmente não é habilitado por padrão, o que já elimina a exposição — os próprios boletins de segurança do Debian confirmam que o driver não estava habilitado nos kernels empacotados, tratando a CVE como não aplicável naquele contexto, mesmo tendo corrigido a linha de código por precaução em builds que a habilitem.

Para dispositivos Android sem atualização disponível (comum em aparelhos fora do ciclo de suporte do fabricante), não existe mitigação de configuração real — o binder é infraestrutura essencial do sistema operacional e não pode ser desabilitado sem quebrar o funcionamento do Android. O controle compensatório prático é restringir a instalação de aplicativos a fontes confiáveis e usar soluções de gerenciamento de dispositivo (MDM) que bloqueiem instalação de APKs não verificados, reduzindo a chance do vetor primário (app malicioso local). Isso não fecha a falha, apenas reduz a superfície de entrega do exploit.

Não existe mitigação via WAF ou controle de rede, pois a exploração ocorre inteiramente no dispositivo, entre processos locais — filtragem de tráfego de rede não tem visibilidade sobre chamadas ioctl/epoll internas ao binder.

Como detectar

Não há assinatura de rede a procurar, pois a exploração é inteiramente local ao dispositivo — não gera tráfego de rede identificável por si só. Em nível de host, o sinal mais próximo é monitoramento de chamadas ioctl anômalas ao /dev/binder combinadas com registro em epoll seguido de crash ou comportamento inesperado do processo, mas isso exige instrumentação de kernel (auditoria de syscalls, eBPF ou hooks customizados) que a maioria dos dispositivos Android não possui habilitada por padrão. Em ambientes de análise forense de dispositivos comprometidos, crashes recorrentes do processo servicemanager ou do próprio kernel com stack trace apontando para binder_poll/binder_thread_release são indício retrospectivo, mas não constituem uma detecção confiável em tempo real para a maioria dos operadores.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
A use-after-free in binder.c allows an elevation of privilege from an application to the Linux Kernel. No user interaction is required to exploit this vulnerability, however exploitation does require either the installation of a malicious local application or a separate vulnerability in a network facing application.Product: AndroidAndroid ID: A-141720095
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
n/a · Android
PoCs públicas encontradas61 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/47463exploitdbVexDay Proofwww.exploit-db.com/exploits/48129githubgithub.com/kangtastic/cve-2019-2215134githubgithub.com/timwr/CVE-2019-221577githubgithub.com/sharif-dev/AndroidKernelVulnerability72githubgithub.com/0xbinder/android-kernel-exploitation-lab43githubgithub.com/DimitriFourny/cve-2019-221540githubgithub.com/LIznzn/CVE-2019-221526githubgithub.com/stevejubx/CVE-2019-221516githubgithub.com/c3r34lk1ll3r/CVE-2019-221514githubgithub.com/flipphoneguy/root-sonim-xp380011githubgithub.com/R0rt1z2/huawei-unlock11githubgithub.com/qre0ct/android-kernel-exploitation-ashfaq-CVE-2019-22157githubgithub.com/i-redbyte/android-badbinder-demo5githubgithub.com/willboka/CVE-2019-2215-HuaweiP20Lite5githubgithub.com/mutur4/CVE-2019-22155githubgithub.com/llccd/TempRoot-Huawei5githubgithub.com/Byte-Master-101/CVE-2019-22153githubgithub.com/wired0ut/CVE-2019-22153githubgithub.com/Enceka/cve-2019-2215-3.183githubgithub.com/mufidmb38/CVE-2019-22153githubgithub.com/ATorNinja/CVE-2019-22153githubgithub.com/mouseos/cve-2019-2215_SH-M082githubgithub.com/CrackerCat/Rootsmart-v2.02githubgithub.com/elbiazo/CVE-2019-22152githubgithub.com/nicchongwb/Rootsmart-v2.01githubgithub.com/raymontag/CVE-2019-22150githubgithub.com/codecat007/CVE-2019-22150githubgithub.com/XiaozaYa/CVE-2019-22150githubgithub.com/NESTle19/CVE-2019-22150githubgithub.com/mythicaltree/CVE-2019-22150vulncheckvulncheck.com/xdb/12342ff888a3não verificadocve_referencepacketstormsecurity.com/files/154911/Android-Binder-Use-After-Free.htmlnão verificadocve_referencepacketstormsecurity.com/files/155212/Slackware-Security-Advisory-Slackware-14.2-kernel-Updates.htmlnão verificadocve_referencepacketstormsecurity.com/files/156495/Android-Binder-Use-After-Free.htmlnão verificadovulncheckvulncheck.com/xdb/efc0233357b1não verificadovulncheckvulncheck.com/xdb/94306aabca16não verificadovulncheckvulncheck.com/xdb/034793af86bcnão verificadovulncheckvulncheck.com/xdb/5a63ca2255f9não verificadovulncheckvulncheck.com/xdb/8042323a8edcnão verificadovulncheckvulncheck.com/xdb/703d7ebd8c6anão verificadovulncheckvulncheck.com/xdb/bb9d6564de2bnão verificadovulncheckvulncheck.com/xdb/af8a91dc7ae5não verificadovulncheckvulncheck.com/xdb/b769e46ca29cnão verificadovulncheckvulncheck.com/xdb/604294a627banão verificadovulncheckvulncheck.com/xdb/30246787d03dnão verificadovulncheckvulncheck.com/xdb/f0574fcd7f48não verificadovulncheckvulncheck.com/xdb/958e996c14b3não verificadovulncheckvulncheck.com/xdb/7a600a9b57a1não verificadovulncheckvulncheck.com/xdb/d23821631cf3não verificadovulncheckvulncheck.com/xdb/2efb36bee06fnão verificadovulncheckvulncheck.com/xdb/570fb66ac36fnão verificadovulncheckvulncheck.com/xdb/7c94a8838bcdnão verificadovulncheckvulncheck.com/xdb/48c20484fa71não verificadovulncheckvulncheck.com/xdb/7c2171bd00f8não verificadovulncheckvulncheck.com/xdb/de8c2754f71anão verificadovulncheckvulncheck.com/xdb/382de53322b0não verificadovulncheckvulncheck.com/xdb/2830d77e0d86não verificadovulncheckvulncheck.com/xdb/94793b346ad1não verificadovulncheckvulncheck.com/xdb/77a8fc6659d0não verificadovulncheckvulncheck.com/xdb/14fbecf8c339não verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.