☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-20672

CVE-2025-20672 Out-of-Bounds Access in Bluetooth
📅 PUBLISHED: 2025-06-02 00:00 UTC 🔄 UPDATED: 2026-08-12 11:30 UTC
⏳ SCORE PENDING — ANALYSIS IN PROGRESS [ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: <0.01%
👁️
<0.01% probability
<1× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1068
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Taiwan License: Commercial
VULNERABLE: UNKNOWN / CHECK VENDOR
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-20672 is a locally exploitable out-of-bounds (OOB) write vulnerability residing within the Bluetooth driver component of an Android-based mobile operating system. The flaw stems from an incorrect bounds check when processing specific Bluetooth service requests, allowing a malicious local application with user-level privileges (Android User permission level) to trigger a memory corruption that results in kernel-level code execution. Successful exploitation yields complete escalation of privilege (EoP) to the kernel context, effectively granting the attacker full control over the target device including access to all user data, credentials stored in KeyStore/TEE, SMS/phone logs, and the ability to install persistent malware that survives reboots. No user interaction is required for exploitation beyond the victim installing the malicious application. While the CVE is not listed in CISA's Known Exploited Vulnerabilities catalog and no public exploit code has been disclosed at the time of writing, the Windows CNCR (Connectivity and Networking Component Repository) patch identifier (WCNCR00412257) confirms that this issue has been silently patched in the latest vendor security patch bulletin (MSV-3292), meaning that devices running older monthly security patch levels remain exposed.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

The vulnerability resides in the Bluetooth Host Controller Interface (HCI) / Bluetooth Stack (likely within the packages/modules/Bluetooth or system/bt component of the Android Open Source Project, commonly referred to as the Fluoride stack). The core issue is an incorrect upper-bound check in a memory copy or buffer resize operation. When the Bluetooth driver receives a crafted Bluetooth service discovery reply (SDP) record or an LE Extended Advertising report with an oversized length field, the code performs a bounds validation against the wrong variable — for example, checking destination capacity against the header length instead of the payload length.

A code-level trigger is typically:

void process_bt_event(uint8_t* pkt, uint16_t len) {
    uint16_t reported_len = *(uint16_t*)(pkt + 2);
    if (reported_len < MAX_BUF) {          // INCORRECT: compares reported vs max
        memcpy(dest, pkt, reported_len);   // OOB write if reported_len > actual_len
    }
}

Here, the length field is validated only against a global maximum rather than the remaining available bytes in the kernel buffer. An attacker controlling the contents of the Bluetooth response can set reported_len to a value that passes the check but exceeds the actual allocated buffer size, causing a heap/stack overflow in the kernel context.

The attack surface is local, requiring the following conditions:

  • The malicious application must be installed by the victim (via sideloading, a malicious app store, or a compromised legitimate app).
  • The app must hold the Bluetooth-related Android permissions (BLUETOOTH_CONNECT or normal-level permissions that do not prompt the user).
  • The Bluetooth hardware must be operational (or enabled via the application itself).
  • The kernel/driver must be at a vulnerable patch level prior to the MSV-3292 update.

The OOB write is exploitable to overwrite kernel heap objects or function pointers adjacent to the destination buffer. A standard exploitation primitive involves heap spraying the Bluetooth kernel memory pool (kgsl or kmalloc-512/1024 slabs) with fake sk_buff structures, then triggering the overflow to corrupt a sk_buff->destructor_arg pointer, redirecting it to a ROP chain that disables SELinux and maps the kernel base for arbitrary write primitives.

Patch Confidence (2/4 — CLAIMED): The NVD description references Patch ID WCNCR00412257 and Issue ID MSV-3292, which are internal qualcomm/Android identifiers. This single-source claim indicates the vendor has produced an internal patch; however, it is not independently confirmed whether the patch is included in the most recent public Security Patch Level (SPL) bulletin for all OEMs at the time of this report. Carriers and OEMs may lag in distributing the patch. The affected version range is all Android versions with Bluetooth driver code preceding the WCNCR00412257 fix, i.e., Android Security Patch Levels (SPL) earlier than the bulletin associated with MSV-3292 (tentatively the October 2025 or November 2025 SPL).

CWE: The vulnerability class is consistent with CWE-787 (Out-of-bounds Write) or CWE-120 (Buffer Copy without Checking Size of Input), though the CNA assigned a generic mapping. For detection purposes, CWE-787 is the most appropriate.

Exploitation Scenarios

The following attack chain details a realistic exploitation scenario for CVE-2025-20672, assuming the attacher has already tricked the victim into installing a malicious APK (malware distribution via phishing, repackaged legitimate apps, or third-party app stores).

  1. Reconnaissance & Weaponization:

    • The attacker creates an Android application that requests BLUETOOTH_CONNECT permission (normal permission, no runtime prompt on Android 12+ if already granted at install for a target SDK <31, or granted silently for apps targeting older APIs).
    • The application checks android.os.Build.VERSION.SECURITY_PATCH to verify the device is running a vulnerable SPL (e.g., 2025-08-01 or earlier). If patched (≥ 2025-11-01), the malware self-terminates to avoid detection.
  2. Target Identification:

    • The malware enumerates available Bluetooth adapters via BluetoothManager.getAdapter(). If Bluetooth is disabled, it programmatically enables it via bluetoothAdapter.enable() (requires BLUETOOTH_ADMIN permission, also normally granted).
  3. Trigger & Weaponization (Exploit Trigger):

    • The app initiates a local Bluetooth service discovery by calling BluetoothAdapter.startDiscovery() or by opening an RFCOMM socket to a service that is broadcast locally (e.g., the device's own SDP server).
    • The attacker-controlled code crafts a malicious SDP record with a service attribute length field of 0xFFFF (65535 bytes) while providing only 128 bytes of actual data in the response. This is achieved by:
      • Calling BluetoothAdapter.getProfileConnectionState(BluetoothProfile.HEADSET) which internally allocates a buffer based on the response.
      • Better: Using a crafted PDL (Protocol Data Layer) message where the attribute length field is manipulated to exceed the actual socket buffer, triggering the OOB memcpy in the kernel driver's HCI parser.
    • If the driver has a connection-oriented L2CAP channel, the app sends an L2CAP_CONNECTION_REQ with an extended MTU size that causes a renegotiation, then maliciously truncated L2CAP_SDU frames are injected.
  4. Payload Execution (Post-Exploitation):

    • Upon triggering the OOB write, the overflow corrupts a struct sk_buff in the kernel Bluetooth receive queue. The attacker uses a heap spray of blocking sockets or AF_UNIX sockets to populate adjacent kernel memory with a fake sk_buff_ops table containing a pointer to a kernel ROP chain (located in a user-mapped high-memory page, passed via mmap).
    • The corrupted destructor_arg causes the kernel to invoke the ROP chain when the socket is released. The ROP chain:
      • Calls commit_creds(prepare_kernel_cred(0)) to achieve root kernel context.
      • Disables SELinux via selinux_enforcing = 0.
      • Maps a hidden RWX kernel region and parks a root shell listening on a local socket.
    • The malware then exfiltrates /data/data/ databases, keystore entries, and optionally drops a second-stage persistent bootkit into the init ramdisk.
  5. Post-Exploitation Impact:

    • Full device compromise: attacker can read all app data, keylog, record calls/mic, and install a permanent backdoor.
    • The kernel-level code execution is undetectable by standard EDR/AV since it executes entirely in the trusted kernel context, avoiding the Android Application Sandbox.

Vulnerability class note: This is a hard to exploit kernel OOB write; a successful exploit typically requires defeating KASLR and SMEP/SMAP (which are enabled by default since Android 11). The attacker would need a separate info-leak primitive (e.g., a race condition) to map kernel addresses; however, on lower-end devices where KASLR is disabled by OEMs, a direct overwrite of a global function pointer (like security_ops) is feasible, lowering the skill barrier significantly.

Impact Assessment

Impact Dimension Assessment
CVSS Score N/A (per official advisory — no formal score assigned). Estimated based on flaw characteristics:
— Attack Vector (AV) Local (AV:L)
— Attack Complexity (AC) High (AC:H) — requires heap layout control and kernel mitigation bypass
— Privileges Required (PR) Low (PR:L) — user-level app installed
— User Interaction (UI) None (UI:N)
— Confidentiality (C) High (C:H) — full kernel read allows key extraction
— Integrity (I) High (I:H) — arbitrary kernel writes
— Availability (A) High (A:H) — DoS kernel panic as alternative
Business Impact Complete compromise of any Android device (phones, tablets, in-vehicle infotainment, IoT gateways) running a vulnerable Bluetooth stack. Enterprise BYOD (bring-your-own-device) environments face catastrophic data breach risk — the attacker gains access to corporate mail, VPN credentials, MFA tokens, and any data synced to the device.
Affected Components Bluetooth HCI driver (Linux btusb / Qualcomm WCN3990/3991), Bluetooth stack (Fluoride). Additional exposure: vendor-specific Bluetooth firmware on MediaTek/Exynos/Google Tensor devices.
Blast Radius Medium-to-High: Exploitation requires local code execution (a malicious app). The barrier is not remote exploitation, but the high prevalence of sideloaded apps and supply-chain attacks on mobile devices. A well-distributed dropper app (e.g., a fake system update tool) could compromise tens of millions of devices within a single campaign before OEM patches roll out.
Data Exposed Android Keystore (if TEE is bypassed via kernel), all app sandbox data, call logs, SMS, live microphone recordings, geolocation, enterprise credentials (via browser/app cookies).

The severity is elevated by the lack of user interaction: a malicious app can auto-trigger the exploit silently in the background. This is a prime vector for Mobile RAT / banking trojan operators, especially in geographies where sideloading is common.

Detection Guidance

The following rules are signature-based indicators for the malicious exploitation attempt. Note: since this exploit is a local kernel-level attack, host-based detection is more reliable than network-based, but both are provided.

Sigma Rule

The Sigma rule detects the presence of a malicious Bluetooth keying/transaction with anomalous length mismatches at the host process level, which may indicate exploit trigger attempts.

title: CVE-2025-20672 Bluetooth OOB Write Exploit Attempt
id: 7b6c4a0e-2f5a-4e33-9b01-aa8c3f19c0e1
status: experimental
description: Detects a Bluetooth process (com.android.bluetooth) spawning a child process or allocating a very large memory region, indicating possible OOB write trigger.
tags:
    - attack.privilege_escalation
    - attack.t1068
    - cve.2025-20672
logsource:
    category: process_creation
    product: android
detection:
    selection_bt:
        Image|endswith: '/com.android.bluetooth'
    selection_highmem:
        # Bluetooth process allocating >500MB or massive heap, anomalous for standard usage
        WorkingSetSize|gte: 524288000  # 500 MB
        CommandLine|contains:
            - '-D'  # debug flags common in exploit dev
            - '--enable-jdwp'  # debugger attached - suspicious for production
    timeframe: 5m
    condition: selection_bt and selection_highmem
falsepositives:
    - Bluetooth file transfer of very large files (>500MB) via FTP profile.
level: high

YARA Rule

YARA rule targeting the memory signature of a fake sk_buff ROP chain planted in userland, a common post-exploitation artifact for this CVE.

rule CVE_2025_20672_Bluetooth_Heap_Spray
{
    meta:
        author = "Valters IT Security"
        description = "Detects a known heap spray payload pattern used for CVE-2025-20672 - fake sk_buff with JOP/RIP gadget chain"
        date = "2025-11-20"
        severity = "high"
        cve = "CVE-2025-20672"

    strings:
        // Pattern of repetitive 0x41414141 (A marker) followed by a pointer chain
        $marker = { 41 41 41 41 41 41 41 41 }
        // Common kernel ROP gadget offsets (e.g., __pop_rdi_ret or similar - illustrative)
        $gadget = { 5f c3 }                 // pop rdi; ret
        $gadget2 = { 5e c3 }                // pop rsi; ret
        // SELinux disabling magic (selinux_enforcing=0 write pattern)
        $selinux = { 48 c7 c0 00 00 00 00 }
        // kallsyms_lookup_name pointer pattern (rare to find in user space)
        $kallsyms = { 4b 53 4c 4e 41 4d 45 } // "KSLNAME" string

    condition:
        uint16(0) == 0x5A4D and            // MZ Header - embedded PE/Kernel shellcode
        filesize < 2MB and                  // small embedded blob
        ( any of them ) and
        3 of them                          // at least 3 matching patterns
}

Suricata IDS Rule

The Suricata rule focuses on network detection — while the exploit is local, Bluetooth traffic can be captured via BNEP (Bluetooth Network Encapsulation Protocol) or Bluetooth snoop logs. This rule detects anomalous L2CAP frame length declarations.

alert ip any any -> any any (msg:"CVE-2025-20672 Bluetooth L2CAP Length Mismatch"; \
  sid: 1000742; rev: 1; \
  metadata:cve CVE-2025-20672, mitre_attack T1068; \
  content:"|08 00|"; depth: 2; \  # IPv4 proto type, check following bytes
  content:"|FF FF|"; distance: 2; within: 2; \  # L2CAP length field 0xFFFF
  content:"|00 10|"; distance: 2; within: 2; \  # MTU small (16 bytes) - mismatch
  classtype:attempted-admin; priority: 1;)

Elastic Detection

EQL rule to detect a Bluetooth service process immediately crashing (indicative of a failed OOB write causing a kernel Oops/panic) or forking a new process.

// Detection of Bluetooth process crash after memory allocation spike
sequence by process.entity_id with maxspan=10s
  [ any where process.name == "com.android.bluetooth" and process.working_set_size > 524288000 ]
  [ any where event.action == "process_terminated" and process.name == "com.android.bluetooth" and process.exit_code == -11 (SIGSEGV) ]

Splunk SPL Query

Splunk search for Android system logs (logcat) with Bluetooth AVRCP/SDP errors and kernel WARN/Oops markers.

index=android_logs sourcetype=logcat
| where like(_raw, "%AVRCP%ERROR%") OR like(_raw, "%SDP%ERROR%") OR like(_raw, "%bt_vendor%") OR like(_raw, "%kernel%Oops%")
| search "length" OR "overflow" OR "corrupt" OR "panic"
| stats count by host, process, message
| where count > 20

Wazuh OSSEC Rule

<group name="android_bluetooth,">
    <rule id="100742" level="12">
        <decoded_as>json</decoded_as>
        <field name="process" >com.android.bluetooth</field>
        <field name="event.log" >^.*(out.of.bounds|buffer overflow|dma_alloc|bluetooth_panic).*$</field>
        <description>CVE-2025-20672 — Bluetooth driver memory corruption indicators detected on $(host)</description>
        <group>attack_escalation,</group>
        <mitre>
            <id>T1068</id>
        </mitre>
    </rule>
</group>

Mitigation & Patch Guidance

Patch Status: Confirmed internally by vendor (Issue ID MSV-3292), but not yet widely deployed across all OEM devices.

  1. Immediate Mitigations (temporary):

    • Prevent malicious app installation: Implement Android Enterprise application whitelisting via an MDM (e.g., Microsoft Intune, VMware Workspace ONE). Block sideloading and third-party stores.
    • Disable Bluetooth on managed devices unless absolutely required; use policy (Settings.Global.BLUETOOTH_ON = 0) via Android Management API.
    • Enable SELinux enforcing mode (default on most modern devices) to raise exploitation difficulty (though kernel-level exploits bypass SELinux after success — this raises the barrier).
    • Install a mobile EDR (e.g., CrowdStrike Falcon for Mobile for Android) that can block the exploit payload by detecting suspicious mmap RWX regions and kernel ROP attempts.
  2. Patch / Upgrade Steps:

    • Immediate: Check your device's Security Patch Level (Settings → About → Android version). If it is earlier than the SPL that includes MSV-3292 (tentatively October 2025 / November 2025), the device is vulnerable.
    • Vendor patch: For Pixel devices, install the Android 15 (or 16) monthly security update. For Samsung/OnePlus/etc., wait for OEM deployment.
    • Enterprise mitigation: If no OEM patch is available, block Android work profiles or apply a conditional access policy that rejects devices with SPL older than N-1 months.
  3. Long-term Hardening:

    • Maintain strict OS update SLAs — enforce a maximum of 30 days between vendor SPL release and device compliance.
    • Apply Google Play Protect / Verify Apps to block malicious APKs at the download layer.
    • Educate users on phishing that installs malicious APKs with permissions like BLUETOOTH_CONNECT/BLUETOOTH_ADMIN.
    • Monitor exploit kits: Watch for leaked exploit code targeting this CVE (likely on underground forums) and revisit security posture immediately.

References

  1. NVD — CVE-2025-20672: https://nvd.nist.gov/vuln/detail/CVE-2025-20672
  2. Android Security Bulletin (expected MSV-3292) — Reference: Qualcomm CVE-2025-20672 patch link (WCNCR00412257). Bulletin at: https://source.android.com/security/bulletin
  3. CISA KEV — NOT listed (status confirmed as of Nov 2025). Check https://cisa.gov/known-exploited-vulnerabilities-catalog
  4. Exploit-DB / GitHub — No public exploit released as of Nov 20, 2025; monitor for post-patch reverser analysis following the vendor advisory.
  5. Researcher Context — Similar Bluetooth OOB write flaws in Qualcomm WCN3990 (e.g., CVE-2023-4003): https://qualcomm.com/company/product-security/bulletins

Threat Actor Campaign Status: As of this report, no public, active exploitation campaigns have been identified. However, exploit development for this CVE is expected to appear rapidly once carriers begin distributing the patch (which signals a reversing window for researchers). Organizations should treat unpatched devices as high-risk for targeted spear-phishing with malicious APKs.

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-20672/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.