Direct naar de inhoud
⚡ Kritieke cyberalerts voor jouw sector & systemen — direct in je inbox. Aanmelden →
CVE's Videos Dagbriefing

← Terug naar CVE-database

CVE-2026-18418

LOW · 3.4 CVSS Gepubliceerd: CWE-125

Beschrijving NL

De zbus proxy agent IPC-backend in subsys/zbus/proxy_agent/zbus_proxy_agent_ipc.c registreerde de kanaalnaam van een afgewezen interdomeinframe met een gewone %s conversie. Het frametype struct zbus_proxy_msg heeft een channel_name[] -array met vaste grootte als laatste lid, en niets in het transport garandeert dat de array NUL-beëindigd is. De enige code die beëindiging verifieert, is zbus_proxy_agent_receive_cb() in subsys/zbus/proxy_agent/zbus_proxy_agent.c, die het frame in precies die gevallen afwijst — dus de waarschuwing drukte een niet-beëindigde buffer precies af op de foutpaden waar de naam ongeldig was bevonden (of, voor een ongeldige message_size, helemaal niet was geïnspecteerd). Elk peer-domein dat in staat is om een frame van sizeof(struct zbus_proxy_msg) bytes op het gebonden ipc_service-eindpunt te plaatsen, kan dit activeren door een frame te verzenden met een berichtgrootte buiten het bereik of met channel_name[] dat geen nul byte bevat. Het bereiken van de code vereist CONFIG_ZBUS_PROXY_AGENT_IPC en logging gebouwd op waarschuwingsniveau of hoger (de standaard), en vereist controle over de firmware van het peer-domein — meestal een tweede kern op dezelfde SoC. De resulterende strlen() in de logboekverpakker loopt langs het einde van het frameobject totdat deze een nul byte vindt. Met de icmsg-backend leeft het frame in een stapelbuffer van de IPC-werkwachtrijthread, dus bytes van de stapel van die thread worden weergegeven in het logbericht; met de rpmsg-backends gaat de scan verder via het gedeelde vringgeheugen. Impact is gebonden aan de openbaarmaking van een kleine hoeveelheid aangrenzend geheugen in het logboek van het ontvangende domein, plus een mogelijke fatale fout als de scan een toegewezen gebied verlaat; de eigen -ENOSPC gebonden van de logverpakker voorkomt dat de overschrijding een schrijven wordt. De fix begrenst de conversie met %.*s en MIN(msg->channel_name_len, sizeof(msg->channel_name)).

Origineel (Engels) tonen

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).

Any 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.

The 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)).

References