CVE-2026-18418
El agente proxy de zbus en el backend IPC subsys/zbus/proxy_agent/zbus_proxy_agent_ipc.c registraba el nombre del canal de una trama rechazada entre dominios con una conversión %s simple. La estructura de tipo de trama struct zbus_proxy_msg lleva un array channel_name[] de tamaño fijo como su último miembro, y nada en el transporte garantiza que el array esté terminado en NUL. El único código que verifica la terminación es zbus_proxy_agent_receive_cb() en subsys/zbus/proxy_agent/zbus_proxy_agent.c, que rechaza la trama precisamente en esos casos — por lo que la advertencia imprimía un búfer no terminado exactamente en las rutas de error donde el nombre había sido encontrado como inválido (o, para un message_size inválido, ni siquiera había sido inspeccionado).
Leer descripción completaMostrar menos
Cualquier dominio homólogo capaz de colocar una trama de sizeof(struct zbus_proxy_msg) bytes en el endpoint ipc_service vinculado puede dispararlo, enviando una trama con un message_size fuera de rango o con channel_name[] sin contener ningún byte NUL. Para llegar al código se requiere CONFIG_ZBUS_PROXY_AGENT_IPC y registro compilado en nivel de advertencia o superior (el predeterminado), y requiere control sobre el firmware del dominio homólogo — típicamente un segundo núcleo en el mismo SoC.
El strlen() resultante dentro del empaquetador de registro camina más allá del final del objeto de trama hasta que encuentra un byte cero. Con el backend icmsg la trama vive en un búfer de pila del hilo de la cola de trabajo IPC, por lo que bytes de la pila de ese hilo se representan en el mensaje de registro; con los backends de rpmsg el escaneo continúa a través de la memoria vring compartida. El impacto se limita a la divulgación de una pequeña cantidad de memoria adyacente en el receptor del log del dominio, más un posible error fatal si el escaneo sale de una región mapeada; el límite -ENOSPC propio del empaquetador de registro previene que el desbordamiento se convierta en una escritura. La corrección limita la conversión con %.*s y MIN(msg->channel_name_len, sizeof(msg->channel_name)).
Traducción automática del texto original de NVD (en inglés).
CVSS
- Puntuación base
- 3.4
- Versión
- 3.1
- Vector
- CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:L
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días
- 0.11 %
- Percentil entre todas las CVEs puntuadas
- 1
- Fecha de la puntuación
- 21/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
Técnicas ATT&CK
Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.
- Explotación
T1068Exploitation for Privilege Escalationprivilege escalation70 % - Impacto principal
T1005Data from Local Systemcollection75 % - Impacto secundario
T1499.004Application or System Exploitationimpact45 %
Vulnerabilidad local (AV:L, PR:H) que expone información adyacente en memoria (stack/vring) mediante lectura de buffer sin terminación NUL. Requiere control del firmware del dominio par, típicamente segundo núcleo en SoC.
Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.
Mitigaciones ATT&CK que cubren estas técnicas
Tecnologías afectadas (1)
⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.
CWE
- CWE-125
Referencias
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-18418",
"cveTags": [],
"metrics": {
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-18418",
"role": "CISA Coordinator",
"options": [
{
"exploitation": "none"
},
{
"automatable": "no"
},
{
"technicalImpact": "partial"
}
],
"version": "2.0.3",
"timestamp": "2026-10-15T17:51:25.324466Z"
}
}
],
"cvssMetricV31": [
{
"type": "Secondary",
"source": "vulnerabilities@zephyrproject.org",
"cvssData": {
"scope": "UNCHANGED",
"version": "3.1",
"baseScore": 3.4,
"attackVector": "LOCAL",
"baseSeverity": "LOW",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:L",
"integrityImpact": "NONE",
"userInteraction": "NONE",
"attackComplexity": "LOW",
"availabilityImpact": "LOW",
"privilegesRequired": "HIGH",
"confidentialityImpact": "LOW"
},
"impactScore": 2.5,
"exploitabilityScore": 0.8
}
]
},
"affected": [
{
"source": "vulnerabilities@zephyrproject.org",
"affectedData": [
{
"vendor": "zephyrproject",
"product": "zephyr",
"versions": [
{
"status": "affected",
"version": "4.4.0",
"lessThan": "4.4.2",
"versionType": "semver"
}
],
"packageName": "zephyr",
"programFiles": [
"subsys/zbus/proxy_agent/zbus_proxy_agent_ipc.c"
],
"collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "zbus_proxy_agent_ipc_recv_callback"
}
]
}
]
}
],
"published": "2026-10-11T18:16:58.113",
"references": [
{
"url": "https://github.com/zephyrproject-rtos/zephyr/commit/fc065f79a568a6c6cc14b89795bd60e5eabd6f02",
"source": "vulnerabilities@zephyrproject.org"
},
{
"url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-48w8-fjhj-r9w8",
"source": "vulnerabilities@zephyrproject.org"
}
],
"vulnStatus": "Awaiting Analysis",
"weaknesses": [
{
"type": "Secondary",
"source": "vulnerabilities@zephyrproject.org",
"description": [
{
"lang": "en",
"value": "CWE-125"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "The zbus proxy agent IPC backend in subsys/zbus/proxy_agent/zbus_proxy_agent_ipc.c logged the channel name of a rejected inter-domain frame with a plain %s conversion. The frame type struct zbus_proxy_msg carries a fixed-size channel_name[] array as its last member, and nothing in the transport guarantees the array is NUL-terminated. The only code that verifies termination is zbus_proxy_agent_receive_cb() in subsys/zbus/proxy_agent/zbus_proxy_agent.c, which rejects the frame in precisely those cases — so the warning printed a non-terminated buffer exactly on the error paths where the name had been found invalid (or, for an invalid message_size, had not been inspected at all).\n\nAny peer domain able to place a frame of sizeof(struct zbus_proxy_msg) bytes on the bound ipc_service endpoint can trigger it, by sending a frame with an out-of-range message_size or with channel_name[] containing no NUL byte. Reaching the code requires CONFIG_ZBUS_PROXY_AGENT_IPC and logging built at warning level or above (the default), and requires control over the firmware of the peer domain — typically a second core on the same SoC.\n\nThe resulting strlen() inside the log packager walks past the end of the frame object until it finds a zero byte. With the icmsg backend the frame lives in a stack buffer of the IPC work-queue thread, so bytes of that thread's stack are rendered into the log message; with the rpmsg backends the scan continues through the shared vring memory. Impact is bounded to disclosure of a small amount of adjacent memory into the receiving domain's log sink, plus a possible fatal fault if the scan leaves a mapped region; the log packager's own -ENOSPC bound prevents the overrun from becoming a write. The fix bounds the conversion with %.*s and MIN(msg->channel_name_len, sizeof(msg->channel_name))."
}
],
"lastModified": "2026-10-15T19:17:36.960",
"sourceIdentifier": "vulnerabilities@zephyrproject.org"
}