Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
RustyInjector — Implementação em Rust da prova de conceito de injeção de teclas de Marc Newlin (CVE-2023-45866). | Kitploit
Ferramentas/GitHubGitHub/xg3nesis/rustyinjector
Segurança BluetoothExploraçãoSegurança Sem FioTestes de PenetraçãoAprendizado e Educação
GitHubxg3nesis/rustyinjector

RustyInjector

Implementação em Rust da prova de conceito de injeção de teclas de Marc Newlin (CVE-2023-45866).

Ver Repositório
11há 1 anoAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

⚠️ Aviso: Apenas para Fins de Pesquisa e Educacionais
Este projeto é uma Prova de Conceito (PoC) demonstrando injeção de teclas Bluetooth, reimplementada em Rust. Destina-se estritamente a fins educacionais e de pesquisa em segurança.

  • Não utilize este código para comprometer sistemas sem autorização explícita.
  • Qualquer uso não autorizado, ilegal ou antiético deste projeto é estritamente proibido.
  • O autor não assume nenhuma responsabilidade por uso indevido ou danos causados por este código.

Ao baixar, clonar ou utilizar este código, você concorda em usá-lo de forma responsável e em conformidade com todas as leis e regulamentos aplicáveis.


🦀 Rusty Injector !

Logotipo do Rust Injector.

Bem-vindo ao Rusty Injector — uma implementação em Rust inspirada na PoC de injeção de teclas Bluetooth de Marc Newlin, vinculada às CVE-2023-45866, CVE-2024-21306 e CVE-2024-0230.

Atualmente, este repositório implementa apenas a CVE-2023-45866, que explora vulnerabilidades de injeção de teclas no BlueZ no sistema operacional Linux.

Abaixo está uma captura de tela da descrição do NIST, incluindo a pontuação CVSS:

Descrição NIST da CVE-2023-45866

Captura 1: Descrição NIST da CVE-2023-45866.

As outras CVEs, CVE-2024-21306 e CVE-2024-0230, não estão planejadas para implementação por mim, mas contribuições são calorosamente bem-vindas.

1. Como funciona?

Antes de entrar em detalhes, encorajo você a assistir à apresentação de Marc Newlin na conferência NullCon 2024, pois ela oferece uma explicação clara e completa dessas vulnerabilidades: Hi, My Name Is keyboard por Marc Newlin..
Também disponibilizei um vídeo que populariza essa vulnerabilidade. Você o encontrará aqui: How a Simple Bluetooth Hack Can Hijack Your Device - Hi, my name is keyboard.

📌 Se você notar pontos faltantes, áreas que poderiam ser melhor simplificadas ou possíveis erros na explicação abaixo, sinta-se à vontade para modificá-la e enviar um merge request. Ficarei feliz em revisar suas contribuições e incorporá-las ao repositório.

Como cobrimos apenas a vulnerabilidade CVE-2023-45866 para sistemas operacionais Linux, explicaremos apenas o processo para alcançar essa exploração específica direcionada à biblioteca BlueZ.

Primeiramente, você deve entender que essa vulnerabilidade é explorável apenas em Bluetooth BR/EDR porque tem como alvo o perfil HID sobre essa tecnologia. Você pode saber que a implementação arquitetural do Bluetooth é dividida em múltiplas camadas, como o modelo OSI para o protocolo Ethernet, e como você pode observar em nosso esquema abaixo.

Pilha Bluetooth HID

Diagrama 1: Pilha Bluetooth BR/EDR (Basic Rate - Enhanced Data Rate) simplificada. A camada mais inferior da pilha representa a camada física com uma antena dedicada, e o nível mais alto representa o nível de aplicação ou o que às vezes podemos designar como sistema operacional. Quando dois dispositivos desejam se comunicar, eles passam por essas diferentes camadas: de cima para baixo para pacotes de saída e de baixo para cima para pacotes Bluetooth de entrada.

Após o processo de inquiry, quando os dispositivos determinam que desejam estabelecer uma conexão, eles prosseguem para o processo de pareamento. Esse processo permite a autenticação mútua entre os dispositivos e o estabelecimento de uma chave de criptografia, que é então usada para proteger a comunicação.

A especificação Bluetooth oferece diferentes níveis de autenticação e segurança. Dependendo do mecanismo utilizado para autenticação, o nível de segurança da comunicação pode variar. Os dispositivos podem autenticar com base nos periféricos de entrada e saída que possuem, um conceito chamado de modelos de associação. Você provavelmente já encontrou isso ao parear dois dispositivos — como ser solicitado a inserir um código PIN exibido no outro dispositivo.

Existem quatro modelos de associação de pareamento, determinados pelas capacidades de E/S (Entrada/Saída) dos dispositivos:

  • Just Works (Não autenticado)
  • Numeric Comparison (Autenticado)
  • Passkey Entry (Autenticado)
  • Out of Band (Autenticado) – Depende de outra tecnologia para facilitar o processo de pareamento.

Abaixo está uma tabela mostrando qual modelo de associação é usado com base nas capacidades dos nossos dispositivos IoT.

Modelos de associação Bluetooth.

Diagrama 2: Tabela ilustrando modelos de associação Bluetooth BR/EDR inspirada na Bluetooth Core Specification v5.3 - 2.3.5.1 Selecting key generation method Table 2.8: Mapping of IO capabilities to key generation method (página 1573). Para mais informações sobre modos de segurança e modelos de associação, confira este interessante post do blog da Thyrasec: Bluetooth Security: Classic & BLE!

Tenho certeza de que você está intrigado com o método 'Just Works', que é exatamente onde nossa vulnerabilidade reside. Aqui está o problema: este método estabelece o pareamento sem exigir confirmação ou interação do usuário, não deixando nenhuma maneira de verificar a autenticidade do dispositivo de pareamento. Em sistemas Linux, a pilha BlueZ, por padrão, aceitava solicitações de pareamento de dispositivos classificados como NoInputNoOutput (para permitir compatibilidade retroativa). Uma escolha de design verdadeiramente "maravilhosa", você não concorda?

Atualização da configuração padrão do Linux.

Captura 2: Atualização da configuração padrão do BlueZ para habilitar a segurança Bluetooth e corrigir a CVE-2023-45866.

Após parear com o dispositivo alvo, nosso sistema estabelece uma conexão com o Service Discovery Protocol (SDP) através da porta 1 da camada L2CAP. Conforme mostrado no Diagrama 1, a camada L2CAP serve como um intermediário entre as camadas de serviço inferiores e superiores, fornecendo segmentação, multiplexação e remontagem de pacotes de dados. Através da conexão SDP, identificamos todos os serviços disponíveis no dispositivo alvo e nos conectamos ao serviço Human Interface Profile (HID). O perfil HID, usado pelos sistemas operacionais para processar entradas de teclados e mouses Bluetooth, opera através das portas 17 (HID Control) e 19 (HID Interrupt) da camada L2CAP. Para acessar o perfil HID, nenhuma autenticação é necessária e qualquer dispositivo conectado às portas 17 e 19 da L2CAP é reconhecido como um dispositivo HID.

Um atacante pode personificar os serviços e a classe de dispositivo de um teclado Bluetooth sem fio, explorar o modelo de associação 'Just Works' especificando uma capacidade 'NoInputNoOutput' e injetar teclas não autorizadas no dispositivo alvo.

2. Como foi implementado?

Para ser completamente honesto, o único objetivo era reimplementar a prova de conceito em Rust para obter uma compreensão mais profunda dos detalhes desse exploit. É por isso que nesta primeira iteração, a arquitetura global foi inspirada na PoC em Python de Marc Newlin: Github "hi_my_name_is_keyboard". Em uma reformulação futura, poderia ser implementado de uma maneira mais Rustica.

Crates (= Bibliotecas Rust) usadas durante esta implementação:

root@kitploit:~
[dependencies]
bluer = { version = "0.17.3", features = ["l2cap", "bluetoothd", "id", "rfcomm"] }
tokio = "1.42.0"
regex = "1.11.1"
clap = { version = "4.5.23", features = ["derive"] }

A dependência chave no meu projeto foi 'BlueR', uma API Rust construída sobre a biblioteca C original do BlueZ. Você pode conferir o trabalho deles aqui: GitHub BlueR. Também integrei Tokio para permitir o uso das funções async fornecidas pela biblioteca BlueR. Além disso, utilizei Clap, um analisador de argumentos de linha de comando, e Regex, uma crate que implementa expressões regulares em Rust, para validar entradas do usuário para o 'bt_addr' (Endereço Bluetooth).

Após observação da implementação de Marc Newlin, decomponha a arquitetura em vários passos para replicar a mesma funcionalidade:

  1. Analisar argumentos do usuário que são usados para obter:
    • --iface ou -i que representa a interface/adaptador Bluetooth a ser usado. Este argumento é opcional; se nada for especificado, tentará acessar um padrão.
    • --target ou -t que é obrigatório e especifica o endereço Bluetooth do alvo.
  2. Implantar um agente Bluetooth com capacidades NoInputNoOutput para poder acessar o método de pareamento "Just Works" durante a conexão com o dispositivo alvo.
  3. Registrar um perfil com serviços de teclado HID e registrar a classe 0x002540 para se passar por um teclado.
  4. Criar todos os enums e funções para converter nossas entradas nos bytes HID corretos que serão enviados em pacotes HID.
  5. Lançar conexões para as portas corretas na camada L2CAP (Porta 1 - SDP, Porta 17 - HID Control e Porta 19 - HID Interrupt) e injetar teclas ilegítimas.

Tentei comentar meu código o máximo possível. Se você o examinar, reconhecerá facilmente todos esses passos. Para torná-lo mais elegante, o próximo passo seria torná-lo mais Rustico, ter uma terminação graciosa e adicionar várias outras funcionalidades, como a capacidade de analisar scripts de teclado (payloads preparados) ou ter uma interface gráfica. Mais uma vez, isso foi apenas para fins educacionais; não tenho certeza se trabalharia em outra iteração deste programa. Mas, novamente, contribuições são calorosamente bem-vindas. Se você tiver alguma dúvida, não hesite em perguntar.

3. Como usar?

Primeira coisa a notar: Esta ferramenta foi desenvolvida e testada no Ubuntu 24.04.

Para usar esta ferramenta, você precisa desabilitar o serviço HID padrão registrado pelo BlueZ, para que ele possa ser registrado novamente ao lançar o exploit. Siga estes passos:

  • Edite o arquivo de configuração /etc/systemd/system/bluetooth.target.wants/bluetooth.service
  • Modifique a linha: ExecStart=/usr/libexec/bluetooth/bluetoothd Pela seguinte: ExecStart=/usr/libexec/bluetooth/bluetoothd --noplugin=input
  • Após modificar o arquivo, você precisa recarregar a configuração do systemd e reiniciar o serviço Bluetooth para aplicar as alterações. sudo systemctl daemon-reload sudo systemctl restart bluetooth

Agora você simplesmente precisa puxar o projeto e executá-lo compilando com cargo build ou executando diretamente especificando os argumentos com: cargo run -- -i [BT_INTERFACE] -t [BT_TARGET].

Interface de linha de comando do Rusty Injector

Captura 3: Interface de linha de comando do Rusty Injector.

Aqui está um exemplo: cargo run -- -i hci0 -t AA:BB:CC:DD:EE:FF

Outra coisa a notar é que se você quiser modificar o código e usar a função "set_address" através do trait Configuration, você deve instalar a ferramenta bdaddr para poder usá-la:

root@kitploit:~
# build bdaddr from the bluez source
cd ~/
git clone --depth=1 https://github.com/bluez/bluez.git
gcc -o bdaddr ~/bluez/tools/bdaddr.c ~/bluez/src/oui.c -I ~/bluez -lbluetooth
sudo cp bdaddr /usr/local/bin/

Por favor, note que se você não especificar nenhuma interface Bluetooth, ele tentará acessar uma padrão. E OBVIAMENTE, não se esqueça de conectar uma interface Bluetooth ao seu sistema Ubuntu.🙃


Acredito que cobri tudo — você está pronto para aproveitar ao máximo o Rusty Injector! Se você encontrar algum problema ou tiver comentários ou feedback, fique à vontade para abrir uma issue. Tenha uma experiência incrível e bons hacks! 🚀

Baixar ferramenta