Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
buds-audit — No-dongle, no-root Bluetooth security assessment tool for wireless earbuds affected by the Airoha SDK vulnerability chain (CVE-2025-20700/20701/20702) | Kitploit
Tools/GitHubGitHub/spiritualmachines/buds-audit
Embedded Systems SecurityReconnaissanceVulnerability ScannersBluetooth SecurityIoT SecurityExploitationInformation GatheringFuzzingWireless SecurityPenetration TestingHardware & IoT Security
1202 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
GitHub
spiritualmachines/buds-audit

buds-audit

No-dongle, no-root Bluetooth security assessment tool for wireless earbuds affected by the Airoha SDK vulnerability chain (CVE-2025-20700/20701/20702)

View Repository

buds-audit

Version 1.0.0

Bluetooth security assessment tool for wireless earbuds affected by the Airoha SDK vulnerability chain (CVE-2025-20700 / CVE-2025-20701 / CVE-2025-20702). Scans for nearby devices, fingerprints known-affected Airoha-based chipsets, and probes for unauthenticated GATT access and RACE protocol reachability - entirely through the OS Bluetooth stack (BlueZ) via bleak. No external Bluetooth dongle is required and root is not needed. Results are reported in plain language alongside the technical detail, so you can act on them without deep Bluetooth knowledge.

Ethical use statement

This tool is for assessing devices you own or have explicit authorisation to test. GATT and RACE probing are active operations: they connect to and send commands to the target device. Do not run --gatt, --race, --firmware, --bd-address, --assess, --baseline, --check-drift, or --memory-read against a device that isn't yours or that you haven't been given permission to test. --scan is passive and only listens to advertisements already being broadcast publicly, so it's safe to run against whatever's in range.

--memory-read goes a step further than the other active probes: it retrieves one real, read-only page (256 bytes) of the device's actual flash content, at a fixed address, as a definitive confirmation of CVE-2025-20702 when the reachability-only --race probe gets no response. It is read-only (flash reads carry no wear or bricking risk, unlike write/erase/FOTA commands, which this tool never sends), opt-in, and requires its own separate confirmation beyond the standard ownership prompt describing exactly what it does before it runs anything.

Probing an arbitrary nearby device isn't just a policy concern - it can have real side effects. --gatt attempts a read or notify-subscribe on every characteristic it finds, and some consumer devices expose provisioning-style services (e.g. Google's Fast Pair service) that react to that by kicking off a real pairing handshake on the target device, independent of anything this tool explicitly requests. A characteristic requiring encryption can trigger the same thing even against your own device, since BlueZ can silently route that authentication request to whatever agent your desktop has registered (e.g. KDE's pairing prompt) - every active command therefore also registers its own temporary BlueZ agent that auto-rejects any such request for the duration of the probe, so no pairing prompt can appear at all. Every active command also still prompts for confirmation that the target address is yours before doing anything on the radio; pass --yes to skip the prompt for scripted use once you've already confirmed it's your device:

buds_audit.py --assess --target AA:BB:CC:DD:EE:FF --yes

--watch is passive, like --scan - it only listens to advertisements already being broadcast and never connects to anything, so it doesn't prompt for confirmation.

Installation

python3 -m venv venv
venv/bin/pip install -r requirements.txt

Requires Python 3.10+ (developed against 3.14) and a Linux system running BlueZ with a powered-on Bluetooth adapter.

Platform support

Linux only, and not automatically every Linux system:

  • Windows is not supported. bleak itself has a Windows backend, but this tool doesn't rely on bleak alone - Bluetooth Classic discovery (core/scanner.py) and bonding-state checks (core/gatt.py) both shell out directly to bluetoothctl, a BlueZ-only CLI tool that doesn't exist on Windows. Those code paths would just fail with "command not found."
  • Requires BlueZ with bluetoothctl on PATH, not just any Linux kernel. Most desktop distros ship this; a minimal or server image without the bluez package installed won't have it out of the box. Verified root-free on BlueZ 5.86 - other versions should work the same way since bleak targets BlueZ's standard D-Bus API, but that's not independently re-verified.
  • WSL is hardware-dependent, not a clean yes. WSL2 can run BlueZ like any Linux, but reaching a real Bluetooth radio requires forwarding it from Windows via usbipd-win, which only forwards USB-attached adapters. Most laptops' built-in Bluetooth is wired in over a non-USB bus (SDIO/PCIe, alongside Wi-Fi), which usbipd-win generally can't forward - so this depends entirely on the specific hardware.

Running it from Windows or macOS

You don't need a Linux machine of your own - you just need Linux with real access to a Bluetooth radio. Two practical ways to get that:

  • Boot Fedora from a live USB (easiest, recommended). A Fedora live USB runs the whole OS off the stick without installing anything, on bare metal - so it has direct access to all your hardware, including the laptop's built-in Bluetooth. Boot it, install the dependencies (see Installation), run the tool, reboot back into your normal OS when you're done. Nothing is written to your disk. This is the least fiddly option for occasionally checking your own devices.
  • A Fedora VM with a USB Bluetooth dongle passed through. If you'd rather keep a persistent install, run Fedora in a VM (VirtualBox with the Extension Pack, or VMware Workstation/Fusion - these handle per-device USB passthrough cleanly; Hyper-V does not). The catch is the adapter: a VM generally cannot borrow your laptop's built-in Bluetooth, so pass through a cheap external USB Bluetooth dongle (4.0+, a Linux-friendly chipset like CSR8510, Realtek RTL8761B, or Intel) instead. Once Fedora sees that dongle, BlueZ drives it directly and the tool works exactly as on bare metal. On Apple Silicon Macs, run the ARM64 build of Fedora (the tool is architecture-agnostic) and use a hypervisor that supports USB passthrough, such as UTM.

Either way, the rule is the same: the tool itself is unchanged - it just needs Linux with a Bluetooth adapter BlueZ can actually reach.

A note on device power state

Many TWS earbuds stop advertising (and drop any active connection) after a period of inactivity to save power, and some fully power off on their own. If a scan can't find a device it found a minute ago, or a probe fails partway through, that's usually the earbuds going idle, not a bug - take them out of the case or press the pairing button again and retry.

This also affects address stability: this project's confirmed test unit (a Sony WF-1000XM3) kept the same BLE address across every power cycle tested, which is expected for earbuds designed for companion-app reconnection - they typically use a fixed/public BLE address rather than a rotating one (unlike phones, which do rotate private addresses and aren't a suitable target for this tool for that reason). That's not guaranteed for every earbud model, though - some vendors use resolvable private addresses even in pre-pairing/reconnect mode, which would appear as a different address after each power cycle to an unpaired scanner like this tool.

Download Tool