detecting-bluetooth-low-energy-attacks

Detects BLE sniffing, replay, GATT enumeration, and MITM attacks using Ubertooth, bleak, and crackle.

954|172|Updated Mar 13, 2026
One-click install
npx skills add https://github.com/xalgord/xalgorix --skill detecting-bluetooth-low-energy-attacks
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: detecting-bluetooth-low-energy-attacks
Source: https://github.com/xalgord/xalgorix/tree/main/internal/tools/skills/data/wireless-security/detecting-bluetooth-low-energy-attacks
Command: npx skills add https://github.com/xalgord/xalgorix --skill detecting-bluetooth-low-energy-attacks

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires bleak, crackle, ubertooth, wireshark.

What problem does it solve?

Bluetooth Low Energy devices often ship with weak pairing, unauthenticated GATT characteristics, and no replay protection, but detecting these attacks requires specialized hardware and packet-level analysis that most teams lack. This Skill provides a structured workflow to sniff BLE traffic, enumerate GATT services, crack weak pairing, and validate replay and MITM vulnerabilities during authorized assessments.

Core Features & Use Cases

  • Passive BLE Sniffing: Capture BLE traffic with Ubertooth One or nRF52840 sniffer into pcapng/pcap formats for Wireshark analysis.
  • GATT Enumeration: Use the bleak Python library to enumerate services, characteristics, and descriptors, flagging unauthenticated writes and missing CCCD protection.
  • Encryption & Replay Testing: Crack BLE Legacy Pairing with crackle and replay captured GATT writes to verify whether devices accept stale commands.
  • Use Case: During an authorized IoT pentest of a smart lock, capture an unlock command with Ubertooth, replay it via bleak, and document a Critical finding showing the lock accepts replayed commands without freshness validation.

Quick Start

Scan for nearby BLE devices and enumerate the GATT services of the target at address AA:BB:CC:DD:EE:FF to identify insecure write characteristics.

Frequently Asked Questions about detecting-bluetooth-low-energy-attacks

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I sniff BLE traffic with Ubertooth One?

Use ubertooth-btle with the -p flag for promiscuous passive capture and -r to write pcapng output, for example ubertooth-btle -p -r capture.pcapng. To follow one specific device's connection across data channels, add -f -t with the target's MAC address.

How to enumerate BLE GATT services with Python?

Use the bleak library's BleakClient to connect to a device address, then iterate client.services to list each service's characteristics, properties, and descriptors. Flag characteristics with write or write-without-response properties that lack authentication.

Can crackle decrypt all BLE pairing captures?

No, crackle only works against BLE Legacy Pairing (Bluetooth 4.0/4.1) such as Just Works or 6-digit passkey exchanges. LE Secure Connections (4.2+) uses ECDH key exchange and cannot be cracked passively. Crackle also requires PCAP with PPI headers, not PcapNG.

Why does my Ubertooth capture miss BLE connections?

Ubertooth One follows only one connection at a time across the 37 data channels, so busy environments require targeting a specific address with -t or deploying multiple sniffers. BLE 5.0 extended advertising on secondary channels also evades older Ubertooth firmware.

How do I test if a BLE device is vulnerable to replay attacks?

Capture a GATT write command, then retransmit the identical bytes to the same characteristic using bleak's write_gatt_char. If the device state changes without any nonce, timestamp, or challenge-response check, it is vulnerable to replay.

Does BLE address randomization affect device tracking?

Yes, devices using resolvable private addresses (RPA) rotate their MAC periodically, breaking address-based tracking and connection following. Monitoring must rely on advertising data fingerprints and service UUID patterns instead of fixed addresses.