Skip to content

Bluetooth: Integer Overflow in Bluetooth Classic (BR/EDR) L2CAP

Moderate
ceolin published GHSA-p793-3456-h7w3 Dec 15, 2025

Package

zephyr (zephyr)

Affected versions

4.2

Patched versions

None

Description

An integer overflow condition exists in Bluetooth Host stack, within the bt_br_acl_recv routine a critical path for processing inbound BR/EDR L2CAP traffic.

conn_br.c

This is a simple overflow: hdr->len is attacker-controlled. If it holds 0xfffc, then acl_total_len be 65536, which wraps back to 0 due to the 16-bit width. This corrupted length is then used to clip the buffer

if (buf->len > acl_total_len)
    buf->len = acl_total_len; // now 0

At this point, the internal buffer state is desynchronized. Payload data is still present, but logic downstream will believe the buffer is empty, a silent discard. Worse, the upstream ACL reassembly guardrails are skipped entirely for BR/EDR (BT_CONN_TYPE_BR), so malformed packets arrive unfiltered.

This gives a remote, unauthenticated Bluetooth device the ability to push crafted packets that deplete CPU cycles and interrupt flow control. There's no memory corruption per se, but this is a clean DoS vector with protocol-aware precision. Given enough sustained traffic, this becomes operationally disruptive and may cause resource exhaustion or force a watchdog reset in constrained systems.

Mitigation: validate the hdr->len before arithmetic. Any addition that would exceed UINT16_MAX must be rejected.

if (sys_le16_to_cpu(hdr->len) > (UINT16_MAX - sizeof(*hdr))) {
    LOG_ERR("L2CAP PDU length overflow");
    net_buf_unref(buf);
    return;
}

This issue affects Zephyr 4.2.0. All BR/EDR-enabled targets should apply this patch. Bluetooth Classic should never trust length fields blindly, especially when arithmetic is involved.

Patches

main: #97370

For more information

If you have any questions or comments about this advisory:

embargo: 2025-12-13

Severity

Moderate

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Adjacent
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

CVE ID

CVE-2025-12035

Weaknesses

Integer Overflow or Wraparound

The product performs a calculation that can produce an integer overflow or wraparound when the logic assumes that the resulting value will always be larger than the original value. This occurs when an integer value is incremented to a value that is too large to store in the associated representation. When this occurs, the value may become a very small or negative number. Learn more on MITRE.

Credits