Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconGain unprivileged local shell access
-
DeliveryBrute-force globally sequential thread IDs
-
ExploitCall thr_kill2() with enumerated PID and TID
-
Installp_cansignal() result ignored, signal unconditionally delivered
-
C2SIGKILL sent to privileged or root-owned process
-
ExecuteCritical system daemon terminated
-
ImpactDenial of Service or jail-escape to host achieved
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires a local unprivileged account on the affected FreeBSD system (AV:L, PR:L) - remote exploitation is not possible without a pre-existing local foothold. No special system configuration or non-default features are required; the thr_kill2(2) system call is available to all local users by default. The attacker must supply a valid process ID and thread ID, but both are globally sequential and discoverable by brute force with zero prior visibility into the target, making this a low-skill enumeration. Jail boundary bypass is applicable whenever the attacker is executing inside a FreeBSD jail with no special jail configuration needed, since p_cansignal() normally enforces this boundary and the bypass is unconditional. Limiting factors: the vulnerability only poses risk on systems where untrusted local users or jailed processes are present; single-tenant systems with no local shell access to untrusted parties are not at practical risk. Sustained DoS requires repeated signaling because killed daemons may be automatically restarted by rc.d or init. |
| Impact | The official CVSS 3.1 score of 5.5 (AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H) accurately reflects the local, low-privilege exploitation vector and availability-only impact, but assigns Unchanged scope despite the advisory explicitly describing jail boundary bypass - this is a meaningful understatement of risk for jail-based multi-tenant FreeBSD deployments where cross-jail and host signaling represent a scope violation. SSVC assesses exploitation as 'none,' technical impact as 'partial,' and automatable as 'no,' consistent with the absence of a CISA KEV listing and no reported active exploitation at time of analysis. No EPSS score was provided in the source intelligence, so exploitation probability cannot be quantified beyond SSVC inference. The brute-forceable, globally sequential thread ID space materially lowers real-world attack complexity: an attacker requires no prior knowledge of the target process structure. Availability impact is High - SIGKILL can terminate any process including init or critical daemons, with cascading system instability. Organizations operating FreeBSD in multi-user or jail-isolated environments should treat priority as higher than the base score implies due to the jail escape dimension. |
| Exploit ScenarioDerived | A low-privileged local user or a process running inside a FreeBSD jail iterates through globally sequential thread IDs - requiring no prior knowledge of the target - and repeatedly calls thr_kill2() with candidate PID/TID pairs targeting a root-owned system daemon such as syslogd, cron, or ntpd. The kernel delivers SIGKILL to each matched thread regardless of the p_cansignal() result, terminating the daemon. A jailed attacker extends this attack to host processes by exploiting the same jail boundary bypass, effectively escaping the jail's isolation and causing cascading service failures across the host. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 26, 2026
Signal delivery bypass in FreeBSD's thr_kill2(2) system call allows an unprivileged local user - or a jailed process - to send arbitrary signals to any process on the system, including root-owned processes and critical daemons, causing Denial of Service. The flaw stems from a missing check on the return value of p_cansignal(), the kernel's permission enforcement primitive: the signal is unconditionally delivered before the error is propagated to the caller. No public exploit has been identified at time of analysis and SSVC assesses exploitation as none, though globally sequential thread IDs reduce the skill requirement to simple brute force, and the jail boundary bypass adds a container-escape dimension absent from the base CVSS score.
RemediationAI
Apply the vendor-released patches documented in FreeBSD Security Advisory FreeBSD-SA-26:25.thr.asc (https://security.freebsd.org/advisories/FreeBSD-SA-26:25.thr.asc): upgrade FreeBSD 15.0-RELEASE to p10 or later, FreeBSD 14.3-RELEASE to p15 or later, and FreeBSD 14.4-RELEASE to p6 or later using freebsd-update or from source. As a compensating control pending patch deployment, administrators can restrict unprivileged access to the thr_kill2(2) system call via MAC framework policies (e.g., mac_bsdextended) or capsicum capability mode if the application profile permits - note that this may impact multi-threaded applications that legitimately use the call. For jail environments specifically, consider auditing which jailed workloads carry local user access and applying resource limits (rctl) or restricting jail-level syscall access, though neither fully mitigates the bypass without the kernel patch. Restarting affected systems after patching ensures the corrected kernel is active.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerable code path is FreeBSD's thr_kill2(2) system call, which sends a signal to a specific thread within a target process. The kernel calls p_cansignal() - a mandatory access control primitive - to determine whether the calling process may signal the target. A logic error causes the signal to be delivered unconditionally before the return value of p_cansignal() is evaluated; the error is propagated to the caller only after the signal has already been sent. CWE-269 (Improper Privilege Management) captures this root cause: the privilege enforcement mechanism is present but its result is not acted upon. Critically, p_cansignal() also enforces FreeBSD jail isolation boundaries, meaning a jailed process exploiting this flaw can signal processes on the host or in sibling jails - a container-escape-class impact for jail-based multi-tenant deployments. FreeBSD thread IDs are allocated from a global monotonically increasing counter, making them enumerable by brute force without any special privileges or prior visibility into the target. Affected versions confirmed by EUVD-2026-39776: FreeBSD 15.0-RELEASE prior to p10, FreeBSD 14.3-RELEASE prior to p15, and FreeBSD 14.4-RELEASE prior to p6.
Know when Freebsd gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Jail boundary bypass constitutes a scope change (S:C); exploitation requires only a local low-privileged account; impact is availability-only from signal delivery.
Primary rating from Vendor (freebsd).
CVSS VectorVendor: freebsd
Lifecycle Timeline
2DescriptionCVE.org
When used to deliver a signal to a specific thread, thr_kill2(2) called p_cansignal() to determine whether the operation was permitted but did not check the result before delivering the signal. The signal was sent even when the permission check failed. The system call returned the resulting error to the caller, but by then the signal had already been delivered.
The missing check allows an unprivileged local user who knows or can guess a target's process and thread IDs to send any signal to a process they would not normally be permitted to signal, including processes owned by other users or by root. The same check enforces jail boundaries, so a jailed process can signal processes on the host or in other jails. Thread IDs are allocated globally and sequentially, and so can be discovered by brute force with no visibility into the target.
An attacker can stop or terminate arbitrary processes, including critical system daemons, resulting in a Denial of Service (DoS).
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
The x86-64 kernel system-call functionality in Xen 4.1.2 and earlier, as used in Citrix XenServer 6.0.2 and earlier and
The rtsol(8) and rtsold(8) programs do not validate the domain search list options provided in router advertisement mess
Server or client applications that call the SSL_check_chain() function during or after a TLS 1.3 handshake may crash due
The RFC 5011 implementation in rdata.c in ISC BIND 9.7.x and 9.8.x before 9.8.5-P2, 9.8.6b1, 9.9.x before 9.9.3-P2, and
Remote code execution in OpenSSH's sshd server (regression of CVE-2006-5051) allows unauthenticated remote attackers to
An issue was discovered in OpenSSH 7.9. Rated medium severity (CVSS 5.9), this vulnerability is remotely exploitable, no
The SSH transport protocol with certain OpenSSH extensions, found in OpenSSH before 9.6 and other products, allows remot
The vm_map_lookup function in sys/vm/vm_map.c in the mmap implementation in the kernel in FreeBSD 9.0 through 9.1-RELEAS
An OpenSSL TLS server may crash if sent a maliciously crafted renegotiation ClientHello message from a client. Rated med
Integer overflow in the _gd2GetHeader function in gd_gd2.c in the GD Graphics Library (aka libgd) before 2.2.3, as used
The Stream Control Transmission Protocol (SCTP) module in FreeBSD 9.3 before p33, 10.1 before p26, and 10.2 before p9, w
In FreeBSD 12.1-STABLE before r359565, 12.1-RELEASE before p7, 11.4-STABLE before r362975, 11.4-RELEASE before p1, and 1
EUVD-2026-39776
GHSA-hvc9-hvw8-q2fx
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB