CVE-2011-1823 (Gingerbreak): Como o Daemon de Volume do Android Entregou Root para Quem Pediu Educadamente
`vold` — o Volume Daemon — é um processo de sistema Android que roda como root. Seu trabalho é gerenciar volumes de armazenamento: cartões SD, drives USB, particionamento, montagem.
CVSS: 7.8/10 (HIGH)
Affected: cpe:2.3:o:google:android:*:*:*:*:*:*:*:* from 2.0 to (excl) 2.3.4; cpe:2.3:o:google:android:3.0:*:*:*:*:*:*:*
Available in English
Legal & Ethical Disclaimer
This content is provided for EDUCATIONAL and AUTHORIZED SECURITY TESTING purposes only.
- •Use these techniques on systems you own or have explicit written permission to test
- •Practice in authorized lab environments (VulnHub, HackTheBox, DVWA, etc.)
- •Follow responsible disclosure practices when finding vulnerabilities
- •Use knowledge for defensive security and authorized penetration testing
- •Access systems without explicit authorization
- •Use these techniques for malicious purposes
- •Deploy exploits against production systems you don't own
- •Share working exploits for unpatched vulnerabilities
Legal warning
Unauthorized access to computer systems is illegal in most jurisdictions (e.g. CFAA in the US, Computer Misuse Act in the UK). Violators may face criminal prosecution and civil liability. The author and publisher assume no liability for misuse of this information. By continuing, you agree to use this knowledge ethically and legally.
CVE-2011-1823 (Gingerbreak): Como o Daemon de Volume do Android Entregou Root para Quem Pediu Educadamente
Antes das soluções MDM, antes da criptografia obrigatória, antes do Android ter qualquer presença empresarial séria — uma escalação de privilégios local que funcionava em praticamente todo telefone Android em 2011 estava escondida dentro do daemon responsável por montar seu cartão SD.
🎯 Impacto: Escalação de privilégios local para root no Android 2.x–3.0 via corrupção de memória em vold
🔓 Vetor de Ataque: Local (app instalado, nenhuma permissão necessária)
💥 Exploitabilidade: Fácil — exploit público (Gingerbreak) era confiável com clique
🛡️ Correção Disponível: Sim — Android 2.3.4+ e builds patched 3.x
⏱️ Faça Patch Agora: Dispositivos legados estão permanentemente expostos; Android moderno não é afetado
O Que Está Realmente Acontecendo
O ponto é esse: essa vulnerabilidade não é exótica. É um bypass de verificação de inteiro com sinal clássico levando a corrupção de memória, e a única razão pela qual é interessante é onde ela vive e quais eram as suposições de design em torno dela.
vold — o Volume Daemon — é um processo de sistema Android que roda como root. Seu trabalho é gerenciar volumes de armazenamento: cartões SD, drives USB, particionamento, montagem. Para fazer esse trabalho, ele precisa conversar com o kernel. Faz isso ouvindo em um socket PF_NETLINK, que é a interface padrão de mensagens kernel-espaço do usuário do Linux para coisas como eventos de rede e, neste caso, eventos de hotplug de armazenamento.
A falha fatal de design: vold confiava incondicionalmente no conteúdo dessas mensagens netlink.
No Linux, sockets PF_NETLINK historicamente tiveram controles de acesso fracos. Qualquer processo local poderia criar e enviar mensagens netlink. Os desenvolvedores do Android sabiam sobre isso em algum nível — eles adicionaram uma verificação de limites ao método DirectVolume::handlePartitionAdded. O problema é que eles só verificavam um lado dos limites.
Conceitualmente, a lógica vulnerável parecia assim:
// Representação simplificada do check falho em DirectVolume::handlePartitionAdded
int partitionNumber = getPartitionFromNetlinkMessage(msg);
// O check: só valida o limite superior
if (partitionNumber > MAX_PARTITIONS) {
LOGE("Partition number out of range");
return;
}
// partitionNumber é usado como índice de array — mas e se for negativo?
mPartitionTable[partitionNumber] = newEntry; // ← corrupção de heap/stack aqui
O check é uma comparação de inteiro com sinal contra um valor máximo apenas. Não há verificação de limite inferior. Se você enviar um número de partição de -1, a comparação (-1 > MAX_PARTITIONS) avalia como falsa, então a execução continua. O valor negativo é então usado como um índice de array, escrevendo dados na memória antes do início do buffer alvo.
Isso é CWE-190 (Integer Overflow/Wraparound) combinado com sua consequência downstream: um write OOB clássico com índice de array negativo. O atacante controla o offset, e porque vold roda como root, a escrita corrompida acontece em um contexto de processo privilegiado. Obtenha controle confiável dessa escrita, e você tem execução de código como root.
O que torna isso particularmente interessante é que a vulnerabilidade não está em alguma biblioteca obscura de terceiros. Está em um daemon Android de primeira parte que roda em todo dispositivo, sempre, manipulando funcionalidade fundamental de hardware. A superfície de ataque é enorme e o nível de confiança do processo é máximo.
Caminho de Exploração
O exploit Gingerbreak (lançado publicamente por volta de maio de 2011) demonstrou quão acessível essa vulnerabilidade era. Nenhuma permissão especial necessária. Nenhuma interação do usuário após o app ser iniciado. Nenhum root necessário para disparar isso.
Pré-requisitos: Um app malicioso instalado no dispositivo. É isso. No Android 2.x, apps podiam ser sideloaded facilmente, e o modelo de permissões não restringia acesso a socket netlink.
A cadeia de ataque:
-
Criação de socket: O processo malicioso abre um socket
PF_NETLINK. Nenhuma permissão especial é necessária para isso nas versões Android afetadas. -
Craft de mensagem: O atacante cria uma mensagem uevent netlink falsa que imita um evento de partição de armazenamento, embutindo um índice de partição negativo cuidadosamente escolhido.
-
Entrega a vold: A mensagem é enviada.
vold, confiando implicitamente em todas as mensagens netlink, a processa através dehandlePartitionAdded. -
Bypass do check de limites: O índice negativo passa no check de máximo apenas.
voldprossegue para usá-lo como um índice de array. -
Corrupção de memória controlada: O write out-of-bounds corrompe memória no processo
vold. Com conhecimento do layout da memória, o atacante pode transformar isso em uma primitiva write-what-where confiável. -
Shell root: Explorar a corrupção para redirecionar execução — classicamente sobrescrevendo um ponteiro de função ou endereço de retorno — e spawnar um shell root ou instalar um binário setuid.
O que tornou Gingerbreak notável para seu tempo foi a confiabilidade. O layout de memória do Android era previsível, ASLR era ausente ou fraco na maioria dos dispositivos 2.x, e não havia proteção de stack canary em vold. Exploração era quase trivialmente confiável em uma ampla gama de dispositivos e versões de firmware.
Quem Está Realmente em Risco
Em 2011, a resposta era "basicamente qualquer pessoa com um telefone Android." Android 2.x detinha a esmagadora maioria da participação de mercado. Android 3.0 (tablets Honeycomb) também era afetado.
Em 2024, o cenário realista de risco:
- Dispositivos Android legados que nunca receberam atualizações antes de 2.3.3 permanecem permanentemente vulneráveis. Pense em deployments Android incorporados: kiosques de ponto de venda, tablets industriais, certos dispositivos médicos, e set-top boxes mais antigos rodando forks do Android.
- Usuários de custom ROM em hardware mais antigo que nunca aplicaram a correção.
- Ferramentas de rooting — Gingerbreak foi amplamente adotado como um mecanismo de rooting legítimo para dispositivos cujos fabricantes não tinham intenção de patcheá-los. Isso borra a linha entre exploração e uso intencional, mas o vetor é idêntico.
As indústrias que ainda devem se importar com isso: healthcare, varejo, e IoT industrial, onde dispositivos Android legados com longos tempos de vida operacional não são incomuns. Um tablet Android de 2011 rodando uma aplicação médica especializada não foi substituído só porque um CVE foi publicado.
A exploração in-the-wild foi imediata e generalizada em 2011. Gingerbreak foi lançado publicamente e funcionava de forma confiável, então todo autor de malware e todo entusiasta de rooting teve acesso a um exploit root funcional dentro de semanas da divulgação.
Detecção & Caça
Detectar exploração de CVE-2011-1823 é desafiador após o fato, mas existem indicadores comportamentais que valem a pena caçar em sistemas legados.
Como exploração se parece em tempo de execução:
- Crash ou reinício inesperado do processo
voldimediatamente antes da atividade de escalação de privilégios - Novos binários setuid-root aparecendo em
/data/local/tmp,/data/data/<pkg>, ou/system/bin - Processos spawned com UID 0 que têm um processo pai não-root na árvore de processos
- Escritas inesperadas para
/system(se o exploit fizer chain em um payload remount-and-persist)
Lógica de detecção conceitual (SIEM/EDR):
# Regra estilo Sigma conceitual para artefatos de exploração estilo Gingerbreak
title: Escalação de Privilégios Suspeita do Android vold (CVE-2011-1823)
status: experimental
description: Detecta artefatos pós-exploração consistentes com exploit vold Gingerbreak
logsource:
product: android
service: logcat
detection:
selection_crash:
process: 'vold'
event: 'SIGSEGV|crash'
selection_escalation:
# Processo root spawned de pai não-privilegiado
uid: '0'
parent_uid|not: '0'
timeframe: dentro de 30s de crash do vold
condition: selection_crash and selection_escalation
falsepositives:
- Ferramentas legítimas de rooting
- Processos de atualização OTA
level: high
Padrões-chave IOC:
- Binário
suouSuperuser.apkaparecendo pós-exploração - Entradas de
logcatmostrando segfaults devoldseguidas de criação de processo UID 0 - Atividade de socket netlink de processos não-sistema imediatamente antes de escalação de privilégios
Playbook de Mitigação
1. Ações Imediatas
- Faça patch. Android 2.3.4 corrigiu isso. Se seus dispositivos podem receber a atualização, não há razão aceitável para não aplicá-la. Verifique
Configurações → Sobre o Telefone → Versão do Android. - Audite seu ambiente para dispositivos Android rodando versões antes de 2.3.4 ou 3.0 não-patchado.
2. Mitigações de Curto Prazo (para dispositivos legados não-patchados)
- Restrinja fontes de instalação de apps. Se um dispositivo não pode ser patchado, bloqueie-o para apps apenas conhecidos e bons. Sideloading deve ser desabilitado.
- Isolamento de rede. Dispositivos Android legados que não podem ser patchados devem estar em VLANs isoladas sem caminhos de movimento lateral para sistemas sensíveis.
- Considere restrições netlink baseadas em
iptablesse o firmware do dispositivo permitir configurações customizadas (efetividade limitada, mas adiciona fricção).
3. Hardening de Longo Prazo
- Política de ciclo de vida do dispositivo. Qualquer dispositivo Android que não possa receber atualizações de segurança deve ter uma data de fim-de-vida documentada e um caminho de substituição. Ponto final.
- Para forks do Android e deployments customizados, audite
volde daemons privilegiados similares por suposições de confiança netlink. O padrão (confiando em entrada IPC de processos não-privilegiados sem autenticação) não é único para esse CVE. - Implemente Mobile Device Management (MDM) com políticas de enforce de versão OS.
4. Verificação
- Execute
getprop ro.build.version.release— qualquer coisa abaixo de2.3.4em um dispositivo 2.x é vulnerável. - Verifique pela presença de
suouSuperuser.apkcomo indicadores de exploração anterior. - Em dispositivos patchados, verifique se a correção está presente confirmando que o binário
voldfoi atualizado como parte do patch set 2.3.4.
Minha Análise
O score CVSS de 7.8 é honestamente subestimar o impacto real — mas apenas em seu contexto de 2011. Uma escalação de privilégios local que requer zero permissões, zero interação do usuário além de instalar um app, e funciona de forma confiável em quase todo dispositivo Android vendido na época? Isso é um 9+ em termos práticos. O score reflete o vetor teórico (local), mas a exploitabilidade real no ecossistema Android de 2011 era mais próxima de "trivial" do que "complexidade alta."
O que esse CVE realmente expõe é uma falha de suposição de segurança fundamental. Os desenvolvedores claramente entendiam que alguma verificação de limites era necessária — eles escreveram um check. Eles só verificaram uma direção, que é um padrão que vejo constantemente em revisões de código: desenvolvedores que entendem que um valor "não deveria ser muito grande" mas não internalizam que inteiros com sinal também podem ser muito pequenos. A lição aqui não é "adicione mais checks" — é "trate toda entrada externa como adversarial, especialmente de canais IPC que processos não-privilegiados podem escrever." Netlink não foi projetado como um limite de segurança, e tratá-lo como tal custou caro ao Android.
Se sou honesto, a resposta do Google foi adequada mas não excepcional. A correção chegou em 2.3.4, mas o problema de fragmentação do Android significou que atrasos de atualização de OEM e operadora deixaram milhões de dispositivos expostos por meses ou anos após a correção existir. Essa não era a primeira vez que o Google encontrava o problema de fragmentação de atualização do Android, e não seria a última. O lançamento de Gingerbreak foi em última análise um catalisador para muitos usuários fazerem root em seus dispositivos porque fabricantes se recusavam a enviar atualizações — que é um resultado perverso onde uma vulnerabilidade de segurança se tornou uma ferramenta para usuários contornarem insegurança imposta pelo fabricante.
Timeline
| Data | Evento |
|---|---|
| 2011-03 (aprox.) | Vulnerabilidade descoberta e pesquisada privadamente |
| 2011-04-29 | Android 2.3.4 lançado com correção para CVE-2011-1823 |
| 2011-05 | Exploit Gingerbreak lançado publicamente |
| 2011-05-09 | CVE-2011-1823 formalmente atribuído e publicado |
| 2011 (contínuo) | Adoção generalizada de Gingerbreak como ferramenta de rooting; atrasos de patch de OEM deixam maioria do mercado exposta |
Referências
- CVE-2011-1823 — Entrada Oficial NVD — Registro de vulnerabilidade base com scoring CVSS
- CWE-190: Integer Overflow or Wraparound — Classificação de fraqueza da causa raiz
- Android Open Source Project — vold source — Implementação de referência; diff de patch visível no histórico de commits por volta de 2.3.4
- Gingerbreak Source Release — GitHub mirror — Implementação de exploit público (referência histórica; não execute em sistemas que você não possui)
- Android Security Bulletins Archive — Programa de divulgação de vulnerabilidades contínuo do Google, estabelecido em parte em resposta a crítica da era de fragmentação