CVE-2026-84243
gettext: Directory traversal via the LANGUAGE environment variable
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.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- High
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.0
gettext: Directory traversal via the LANGUAGE environment variable
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.
- Record
CVE-2026-84243- CVSS 3.1
- 7.0 High
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-22
- Updated
- 2026-11-02
EUVDEUVD-2026-114247
7.0
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.
- Record
EUVD-2026-114247- CVSS 3.1
- 7.0 High
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-8rvm-662m-jvqv
7.0
The gettext family of functions in the GNU C Library version 2.0 and later accept LANGUAGE...
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.
- Record
GHSA-8rvm-662m-jvqv- CVSS 3.1
- 7.0 High
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-22
- Updated
- 2026-11-02
NVD
7.0
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.
- Record
CVE-2026-84243- CVSS 3.1
- 7.0 High
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-22
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-84243
7.0
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.
- Record
DEBIAN-CVE-2026-84243- CVSS 3.1
- 7.0 High
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-84243
7.0
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.
- Record
UBUNTU-CVE-2026-84243- CVSS 3.1
- 7.0 High
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-05
OSVAZL-112354 No score
CVE-2026-84243 affecting package glibc 2.38-21
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.
- Record
AZL-112354- Updated
- 2026-11-05
OSVROOT-OS-DEBIAN-12-CVE-2026-84243 No score
CVE-2026-84243 in glibc - Patched by Root
Root has patched CVE-2026-84243 in the glibc package for Root:Debian:12. Multiple fixed versions available.
- Record
ROOT-OS-DEBIAN-12-CVE-2026-84243- Updated
- 2026-11-04
OSVROOT-OS-DEBIAN-13-CVE-2026-84243 No score
CVE-2026-84243 in glibc - Patched by Root
Root has patched CVE-2026-84243 in the glibc package for Root:Debian:13. Multiple fixed versions available.
- Record
ROOT-OS-DEBIAN-13-CVE-2026-84243- Updated
- 2026-11-03
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
glibcAzure Linux:3 |
through 2.38-21 | None known |
glibcDebian:12 |
All versions, plus listed versions 2.36-10~02.36-92.36-9+deb12u12.36-9+deb12u102.36-9+deb12u11 Show 45 moreShow less2.36-9+deb12u122.36-9+deb12u132.36-9+deb12u142.36-9+deb12u22.36-9+deb12u32.36-9+deb12u42.36-9+deb12u52.36-9+deb12u62.36-9+deb12u72.36-9+deb12u82.36-9+deb12u92.36-9+loong642.37-12.37-102.37-112.37-122.37-132.37-142.37-152.37-15.12.37-15.1+sh42.37-15~deb13u12.37-162.37-172.37-182.37-192.37-22.37-32.37-42.37-52.37-62.37-72.37-82.37-92.38-12.38-102.38-112.38-122.38-12.12.38-132.38-142.38-15~02.38-15~12.38-22.38-3 |
None known |
glibcDebian:13 |
All versions, plus listed versions 2.41-122.41-12+deb13u12.41-12+deb13u22.41-12+deb13u32.41-12+deb13u4 Show 37 moreShow less2.41-13~hurd.02.41-13~hurd.12.42-12.42-102.42-112.42-122.42-12~hurd.12.42-132.42-142.42-14~hurd.12.42-152.42-15~hurd.12.42-162.42-172.42-22.42-32.42-42.42-52.42-62.42-72.42-82.42-8~hurd.12.42-8~hurd.22.42-92.43-12.43-22.43-32.43-3+m68k2.43-42.43-4+m68k2.43-52.43-62.43-72.43-7~hurd.12.44-12.44-22.44-3 |
None known |
glibcDebian:14 |
All versions, plus listed versions 2.41-122.41-13~hurd.02.41-13~hurd.12.42-12.42-10 Show 33 moreShow less2.42-112.42-122.42-12~hurd.12.42-132.42-142.42-14~hurd.12.42-152.42-15~hurd.12.42-162.42-172.42-22.42-32.42-42.42-52.42-62.42-72.42-82.42-8~hurd.12.42-8~hurd.22.42-92.43-12.43-22.43-32.43-3+m68k2.43-42.43-4+m68k2.43-52.43-62.43-72.43-7~hurd.12.44-12.44-22.44-3 |
None known |
glibcRoot:Debian:12 |
before 2.36-9+deb12u14.aikido.24 | 2.36-9+deb12u14.aikido.24 |
rootio-glibcRoot:Debian:12 |
before 2.36-9+deb12u14.aikido.24 | 2.36-9+deb12u14.aikido.24 |
glibcRoot:Debian:13 |
before 2.41-12+deb13u4.aikido.14 | 2.41-12+deb13u4.aikido.14 |
rootio-glibcRoot:Debian:13 |
before 2.41-12+deb13u4.aikido.14 | 2.41-12+deb13u4.aikido.14 |
eglibcUbuntu:Pro:14.04:LTS |
All versions, plus listed versions 2.17-93ubuntu42.18-0ubuntu12.18-0ubuntu22.18-0ubuntu42.18-0ubuntu5 Show 24 moreShow less2.18-0ubuntu62.18-0ubuntu72.19-0ubuntu22.19-0ubuntu32.19-0ubuntu42.19-0ubuntu52.19-0ubuntu62.19-0ubuntu6.12.19-0ubuntu6.32.19-0ubuntu6.42.19-0ubuntu6.52.19-0ubuntu6.62.19-0ubuntu6.72.19-0ubuntu6.82.19-0ubuntu6.92.19-0ubuntu6.102.19-0ubuntu6.112.19-0ubuntu6.132.19-0ubuntu6.142.19-0ubuntu6.152.19-0ubuntu6.15+esm12.19-0ubuntu6.15+esm22.19-0ubuntu6.15+esm32.19-0ubuntu6.15+esm4 |
None known |
glibcUbuntu:Pro:16.04:LTS |
All versions, plus listed versions 2.21-0ubuntu42.21-0ubuntu52.21-0ubuntu62.23-0ubuntu12.23-0ubuntu2 Show 18 moreShow less2.23-0ubuntu32.23-0ubuntu42.23-0ubuntu52.23-0ubuntu62.23-0ubuntu72.23-0ubuntu92.23-0ubuntu102.23-0ubuntu112.23-0ubuntu11.22.23-0ubuntu11.32.23-0ubuntu11.3+esm12.23-0ubuntu11.3+esm22.23-0ubuntu11.3+esm32.23-0ubuntu11.3+esm52.23-0ubuntu11.3+esm62.23-0ubuntu11.3+esm72.23-0ubuntu11.3+esm82.23-0ubuntu11.3+esm9 |
None known |
Show 6 moreShow less
| Package | Affected | Fixed |
|---|---|---|
glibcUbuntu:Pro:18.04:LTS |
All versions, plus listed versions 2.26-0ubuntu22.26-0ubuntu2.12.27-0ubuntu22.27-0ubuntu32.27-3ubuntu1 Show 11 moreShow less2.27-3ubuntu1.22.27-3ubuntu1.32.27-3ubuntu1.42.27-3ubuntu1.52.27-3ubuntu1.62.27-3ubuntu1.6+esm12.27-3ubuntu1.6+esm22.27-3ubuntu1.6+esm32.27-3ubuntu1.6+esm42.27-3ubuntu1.6+esm52.27-3ubuntu1.6+esm6 |
None known |
glibcUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 2.30-0ubuntu22.30-0ubuntu32.31-0ubuntu52.31-0ubuntu62.31-0ubuntu7 Show 13 moreShow less2.31-0ubuntu92.31-0ubuntu9.12.31-0ubuntu9.22.31-0ubuntu9.32.31-0ubuntu9.72.31-0ubuntu9.92.31-0ubuntu9.122.31-0ubuntu9.142.31-0ubuntu9.152.31-0ubuntu9.162.31-0ubuntu9.172.31-0ubuntu9.182.31-0ubuntu9.18+esm1 |
None known |
glibcUbuntu:22.04:LTS |
All versions, plus listed versions 2.34-0ubuntu32.35-0ubuntu12.35-0ubuntu32.35-0ubuntu3.12.35-0ubuntu3.3 Show 12 moreShow less2.35-0ubuntu3.42.35-0ubuntu3.52.35-0ubuntu3.62.35-0ubuntu3.72.35-0ubuntu3.82.35-0ubuntu3.92.35-0ubuntu3.102.35-0ubuntu3.112.35-0ubuntu3.122.35-0ubuntu3.132.35-0ubuntu3.142.35-0ubuntu3.15 |
None known |
glibcUbuntu:24.04:LTS |
All versions, plus listed versions 2.38-1ubuntu62.38-3ubuntu12.39-0ubuntu12.39-0ubuntu22.39-0ubuntu6 Show 10 moreShow less2.39-0ubuntu82.39-0ubuntu8.12.39-0ubuntu8.22.39-0ubuntu8.32.39-0ubuntu8.42.39-0ubuntu8.52.39-0ubuntu8.62.39-0ubuntu8.72.39-0ubuntu8.82.39-0ubuntu8.9 |
None known |
glibcUbuntu:26.10 |
All versions, plus listed versions 2.43-2ubuntu22.43-2ubuntu2.32.44-1ubuntu12.44-1ubuntu2 |
None known |
glibcUbuntu:26.04:LTS |
All versions, plus listed versions 2.42-0ubuntu32.42-2ubuntu12.42-2ubuntu22.42-2ubuntu42.42-2ubuntu5 Show 4 moreShow less2.43-2ubuntu12.43-2ubuntu22.43-2ubuntu2.32.43-2ubuntu2.4 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases | OSV | |
| affected, aliases, facts, references | OSV | |
| affected, aliases, facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-84243 is a high vulnerability (CVSS 7.0) in The Gnu C Library Glibc, published October 30, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.30%, the 22nd percentile. Fixed in glibc 2.36-9+deb12u14.aikido.24.
References
sourceware.org/bugzilla/show_bug.cgi?id=17142
sourceware.org/git?p=glibc.git;a=blob_plain;f=advisories/GLIBC-SA-2026-0025
inbox.sourceware.org/libc-alpha/[email protected]
nvd.nist.gov/vuln/detail/CVE-2026-84243
github.com/advisories/GHSA-8rvm-662m-jvqv
security-tracker.debian.org/tracker/CVE-2026-84243
ubuntu.com/security/CVE-2026-84243
cve.org/CVERecord?id=CVE-2026-84243
Left out here: 86 versions. The JSON record has them.