Vulnerabilidade de injeção de entradas via Bluetooth no Android, Linux, macOS e iOS
(github.com/skysafe)- CVE-2023-45866 é uma vulnerabilidade de bypass de autenticação em stacks Bluetooth de vários sistemas operacionais que permite conectar um teclado falso e injetar entradas de teclas sem confirmação do usuário
- Um invasor próximo pode tentar ações como instalar apps, executar comandos arbitrários e enviar mensagens usando apenas um computador Linux e um adaptador Bluetooth comum, sem equipamento especial
- As condições de vulnerabilidade variam por plataforma: no Android, o ponto central é se o Bluetooth está ativado; no Linux/BlueZ, o estado discoverable/connectable; no iOS e macOS, se um Magic Keyboard está pareado
- Android 11-14 é mitigado com o nível de patch de segurança de 2023-12-05, mas não há correção para Android 4.2.2-10, e a correção do BlueZ de 2020 estava desativada por padrão
- Ações que exigem senha ou autenticação biométrica não podem ser realizadas apenas com injeção de teclas, mas dispositivos não corrigidos podem ficar expostos a ataques Bluetooth de curta distância
Injeção de teclas via Bluetooth sem autenticação
- CVE-2023-45866 é uma vulnerabilidade que permite injeção de keystrokes via Bluetooth sem autenticação no Android, Linux, macOS e iOS
- Em vários stacks Bluetooth, é possível um bypass de autenticação que permite ao invasor se conectar a um host discoverable sem confirmação do usuário e injetar entradas de teclas
- Um invasor próximo pode estabelecer uma conexão Bluetooth não autenticada com um dispositivo vulnerável e realizar as seguintes ações por meio de entradas de teclas
- Instalar apps
- Executar comandos arbitrários
- Enviar mensagens
- O ataque não exige hardware especial e pode ser realizado com um computador Linux e um adaptador Bluetooth comum
- Os detalhes completos do exploit e scripts de PoC serão divulgados entre 12 e 14 de janeiro, durante a semana da ShmooCon
Condições de ataque por plataforma
- A vulnerabilidade funciona enganando a máquina de estados do host Bluetooth para parear com um teclado falso sem confirmação do usuário
- O mecanismo subjacente de pareamento sem autenticação existe na especificação Bluetooth, e bugs específicos de implementação o expõem como superfície de ataque
- Em dispositivos sem patch, as condições necessárias variam conforme o sistema operacional
- Android: vulnerável se o Bluetooth estiver ativado
- Linux/BlueZ: o Bluetooth precisa estar em estado discoverable/connectable
- iOS e macOS: vulnerável se o Bluetooth estiver ativado e um Magic Keyboard estiver pareado com o celular ou computador
- Depois que o invasor pareia com o celular ou computador alvo, ele pode injetar entradas de teclas com os privilégios da vítima
- Ações que exigem senha ou autenticação biométrica não podem ser realizadas apenas com injeção de teclas
Uma vulnerabilidade antiga revelada após o MouseJack
- A pesquisa MouseJack, divulgada em 2016, mirava protocolos sem fio personalizados de periféricos que não eram Bluetooth
- Esta pesquisa começou ao analisar Bluetooth e o ecossistema Apple tendo o Apple Magic Keyboard como alvo
- No macOS e no iOS, foi encontrada injeção de keystrokes via Bluetooth sem autenticação, e ambas as plataformas podiam ser exploradas mesmo no Lockdown Mode
- Depois, vulnerabilidades semelhantes também foram confirmadas no Linux e no Android, parecendo mais uma falha de protocolo do que um simples bug de implementação; ao verificar a especificação Bluetooth HID, constatou-se que era ambos
- Algumas vulnerabilidades eram mais antigas que o MouseJack, e foi possível reproduzir a injeção de keystrokes até no Android 4.2.2
Impacto e status de patch no Android
- Os dispositivos e versões Android confirmados como vulneráveis nos testes foram os seguintes
- Pixel 7, Android 14
- Pixel 6, Android 13
- Pixel 4a (5G), Android 13
- Pixel 2, Android 11
- Pixel 2, Android 10
- Nexus 5, Android 6.0.1
- BLU DASH 3.5, Android 4.2.2
- O nível de patch de segurança de 2023-12-05 mitiga a vulnerabilidade no Android 11-14
- Não há correção disponível para Android 4.2.2-10
- O cronograma de divulgação foi o seguinte
- 2023-08-05: vulnerabilidade reportada ao Google
- 2023-12-06: divulgação pública
- O Google afirmou que a correção do problema que afeta o Android 11-14 é fornecida aos OEMs afetados, e que todos os dispositivos Pixel atualmente suportados receberão a correção pela atualização OTA de dezembro
Impacto e patch no Linux/BlueZ
- As versões do Ubuntu confirmadas como vulneráveis nos testes foram 18.04, 20.04, 22.04, 23.10
- Segundo o Google, o ChromeOS não é vulnerável; embora não tenha sido testado diretamente, a configuração do BlueZ parece mitigar a vulnerabilidade
- A vulnerabilidade no Linux foi corrigida em 2020 como CVE-2020-0556, mas essa correção estava desativada por padrão
- O ChromeOS é o único sistema operacional baseado em Linux conhecido por ter ativado essa correção
- O patch do BlueZ para CVE-2023-45866 ativa por padrão a correção de 2020
- Patch relacionado do BlueZ:
- Informações relacionadas ao Ubuntu:
- Informações relacionadas ao Debian:
- Informações relacionadas ao Fedora:
- O cronograma de divulgação foi o seguinte
- 2023-08-10: vulnerabilidade reportada à Canonical
- 2023-09-25: vulnerabilidade reportada ao Bluetooth SIG
- 2023-10-02: caso aberto no CERT/CC
- 2023-12-06: divulgação pública
Impacto no macOS e iOS
- Os dispositivos testados no macOS e confirmados como vulneráveis foram os seguintes
- 2022 MacBook Pro, macOS 13.3.3, M2
- 2017 MacBook Air, macOS 12.6.7, Intel
- O Lockdown Mode do macOS não impede o ataque
- O macOS Sonoma 14.2 corrige a vulnerabilidade
- O cronograma de divulgação do macOS foi o seguinte
- 2023-08-01: vulnerabilidade reportada à Apple
- 2023-12-06: divulgação pública
- O dispositivo testado no iOS e confirmado como vulnerável foi um iPhone SE executando iOS 16.6
- O Lockdown Mode do iOS também não impede o ataque
- O cronograma de divulgação do iOS foi o seguinte
- 2023-08-04: vulnerabilidade reportada à Apple
- 2023-12-06: divulgação pública
1 comentários
Comentários do Hacker News
Tive que pesquisar um pouco para confirmar isso, mas para ficar seguro o ideal no Android é desligar o Bluetooth quando não estiver usando. Ainda assim, ele fica vulnerável enquanto estiver em uso
Meu Pixel recebeu a atualização de segurança de 2023-12-05 e esse problema foi corrigido, mas não sei como está a situação em aparelhos que não são Pixel
No Linux, basta abrir
/etc/bluetooth/input.confe definirClassicBondedOnly=true. No meu caso, não precisei adicionar nada novo, só descomentar. Na próxima versão dobluetoothd, o padrão deve passar a sertrue, mas já dá para configurar manualmente agora, e depois é preciso reiniciar o serviço BluetoothNão sei sobre macOS ou iOS porque não tenho esses dispositivos
O Wi‑Fi também fica num estado de queijo suíço em que não dá para desligar completamente pela Central de Controle
truedesde 7 de dezembro$ rpm -q --changelog bluez | grep CVE-2023-45866 -C1* Thu Dec 07 2023 Peter Robinson - 5.70-4- Add mitigation for CVE-2023-45866Tentei manter esse hábito por um tempo depois que saí do Android, mas no fim desisti
Se você bloqueia o telefone ativamente quando não está usando, e se durante o uso a digitação for enviada isso vai aparecer na tela, então deixar o Bluetooth ligado não parece algo tão terrível assim
Se o GrapheneOS corrigiu isso, talvez finalmente seja o empurrão para migrar, mas meu telefone atual ainda funciona bem demais para justificar comprar outro
Fico curioso com o fato de o Windows não ser mencionado em nenhum momento. À primeira vista parece uma boa notícia, mas eu precisaria saber por que o Windows não é afetado na prática para avaliar o risco
Por exemplo, se a pilha Bluetooth do Windows tiver algo estruturalmente equivalente ao
ClassicBondedOnly=falsedo BlueZ, então faz sentido monitorar se esse valor estátrueem ambientes que se quer endurecerOu talvez a pilha funcione de forma totalmente diferente e os pontos a considerar também sejam completamente outros
Estou esperando vídeos com bastante PoC e demonstrações, mas como o Windows tem grande participação e muitos administradores de sistemas para entrar em pânico, seria bom ter informações. Até “ainda não tentamos atacar o Windows” já seria uma informação útil
Mas, se você criar um dispositivo Bluetooth com um Flipper Zero, no momento em que um cliente Windows se conecta ele reconhece como teclado e dá para executar qualquer comando PowerShell que você quiser. Eu mesmo só usei para abrir o YouTube e fazer um RickRoll, nunca tentei nada ilegal
Agora deixo todo Bluetooth desligado, mas não sei como remover o bluez sem quebrar o Linux
ClassicBondedOnly=falsedo BlueZ, mas por acaso não quis dizerClassicBondedOnly=true?Que bom ver esse tipo de notícia agora que a indústria eliminou conexões físicas de áudio dos celulares e empurrou tudo para o sem fio. Muito bem
[1] https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/pr...
Essa vulnerabilidade funciona enganando a máquina de estados do host Bluetooth para emparelhar com um teclado falso sem confirmação do usuário. O mecanismo subjacente de emparelhamento sem autenticação é definido na especificação do Bluetooth, e bugs de implementação o expõem a atacantes
Mas por que alguém iria querer permitir emparelhamento silencioso? Gostaria de entender melhor qual era o propósito pretendido desse mecanismo problemático
Não sei por que isso foi mantido assim nos dispositivos que acabaram sendo afetados
Esse problema foi corrigido no macOS 14.2 e no iOS 17.2
https://support.apple.com/en-us/HT214036
https://support.apple.com/en-us/HT214035
No Arch Linux, isso foi corrigido a partir do bluez 5.70-2 [1]
[1]: https://gitlab.archlinux.org/archlinux/packaging/packages/bl...
A parte “na época o Bluetooth parecia intimidador, então simplesmente assumi que era seguro” bate forte. Parece que esse mito nasce dessa sensação de intimidação: a ideia de que, em algum lugar acima numa pilha tecnológica complexa, há pessoas que realmente entendem tudo e que não estão sustentando com um graveto um castelo construído sobre areia
Duvido que isso seja prático contra celulares ou computadores, mas, se você está na posição de ter que garantir que ninguém mexa em um quiosque, sua vida ficou um pouco mais interessante
Se conseguir implantar um único backdoor com sucesso, dali em diante já dá para trabalhar
Em um ataque direcionado, pode até bastar enviar um pressionamento da tecla Shift a cada minuto para impedir que a tela bloqueie e, depois, ir pessoalmente até a máquina e fazer alguma coisa
sudoousuenvenenado em algum lugar e adicioná-lo ao$PATHUSB também é parecido. Se você conectar um teclado a uma porta “somente carga”, ele funciona. Testei isso diretamente no Android e levei bronca por dizer que isso não é explorável na prática aqui
Ainda assim, não vejo isso como uma vulnerabilidade. É apenas um recurso útil. O problema aqui é que alguém pode fazer isso sem que o usuário perceba, inclusive durante operações sensíveis
O ótimo projeto de ontem https://mitxela.com/projects/smsc também podia ser usado no celular desse jeito
A vulnerabilidade no Linux foi corrigida em 2020 (CVE-2020-0556), mas a correção permaneceu desativada por padrão. Pelo que se sabe, só o ChromeOS ativou essa correção, mesmo com Ubuntu, Debian, Fedora, Gentoo, Arch e Alpine tendo publicado avisos
Mas, se o aviso da distribuição diz que basta atualizar para corrigir[2], não entendo o que significa “a correção estava desativada por padrão”. Quer dizer que, mesmo após atualizar, ainda é preciso mudar alguma configuração manualmente? A correção no NixOS parece inverter o padrão
Se a ideia era dizer que usuários que definiram explicitamente
ClassicBondedOnly=falseprecisavam mudar isso, dava para escrever de forma bem mais clara[1] https://github.com/NixOS/nixpkgs/blob/3dda6d5ed56af34534dd4c...
[2] https://ubuntu.com/security/notices/USN-4311-1