The HL7800 cellular modem driver's +CGCONTRDP: response handler oncmdatcmdinfoipaddr() in drivers/modem/vendorstandalone/hl7800.c parses the PDP-context dynamic parameters (local address, subnet mask, gateway, and DNS servers) that the cellular network assigns to the device. The response is linearized into a 256-byte stack buffer, after which each address field length is computed from comma/. delimiter positions in the network-supplied data and used directly as the length argument to strncpy() into the fixed 64-byte stack buffer tempaddrstr (and the 16-byte ifacectx.dnsv4_string).
Because the field length is derived from attacker-controlled delimiter positions and was not bounded against the destination buffer, a single field can be far larger than 64 bytes. A malicious or impersonated cellular network (for example a rogue base station) can return a crafted +CGCONTRDP response with an overlong address field, causing strncpy() to write past tempaddrstr on the modem worker thread's stack, plus an out-of-bounds NUL write at tempaddrstr[addr_len].
No device-side privileges or user interaction are required: the device itself issues the AT+CGCONTRDP=1 query during normal network attach and parses whatever the network returns. The overflow corrupts adjacent stack memory in supervisor context, yielding at minimum a remotely triggerable crash and potentially control-flow hijacking on targets without stack protection.
The fix bounds every field length against its destination buffer (tempaddrstr and dnsv4string) before each copy, rejecting overlong fields.
{
"cwe_ids": [
"CWE-787"
],
"cna_assigner": "zephyr",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/12xxx/CVE-2026-12522.json"
}"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-12522.json"
[
{
"signature_type": "Line",
"digest": {
"threshold": 0.9,
"line_hashes": [
"287891819386438392889812238334022337693",
"26985787934506337940489959131572696176",
"105930578250863363515222963532695466391",
"234911816821555513059205440965024654189",
"217769298244003326511683035072526765610",
"108770502343956227854663701894465780599",
"192322761629158937202580547074163534268",
"141979584196346062493506464886838430188",
"138660747348214218667709771249452421197",
"200027472502609712781721863461679221991",
"12344556396077867669103365967984211218",
"82656068111220114540600709545253241303",
"22692281620249225950835737069933556765",
"47569026134929437747629728394436990165",
"147038488551912803958283973106339800883",
"124309366356269732082956642654587854879",
"227753519498823534994057299903456220034",
"294560589674269039180469439425250515784",
"248456359851319964648222024932286515462"
]
},
"target": {
"file": "drivers/modem/vendor_standalone/hl7800.c"
},
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/a1cbced64181bc0bdf95e1fd7118f2bb70cf679b",
"signature_version": "v1",
"id": "CVE-2026-12522-7adf10f0",
"deprecated": false
},
{
"signature_type": "Function",
"digest": {
"function_hash": "272667793880744497670007174777949949677",
"length": 3630.0
},
"target": {
"function": "on_cmd_atcmdinfo_ipaddr",
"file": "drivers/modem/vendor_standalone/hl7800.c"
},
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/a1cbced64181bc0bdf95e1fd7118f2bb70cf679b",
"signature_version": "v1",
"id": "CVE-2026-12522-d96aa498",
"deprecated": false
}
]
"2026-08-22T09:15:47Z"