Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain restricted account with env passthrough
-
DeliverySet malicious LANGUAGE and non-C LANG via AcceptEnv
-
Exploitgettext path-traverses to attacker .mo file
-
ExecutionFormat-directive mismatch corrupts printf processing
-
ImpactExecute code and escape forced command
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires all of the following concrete conditions, per the description: (1) the target program uses gettext and runs WITHOUT AT_SECURE - i.e. not setuid/setgid - because setuid/setgid programs reject LANGUAGE entries containing '/' or equal to '..'; (2) the attacker can set the LANGUAGE environment variable across a trust boundary (the cited example is an SSH server using the AcceptEnv directive to accept LANGUAGE and LANG from clients, with the account restricted to a forced command); (3) the attacker can also select an installed non-trivial LC_MESSAGES locale (via LANG or LC_ALL) that is not 'C', 'C.<encoding>' or 'POSIX', since LANGUAGE is ignored for those; and (4) the attacker can place a crafted .mo file in a filesystem location readable by the target program. Limiting factors: these multiple simultaneous prerequisites (trust-boundary env passthrough, a selectable installed locale, and a writable/readable file location) are why attack complexity is high and why default, non-env-forwarding deployments are not exposed. |
| Impact | This is a genuine but conditional risk rather than a drop-everything emergency, and the signals are internally consistent. The vendor-supplied CVSS vector (CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H, 7.0 HIGH) describes a local attack vector with high attack complexity, low privileges required, and no user interaction, yielding high confidentiality, integrity and availability impact - the high impact comes from potential arbitrary code execution, while AC:H and AV:L reflect the several prerequisites that must align. No EPSS score, no CISA KEV entry, and no PoC/exploit reference were provided in the input, so exploitation remains theoretical: no public exploit identified at time of analysis. The vuln.today decision label is 'this_week', which aligns with a patch-available, high-impact-but-constrained issue - a priority to remediate on a normal patch cycle rather than an active-exploitation fire drill. The core value here is architectural: this is a bypass of the CVE-2014-0475 fix, which rejected '..' in locale names from setlocale/LC_*/LANG but never covered the LANGUAGE variable that gettext reads directly, so defenders who assumed CVE-2014-0475 closed this class of path-traversal should note the gap. Missing data to flag explicitly: EPSS probability is absent (cannot quantify likelihood), and KEV status is not confirmed (treat as not known-exploited, not as proof of safety). |
| Exploit ScenarioDerived | An attacker with a restricted SSH account (locked to a forced command) connects to a server whose sshd uses AcceptEnv to pass LANGUAGE and LANG from the client. The attacker sets LANGUAGE to a path-traversal value and LANG to an installed non-C locale, causing a gettext-using program to load a crafted .mo file the attacker planted in a readable location; a format-directive mismatch in that catalog triggers undefined behaviour in the printf family, potentially yielding code execution with the program's privileges and escaping the forced-command restriction. No public exploit code was identified in the provided sources, so this scenario is grounded in the description rather than a verified working exploit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Path traversal in the GNU C Library gettext implementation lets an attacker who can set the LANGUAGE environment variable make any gettext-using program load an attacker-supplied .mo message catalog from an arbitrary filesystem location, even though the earlier CVE-2014-0475 fix blocked '..' components in the locale variables. A crafted catalog can crash the target through out-of-range offsets or supply translations whose printf format directives do not match the program's arguments, producing undefined behaviour that may escalate to code execution with the program's privileges. Exploitation is conditional: the program must not be running AT_SECURE (setuid/setgid, which rejects such LANGUAGE entries), the environment must cross a trust boundary (the description's example is an SSH server with AcceptEnv accepting LANGUAGE and LANG for an account limited to a forced command), a non-C/POSIX LC_MESSAGES locale must also be selectable, and the crafted .mo file must be readable by the target. The vendor advisory GLIBC-SA-2026-0025 is published, the assigned CVSS is 7.0 with AV:L/AC:H/PR:L, and no public exploit code has been identified at time of analysis; the priority signal is to address this within the current week rather than as an emergency.
RemediationAI
Patch status per the supplied data is 'available from vendor': the fix is documented in advisory GLIBC-SA-2026-0025 (https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=advisories/GLIBC-SA-2026-0025) and the patch submission is on the libc-alpha list (https://inbox.sourceware.org/libc-alpha/20261012112453.47383-1-avinal.xlvii@gmail.com), referenced from bug 17142; because no exact released glibc version is given in the input, obtain the fixed build from your distribution's glibc update and verify against the advisory once it names the release. If the update cannot be applied immediately, use the prerequisites the vendor description identifies as the attack surface: remove LANGUAGE from any AcceptEnv directive (and stop forwarding it from other environment-passthrough paths) so remote clients cannot inject catalog path entries, accepting that sessions lose their client-requested language selection; ensure accounts and services that consume untrusted environments resolve LC_MESSAGES to 'C', 'C.<encoding>' or 'POSIX', which causes gettext to ignore LANGUAGE entirely, at the cost of localized output; and prevent untrusted writers from placing .mo files anywhere readable by gettext-using processes that accept external environments. Verify before relying on AT_SECURE behaviour: setuid/setgid programs reject the malicious LANGUAGE entries, so exposure is confined to non-AT_SECURE targets that inherit attacker-controlled environments.
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
glibc's gettext family resolves message catalogs by appending locale entries to the catalog directory, and it reads the LANGUAGE environment variable directly rather than routing it through setlocale. The CVE-2014-0475 hardening rejected '..' path components in locale names supplied to setlocale or drawn from LC_ALL, LC_* and LANG, so LANGUAGE remained an unchecked path-building input (CWE-22). Because LANGUAGE is a colon-separated list whose entries are concatenated into a directory path, entries containing '/' or equal to '..' escape the trusted, read-only catalog directories that the .mo trust model depends on. Two conditions gate reachability: setuid/setgid (AT_SECURE) programs refuse such entries, and LANGUAGE is ignored when LC_MESSAGES resolves to 'C', 'C.<encoding>' or 'POSIX', so a different installed locale must be selected via LANG or LC_ALL. Because .mo files are trusted binaries containing offsets and printf-style format strings, a malicious catalog can trigger out-of-range offsets that crash the process or translation strings whose directives disagree with the caller's arguments, yielding undefined behaviour in the printf family and potentially arbitrary code execution with the target's privileges. The upstream discussion is tracked in sourceware bug 17142 and advisory GLIBC-SA-2026-0025, with the fix submitted to the libc-alpha list.
Know when Glibc 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:H/PR:L/UI:N/S:U/C:H/I:H/A:H
Attacker controls a local environment variable (AV:L) via a low-privilege restricted account (PR:L); multiple required conditions warrant AC:H; code execution yields full C:H/I:H/A:H.
Primary rating from Vendor (glibc).
CVSS VectorVendor: glibc
DescriptionCVE.org
The gettext family of functions in the GNU C Library version 2.0 and later accept LANGUAGE environment variable entries that contain '/' or that are equal to "..", unless the program is setuid or setgid (AT_SECURE). An attacker who can set LANGUAGE in the environment of a program that uses gettext can make it load a message catalog (.mo file) from an arbitrary location in the file system. A crafted .mo file can crash the program through out-of-range offsets, or supply translations whose format directives do not match the arguments passed by the program. That causes undefined behaviour in the printf family of functions and may allow arbitrary code execution with the privileges of the program. The safety of message catalogs relies on them being installed in trusted, read-only locations, and the directory traversal bypasses this.
The fix for CVE-2014-0475 rejects ".." path components in locale names passed to setlocale or taken from the LC_ALL, LC_* and LANG environment variables. gettext reads LANGUAGE directly and appends each colon-separated entry to the message catalog directory, so that fix did not cover LANGUAGE.
LANGUAGE is only used when the LC_MESSAGES locale is not "C", "C.<encoding>" or "POSIX", so the attacker must also be able to select another installed locale, for example through LANG or LC_ALL. Exploitation also requires that the attacker can place the crafted file in a location readable by the target program, and that the environment crosses a trust boundary without the program running as AT_SECURE. An example is an SSH server that accepts LANGUAGE and LANG from clients through the AcceptEnv directive and restricts an account to a forced command; the attacker may use this to escape the restriction.
Executive ViewAI
A high-severity path traversal vulnerability in the GNU C Library's gettext implementation (CVE-2026-84243) could allow attackers to crash or potentially execute code on affected Linux systems, impacting any application using gettext translations. This flaw is particularly dangerous in environments where environment variables are passed across trust boundaries, such as SSH servers. Leadership should prioritize patching to prevent service disruptions or compromise.
Apply vendor patch.
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
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Local privilege escalation in the GNU C Library (glibc) dynamic loader ld.so allows unprivileged local users on affected
Heap-based buffer overflow in the __nss_hostname_digits_dots function in glibc 2.2, and other 2.x versions before 2.18,
The iconv() function in the GNU C Library versions 2.39 and older may overflow the output buffer passed to it by up to 4
Multiple stack-based buffer overflows in the (1) send_dg and (2) send_vc functions in the libresolv library in the GNU C
Local privilege escalation in GNU glibc 2.36 and newer arises from a heap-based buffer overflow in __vsyslog_internal, r
Off-by-one error in the __gconv_translit_find function in gconv_trans.c in GNU C Library (aka glibc) allows context-depe
Integer overflow in string/strcoll_l.c in the GNU C Library (aka glibc or libc6) 2.17 and earlier allows context-depende
In glibc 2.26 and earlier there is confusion in the usage of getcwd() by realpath() which can be used to write before th
In the GNU C Library (aka glibc or libc6) through 2.29, proceed_next_node in posix/regexec.c has a heap-based buffer ove
GNU Libc current is affected by: Mitigation bypass. Rated critical severity (CVSS 9.8), this vulnerability is remotely e
The mq_notify function in the GNU C Library (aka glibc) versions 2.32 and 2.33 has a use-after-free. Rated critical seve
sprintf in the GNU C Library (glibc) 2.37 has a buffer overflow (out-of-bounds write) in some situations with a correct
EUVD-2026-114247
GHSA-8rvm-662m-jvqv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB