CVE-2026-72693: Kbd: local privilege escalation in openvt via incorrect process owner verification allowing passwordless root login

Published Apr 26, 2026
·
Updated

openvt -u is intended to identify the owner of the current VT and then execute login as that user from a privileged context. In the documented kbrequest/init usage, the ownership test in authenticateuser() relies on stat("/proc/<pid>/fd/0"). stat() on /proc/<pid>/fd/0 follows the symlink to the underlying TTY device node. As a result, buf.stuid reflects the owner of the TTY node rather than the owner of the process holding the file descriptor. If the TTY owner returns to root or the getty owner after logout while an unprivileged process still has fd 0 attached to that TTY, the check can incorrectly treat that process as belonging to the privileged console owner. Once that check succeeds, the -u path executes a passwordless login as the selected user. In the documented kbrequest/init deployment using openvt -us, this can result in passwordless login -f root on the spawned VT. This report establishes that privilege escalation path for that documented deployment; it does not claim equivalent reachability for deployments that do not use openvt -u from a privileged kbrequest/init path.

Other sources

AIONLYREPORT package: kbd-2.8.0-3.fc43 ------ Summary: Local Privilege Escalation in openvt via Incorrect Process Owner Verification: openvt -u trusts the ownership of the TTY referenced by /proc/<pid>/fd/0 instead of the owning process, allowing passwordless root login in documented kbrequest/init deployments. Requirements to exploit: Local unprivileged access to a system where openvt -u is invoked with root privileges from a kbrequest/init configuration such as kb::kbrequest:/usr/bin/openvt -us, plus the ability to keep a process alive with fd 0 attached to the originating VT and then trigger the configured keyboard request. Component affected: kbd-2.8.0-3.fc43: src/openvt.c, authenticateuser(), and the privileged openvt -u login path. Version affected: kbd-2.8.0-3.fc43 when openvt -u is used in a privileged kbrequest/init deployment such as kb::kbrequest:/usr/bin/openvt -us Patch available: no released package fix established; proposed patch included below Version fixed: unknown Upstream coordination: Not notified. CVSS: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - 7.8 (HIGH) AV:L - Exploitation requires local access to the affected host and an interactive VT/session. AC:L - In the affected deployment, exploitation is straightforward: keep a process attached to the VT, log out, and trigger the configured keyboard request. PR:L - The attacker needs only normal unprivileged local access. UI:N - No separate victim interaction is required; the attacker performs the triggering action directly. S:U - The vulnerable check and resulting privilege change occur within the same system security scope. C:H - Successful exploitation yields root access and exposure of system-wide data. I:H - Successful exploitation yields root authority to modify system state arbitrarily. A:H - Successful exploitation yields root authority to disrupt services or otherwise fully impact availability. Impact: Important. Red Hat rates flaws that allow a local user to gain additional privileges as Important. In the affected deployment, this issue can bypass normal authentication and yield root access through login -f. It is not Critical because exploitation is local and depends on a specific privileged configuration, but the resulting compromise is still full system compromise where that configuration is present. Embargo: no Reason: The issue is local-only and configuration-dependent, and there is a straightforward operational workaround: stop using openvt -u in the kbrequest/init path or disable the keyboard request binding until a fix is available. Acknowledgement: Aisle Research Vulnerability Details: openvt -u is intended to identify the owner of the current VT and then execute login as that user from a privileged context. In the documented kbrequest/init usage, the ownership test in authenticateuser() relies on stat("/proc/<pid>/fd/0"): c while ((dentp = readdir(dp))) { sprintf(filename, "/proc/%s/fd/0", dentp->dname); if (stat(filename, &buf)) continue; if (buf.stdev == consoledev && buf.stino == consoleino && buf.stuid == consoleuid) goto gotaprocess; } stat() on /proc/<pid>/fd/0 follows the symlink to the underlying TTY device node. As a result, buf.stuid reflects the owner of the TTY node rather than the owner of the process holding the file descriptor. If the TTY owner returns to root or the getty owner after logout while an unprivileged process still has fd 0 attached to that TTY, the check can incorrectly treat that process as belonging to the privileged console owner. Once that check succeeds, the -u path executes a passwordless login as the selected user: c if (asuser) execlp("login", "login", "-f", username, NULL); In the documented kbrequest/init deployment using openvt -us, this can result in passwordless login -f root on the spawned VT. This report establishes that privilege escalation path for that documented deployment; it does not claim equivalent reachability for deployments that do not use openvt -u from a privileged kbrequest/init path. Steps to reproduce: 1. Configure the documented init usage with kb::kbrequest:/usr/bin/openvt -us. 2. Load a keyboard mapping such as echo "alt keycode 103 = SpawnConsole" loadkeys. 3. Log in as an unprivileged user on tty1. 4. Start a background process that keeps standard input attached to that TTY: nohup sh -c 'sleep 1000000' </dev/tty1 >/dev/null 2>&1 &. 5. Log out from tty1 so the TTY ownership returns to root or the getty owner. 6. Trigger the configured keyboard request, for example with Alt+Up Arrow in the documented setup. 7. Observe passwordless login -f root execution on the new VT. Mitigation: Until a fix is available, avoid openvt -u in privileged kbrequest/init deployments. If console spawning is required, configure the keyboard request to start a normal authenticated login on the new VT instead of pre-authenticating with login -f, or disable the keyboard request binding entirely. Proposed Fix: Validate the actual process owner from /proc/<pid> before matching its fd/0 against the target TTY, and stop using the TTY node owner as proof of process ownership. diff diff --git a/src/openvt.c b/src/openvt.c — a/src/openvt.c +++ b/src/openvt.c @@ -120,13 +120,21 @@ authenticateuser(int curvt) / check to make sure that user has a process on that tty / / this will fail for example when X is running on the tty / while ((dentp = readdir(dp))) { + struct stat pbuf; + + sprintf(filename, "/proc/%s", dentp->dname); + if (stat(filename, &pbuf)) + continue; + if (pbuf.stuid != consoleuid) + continue; + sprintf(filename, "/proc/%s/fd/0", dentp->dname); - if (stat(filename, &buf)) continue; if (buf.stdev == consoledev && buf.stino == consoleino && buf.stuid == consoleuid) + if (buf.stdev == consoledev && buf.stino == consoleino) goto gotaprocess; }

------ This report was generated using AI technology. Always review AI-generated content prior to use

— Red Hat

Kbd: local privilege escalation in openvt via incorrect process owner verification allowing passwordless root login

— Microsoft

Affected Software

2 affected componentsFixes available
Red Hat kbd=2.8.0-3.fc43
Microsoft azl3 kbd 2.2.0-2<2.2.0-3
2.2.0-3

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 2.2.0-3
  2. Configuration

    Mitigation: avoid using `openvt -u` in the documented privileged `kbrequest`/init deployment (`kb::kbrequest:/usr/bin/openvt -us`), since `openvt -u` is the vulnerable path that can result in passwordless `login -f root` on the spawned VT.

    kbd openvt (src/openvt.c) openvt -u usage = avoid
  3. Configuration

    Mitigation: disable the keyboard request binding (e.g., the documented `kb::kbrequest:/usr/bin/openvt -us` binding) until a fix is available.

    kbrequest binding (init/keyboard request) keyboard request binding for openvt -us = disable
  4. Operational

    If exploitation may have occurred, monitor for passwordless `login -f root` on spawned VTs after triggering the configured keyboard request (e.g., Alt+Up Arrow) and respond accordingly (e.g., investigate the session and remediate any compromise).

Event History

Apr 26, 2026
Data Sourced
via Red Hat·06:17 PM
DescriptionSeverityAffected Software
Aug 11, 2026
CVE Published
via MITRE·08:39 AM
Data Sourced
via MITRE·08:39 AM
DescriptionSeverityWeakness
Data Sourced
via NVD·09:17 AM
DescriptionSeverityWeakness
Aug 23, 2026
Data Sourced
via Microsoft·09:56 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which deployments are known to be exposed?

The established escalation path is the documented kbrequest/init deployment that invokes openvt with -us. Equivalent reachability is not established for deployments that do not use openvt -u from a privileged kbrequest/init path.

2

What does an attacker need to exploit this path?

The attacker needs local access and an unprivileged process whose standard input remains attached to a TTY after that TTY's ownership has returned to root or the getty owner. The vulnerable owner check can then misidentify that process as the privileged console owner.

3

What is the resulting privilege level in the documented deployment?

In the documented openvt -us configuration, the selected user can be logged in without a password. This can produce passwordless login -f root on the spawned virtual terminal.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203