CVE-2026-89603 Overview
CVE-2026-89603 is a race condition in the Linux kernel's syscall entry path that allows an unprivileged process to bypass a newly installed seccomp filter. The flaw occurs when one thread is stopped inside syscall_trace_enter() for ptrace while another thread installs a seccomp filter using SECCOMP_FILTER_FLAG_TSYNC. The SYSCALL_WORK_SECCOMP flag is set on the stopped thread, but the entry path evaluates a cached work variable sampled before the ptrace stop, so the filter check is silently skipped.
Critical Impact
An unprivileged local process can execute prohibited system calls (such as execve) that a concurrently installed seccomp filter was intended to block, undermining sandbox isolation.
Affected Products
- Linux kernel (upstream) syscall entry code path (kernel/entry/common.c)
- Stable kernel branches receiving backports referenced by commits 09e8880, 22bb836, 23001ee, 459f33f, 4a35912, 8709e7e, ab46474, and eca5ed42
- Container runtimes, browser sandboxes, and systemd services that rely on TSYNC-installed seccomp filters for isolation
Discovery Timeline
- 2026-09-11 - CVE-2026-89603 published to NVD
- 2026-09-14 - Last updated in NVD database
Technical Details for CVE-2026-89603
Vulnerability Analysis
The Linux kernel's generic syscall entry code reads the per-thread syscall_work flags once at entry, caches the value into a local variable, and then invokes ptrace handling if SYSCALL_WORK_SYSCALL_TRACE is set. After ptrace returns, subsequent gate checks — including the seccomp evaluation — consult the cached work value rather than re-reading the live flags.
This is a classic Time-of-Check to Time-of-Use (TOCTOU) issue in the syscall gate. During a ptrace stop, a sibling thread has an unbounded window to call seccomp(SECCOMP_SET_MODE_FILTER, SECCOMP_FILTER_FLAG_TSYNC, ...). TSYNC propagates the filter to every thread in the thread group and sets SYSCALL_WORK_SECCOMP on the traced thread. Because the entry path never observes the new flag, the traced thread proceeds directly to syscall dispatch.
The risk is amplified by ptrace's ability to rewrite the syscall number during the stop. A tracer can change a benign syscall into one the new filter should block, achieving sandbox escape from an unprivileged context.
Root Cause
The root cause is a stale read of syscall_work flags across a scheduling boundary. syscall_trace_enter() samples the flags before invoking ptrace notifications, then evaluates seccomp against that sample. Any flag transition performed by another CPU during the ptrace stop is invisible to the current thread.
Attack Vector
Exploitation requires two cooperating unprivileged threads in the same process (or a process able to attach via ptrace) on the local system. Thread A enters a syscall and is stopped by a tracer at PTRACE_SYSCALL. Thread B invokes seccomp() with SECCOMP_FILTER_FLAG_TSYNC to install a filter intended to block execve or other sensitive calls. When the tracer resumes thread A — optionally rewriting orig_rax to the blocked syscall number — the kernel dispatches the syscall without consulting the newly attached filter.
No verified public proof-of-concept was published with the advisory. Refer to the upstream commits listed under Kernel Change Log Entry 09e8880 and Kernel Change Log Entry eca5ed42 for the exact code paths modified.
Detection Methods for CVE-2026-89603
Indicators of Compromise
- Unprivileged processes successfully invoking syscalls that an active seccomp policy is configured to deny, particularly execve, execveat, ptrace, or clone variants.
- Concurrent ptrace(PTRACE_ATTACH) and seccomp(SECCOMP_SET_MODE_FILTER, SECCOMP_FILTER_FLAG_TSYNC, ...) calls issued by sibling threads of the same thread group.
- Sandboxed workloads (containers, browsers) emitting audit records for syscalls that policy claims are blocked.
Detection Strategies
- Enable Linux audit rules on execve, ptrace, and seccomp syscalls and correlate them per PID/TGID to identify TSYNC installations racing against ptrace stops.
- Instrument sandbox managers to log seccomp filter installation events and compare against downstream syscall telemetry for the same thread group.
- Deploy eBPF probes on syscall_trace_enter and __secure_computing to detect syscall completions that skip the seccomp evaluation path after a ptrace stop.
Monitoring Recommendations
- Alert on any process that both attaches via ptrace and invokes seccomp() with TSYNC within a short time window.
- Baseline expected seccomp policy behavior per container image and flag deviations where allow-listed syscalls diverge from policy expectations.
- Aggregate kernel version inventory across the fleet and prioritize unpatched hosts running container, browser, or JIT workloads.
How to Mitigate CVE-2026-89603
Immediate Actions Required
- Apply the upstream stable kernel updates that re-read syscall_work after ptrace handling, referenced by commits 09e8880, 22bb836, 23001ee, 459f33f, 4a35912, 8709e7e, ab46474, and eca5ed42.
- Reboot affected hosts after upgrading; live-patch equivalents should be validated against the same commit set.
- Audit multi-tenant hosts and container platforms first, since local, low-privilege access is the exploitation prerequisite.
Patch Information
The fix modifies the generic entry path so that the syscall_work flags are re-sampled after ptrace_report_syscall_entry() returns. This ensures a TSYNC-installed SYSCALL_WORK_SECCOMP flag is observed before the seccomp gate executes. Distribution kernels should incorporate the backports linked in the NVD references, including Kernel Change Log Entry 4a35912 and Kernel Change Log Entry ab46474.
Workarounds
- Restrict ptrace scope by setting kernel.yama.ptrace_scope=2 (admin-only) or =3 (disabled) on hosts where ptrace is not required.
- Install seccomp filters before spawning worker threads so no thread group member can be ptrace-stopped during initial policy setup.
- Prefer SECCOMP_FILTER_FLAG_SPEC_ALLOW and per-thread filter installation without TSYNC where the sandbox architecture allows it, then apply the kernel patch as the durable fix.
# Configuration example
# Verify the running kernel includes the fix commit
uname -r
# Tighten ptrace scope while patches are staged
sysctl -w kernel.yama.ptrace_scope=2
echo 'kernel.yama.ptrace_scope = 2' > /etc/sysctl.d/10-ptrace.conf
# Audit seccomp and ptrace usage across the fleet
auditctl -a always,exit -F arch=b64 -S seccomp -S ptrace -k cve-2026-89603
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

