CVE-2026-12631

MEDIUMPre-NVD 6.56.5
EchelonGraph scoreMEDIUM confidence

This medium-severity CVE scores 6.5 under a secondary CVSS source (NVD's own analysis pending). EPSS exploit probability: 0.1%, top 96% of all CVEs by exploit prediction. GitHub Security Advisory data not yet ingested — confidence will rise once GHSA publishes (typical lag: hours to days for open-source ecosystem CVEs; never for infrastructure-only CVEs).

Triggered by: NVD CVSS baseline
Sources: epss, secondary
6.5EG
EchelonGraph verdictMonitorLow exploitation likelihood right now — keep watching.
  • Lower severity and no public exploit yet
CISA-KEV: Not listedEPSS PROB: 0%CVSS: 6.5Exploit: None knownExposed: 0

No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.

The Zephyr kernel validates the k_thread_join() and k_thread_abort() system calls (declared __syscall in include/zephyr/kernel.h) through thread_obj_validate() in kernel/thread.c. Its default switch branch is the access-denied path, taken when k_object_validate() returns -EPERM (the calling user thread was never granted access to the target thread object) or -EBADF (the supplied pointer is not a registered kernel object of the right type). That branch invoked K_OOPS(K_SYSCALL_VERIFY_MSG(ret, "access denied")), but K_SYSCALL_VERIFY_MSG treats a true expression as success; the non-zero error code ret therefore read as "verified OK", the kernel oops was never raised, and control fell through to CODE_UNREACHABLE.

Because k_thread_join() and k_thread_abort() are system calls, an unprivileged user-mode thread (under CONFIG_USERSPACE) can reach this denial path directly by calling either syscall on a thread object it does not own. Instead of the offending thread being cleanly terminated, execution reaches __builtin_unreachable() while running in supervisor mode inside the syscall handler.

On Clang builds CODE_UNREACHABLE emits an illegal-instruction trap, so a user thread can deterministically crash the kernel — a locally triggerable denial of service that escapes the userspace sandbox. On GCC builds the path is undefined behavior: the compiler may drop the return-value handling for thread_obj_validate(), so it can return an undefined bool; if that is false, the caller proceeds into the real k_thread_join()/k_thread_abort() implementation for a thread the user was never authorized to access, an access-control bypass.

The fix changes the verification expression to ret == 0, so a denied (non-zero) result now correctly raises K_OOPS and terminates the offending caller.

CVSS v3
6.5
EG Score
6.5(medium)
EG Risk
29(Track)
EG Risk 29/100SSVC: Track

EG Risk is EchelonGraph's 0–100 priority score: it fuses intrinsic severity with real-world exploitation and automatability so you can rank equal-severity CVEs and fix the most dangerous first. Higher = act sooner. Distinct from the 0–10 EG Score (severity).

How it’s computed
Severity65% × 45%
Exploitation0% × 40%
Automatability0% × 15%
Action: Routine — remediate on your standard cadence.
EPSS PROB
0%
EPSS %ILE
4%
KEV
Not listed

Published

August 18, 2026

Last Modified

August 26, 2026

Advisory Details (2)

Auto-updated Aug 19, 2026
Patch available. Sources: github, github_commit.
github Patch Available

Broken access-control denial in k_thread_join/k_thread_abort syscall validation in Zephyr kernel · Advisory · zephyrproject-rtos/zephyr · GitHub

https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-crfw-75jw-hjm3
github_commit

commit bd1828652dfc (zephyrproject-rtos/zephyr)

Fix landed in zephyrproject-rtos/zephyr commit bd1828652dfc — awaiting tagged release

https://github.com/zephyrproject-rtos/zephyr/commit/bd1828652dfc217ba9f3a2221a7499cd8914ed9c

Weakness Classification(1)

MITRE Common Weakness Enumeration — the root-cause categories this CVE belongs to.

Data Freshness Timeline

(refreshed 10× in last 7d / 21× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

  1. 2026-08-30 01:21 UTCEPSS rescore
  2. 2026-08-29 11:02 UTCEG score recompute
  3. 2026-08-28 21:40 UTCEPSS rescore
  4. 2026-08-27 15:07 UTCEG score recompute
  5. 2026-08-27 14:24 UTCEPSS rescore
  6. 2026-08-26 17:14 UTCEG score recompute
  7. 2026-08-25 23:41 UTCEG score recompute
  8. 2026-08-25 13:48 UTCEPSS rescore
  9. 2026-08-25 01:48 UTCEG score recompute
  10. 2026-08-23 06:02 UTCEG score recompute
  11. 2026-08-23 00:19 UTCEPSS rescore
  12. 2026-08-22 08:08 UTCEG score recompute
  13. 2026-08-21 23:48 UTCEPSS rescore
  14. 2026-08-21 10:14 UTCEG score recompute
  15. 2026-08-20 22:55 UTCEPSS rescore
  16. 2026-08-20 12:20 UTCEG score recompute
  17. 2026-08-19 17:03 UTCEPSS rescore
  18. 2026-08-19 14:27 UTCEG score recompute
  19. 2026-08-19 13:40 UTCEG score recompute
  20. 2026-08-18 21:25 UTCEG score recompute
  21. 2026-08-18 21:07 UTCMITRE cvelistV5first tracked

Frequently asked(5)

What is CVE-2026-12631?
CVE-2026-12631 is a medium vulnerability published on August 18, 2026. The Zephyr kernel validates the kthreadjoin() and kthreadabort() system calls (declared syscall in include/zephyr/kernel.h) through threadobjvalidate() in kernel/thread.c. Its default switch branch is the access-denied path, taken when kobjectvalidate() returns -EPERM (the calling user thread was…
When was CVE-2026-12631 disclosed?
CVE-2026-12631 was first published in the National Vulnerability Database on August 18, 2026, with the most recent update on August 26, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
Is CVE-2026-12631 actively exploited?
CVE-2026-12631 is not currently on CISA's Known Exploited Vulnerabilities catalog. FIRST EPSS estimates a 0% probability of exploitation in the next 30 days, which ranks it in the top 95.6% of all scored CVEs.
What is the CVSS score of CVE-2026-12631?
CVE-2026-12631 has a CVSS v3 base score of 6.5 (NVD).
How do I remediate CVE-2026-12631?
Patch to the fixed version published by the affected vendor. Where vendor advisories exist for CVE-2026-12631, EchelonGraph cross-links them in the Vendor Advisories panel below — those typically contain the canonical remediation steps, fixed version numbers, and any vendor-specific mitigations.

Dependency Blast Radius

Explore the affected products and dependency analysis for CVE-2026-12631

Explore →

Is Your Infrastructure Affected by CVE-2026-12631?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.