{"answers":{"affected":"It affects 1 product.","exploited":"There is no known exploitation of CVE-2026-16513 in the wild and no public exploit code.","fix":"No fix has been published for CVE-2026-16513 yet. Limit exposure of the affected software until one is available.","what":"CVE-2026-16513 is a high-severity memory corruption vulnerability in Zephyrproject Zephyr, published on 28 Sep 2026. It can only be exploited from the same machine or local network, with no action from the victim."},"fix_prompt":"Check this codebase for CVE-2026-16513 and fix it if it is affected.\n\nWhat it is: CVE-2026-16513 is a high-severity memory corruption vulnerability in Zephyrproject Zephyr, published on 28 Sep 2026. It can only be exploited from the same machine or local network, with no action from the victim.\nExploitation: There is no known exploitation of CVE-2026-16513 in the wild and no public exploit code.\n\nAffected product: Zephyrproject Zephyr. No package-level version data is available, so check the vendor advisory linked from the reference page.\n\nTask:\n1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.\n2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.\n3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.\n4. Run the tests and summarise what changed and why.\n5. If nothing in the project is affected, say so and change nothing.\n\nReference: https://insights.sbomify.com/CVE-2026-16513/ (Markdown: https://insights.sbomify.com/CVE-2026-16513/index.md)","id":"CVE-2026-16513","markdown":"https://insights.sbomify.com/CVE-2026-16513/index.md","name":"CVE-2026-16513","record":{"aliases":["GHSA-fwmc-q8qg-jcxq"],"analysis":{"component_type":"operating_system","fix_type":"patch","impacts":["privilege_escalation","code_execution"],"network_reachable":"adjacent_or_local","non_default_config":true,"product_category":"Zephyr RTOS","requires_auth":"low_privilege","summary":"Missing write validation in RTIO syscall allows arbitrary kernel memory writes, enabling privilege escalation from user to kernel mode.","user_interaction":"not_required","vuln_class":"memory_corruption"},"analysis_generated_by":"qwen3.8-flash-next","assigner":"zephyr","cpe":[{"product":"zephyr","vendor":"zephyrproject"}],"cvss":{"score":7.8,"severity":"high","source":"cna","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","version":"3.1"},"cwes":[{"id":"CWE-787","name":"Out-of-bounds Write"}],"description":"The userspace verifier z_vrfy_rtio_sqe_copy_in_get_handles() in subsys/rtio/rtio_syscalls.c (subsys/rtio/rtio_handlers.c before v4.3.0) validated the RTIO object handle and the sqes input array, but not the handle out-parameter. On the first loop iteration it executed *handle = sqe, storing the kernel address of the newly acquired submission-queue entry through a pointer taken verbatim from user mode, with no K_SYSCALL_MEMORY_WRITE check in front of it.\n\nAny user-mode thread that has been granted a struct rtio kernel object can invoke the syscall with an arbitrary address in handle. That is the ordinary way an unprivileged thread uses the RTIO API, for example via sensor_read_async_mempool() or the async ADC helpers, which call rtio_sqe_copy_in_get_handles() internally. The store happens in supervisor mode before any submission-entry validation, so it fires regardless of whether the SQE contents are subsequently rejected. Only builds with CONFIG_USERSPACE and CONFIG_RTIO are affected; without CONFIG_USERSPACE the verifier is not compiled and the caller is already privileged.\n\nThe write address is fully attacker-chosen and the written value is a pointer into the caller's own RTIO ring, whose contents the caller controls (the following *sqe = sqes[i] copies an attacker-supplied struct rtio_sqe into that slot). This yields a write-what-where primitive placing a pointer to attacker-controlled data at any kernel address, sufficient to corrupt kernel function pointers, thread structures, or memory-domain partition tables, and thus to escalate from user mode to kernel mode, defeating the isolation boundary CONFIG_USERSPACE is meant to enforce. At minimum it is a reliable kernel memory-corruption and crash primitive. The reporter reproduced the write on qemu_x86: a K_USER thread changed a supervisor global from NULL to a live kernel SQE pointer.\n\nThe fix adds K_SYSCALL_MEMORY_WRITE(handle, sizeof(*handle)) (guarded by the existing optional-NULL semantics) before the loop, so the destination must lie in the calling thread's writable memory domain or the thread is terminated by K_OOPS. The neighbouring verifier z_vrfy_rtio_cqe_get_mempool_buffer(), which checked its buff/buff_len out-parameters only for read although the implementation writes through them, was hardened separately by bea93400138 (\"rtio: syscalls: validate output params as writable\"); that residual was materially weaker, since a read check still confines the target to the caller's own memory domain.","ecosystems":[],"exploits":{"exploitdb":0,"first_seen":null,"github_poc":0,"max_poc_stars":null,"metasploit":0,"nuclei":0,"refs":[],"tier":"none_known"},"has_fix":false,"headline":"Missing write validation of user-supplied handle pointer in the RTIO syscall verifier allows arbitrary kernel write","id":"CVE-2026-16513","indexable":true,"kev":null,"kind":"cve","links":{"ecosystem":null,"product":"zephyrproject:zephyr","products":["zephyrproject:zephyr"],"type":"memory_corruption","year":"2026"},"n_packages":0,"n_references":2,"next":{"headline":"Out-of-bounds read in gPTP Announce path-trace validation via unvalidated stepsRemoved","id":"CVE-2026-16514"},"packages":[],"prev":{"headline":"Out-of-bounds read in the Zephyr gPTP receive path when handling short Ethernet frames","id":"CVE-2026-16512"},"products":["zephyr"],"published":"2026-09-28","related":[{"cvss_score":9.8,"headline":"Out-of-bounds read/write in HTTP WebSocket upgrade via non-null-terminated Sec-WebSocket-Key","id":"CVE-2026-5067","kev_date_added":null,"published":"2026-06-09"},{"cvss_score":9.8,"headline":"Bluetooth HCI Error Handling Double Free","id":"CVE-2022-3806","kev_date_added":null,"published":"2023-01-19"},{"cvss_score":9.8,"headline":"Memory corruption in getaddrinfo","id":"CVE-2017-14199","kev_date_added":null,"published":"2019-04-12"},{"cvss_score":9.8,"headline":"Null dereference in n/a","id":"CVE-2018-1000800","kev_date_added":null,"published":"2018-09-06"},{"cvss_score":9.6,"headline":"DOS: Incorrect handling of the initial HCI ACL_MTU handshake packet leads to crash of bluetooth host layer","id":"CVE-2021-3329","kev_date_added":null,"published":"2023-02-26"},{"cvss_score":9.6,"headline":"DoS: Invalid Initialization in le_read_buffer_size_complete","id":"CVE-2023-0397","kev_date_added":null,"published":"2023-01-19"},{"cvss_score":9.6,"headline":"Usb bluetooth device ACL read cb buffer overflow","id":"CVE-2021-3966","kev_date_added":null,"published":"2023-01-11"}],"sources":[{"class":"attribution","licence":"CVE Terms of Use (MITRE)","name":"CVE List","prefix":"CVE"},{"class":"attribution","licence":"US public information, NVD API terms","name":"NVD"},{"class":"attribution","licence":"CWE Terms of Use","name":"CWE (MITRE)"},{"class":"attribution","licence":"FIRST CVSS licence","name":"CVSS (FIRST)"}],"ssvc":{"automatable":"no","exploitation":"none","technical_impact":"total"},"state":"PUBLISHED","updated":"2026-09-30","vendors":["zephyrproject"]},"summary":"Missing write validation in RTIO syscall allows arbitrary kernel memory writes, enabling privilege escalation from user to kernel mode.","url":"https://insights.sbomify.com/CVE-2026-16513/"}