Every CVE Search/ Get API key

CVE-2026-84243

gettext: Directory traversal via the LANGUAGE environment variable

7.0 HighFix available

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

0.30%Unchanged since Oct 31, 2026
90%50%10%1%

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 HighCVSS: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 HighCVSS: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 HighCVSS: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 HighCVSS: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 HighCVSS: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 HighCVSS: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

Affected packages
PackageAffectedFixed
glibc
Azure Linux:3
through 2.38-21 None known
glibc
Debian:12
All versions, plus listed versions
2.36-10~02.36-92.36-9+deb12u12.36-9+deb12u102.36-9+deb12u11
Show 45 moreShow less
2.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
glibc
Debian:13
All versions, plus listed versions
2.41-122.41-12+deb13u12.41-12+deb13u22.41-12+deb13u32.41-12+deb13u4
Show 37 moreShow less
2.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
glibc
Debian:14
All versions, plus listed versions
2.41-122.41-13~hurd.02.41-13~hurd.12.42-12.42-10
Show 33 moreShow less
2.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
glibc
Root:Debian:12
before 2.36-9+deb12u14.aikido.24
2.36-9+deb12u14.aikido.24
rootio-glibc
Root:Debian:12
before 2.36-9+deb12u14.aikido.24
2.36-9+deb12u14.aikido.24
glibc
Root:Debian:13
before 2.41-12+deb13u4.aikido.14
2.41-12+deb13u4.aikido.14
rootio-glibc
Root:Debian:13
before 2.41-12+deb13u4.aikido.14
2.41-12+deb13u4.aikido.14
eglibc
Ubuntu:Pro:14.04:LTS
All versions, plus listed versions
2.17-93ubuntu42.18-0ubuntu12.18-0ubuntu22.18-0ubuntu42.18-0ubuntu5
Show 24 moreShow less
2.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
glibc
Ubuntu:Pro:16.04:LTS
All versions, plus listed versions
2.21-0ubuntu42.21-0ubuntu52.21-0ubuntu62.23-0ubuntu12.23-0ubuntu2
Show 18 moreShow less
2.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
Affected packages
PackageAffectedFixed
glibc
Ubuntu:Pro:18.04:LTS
All versions, plus listed versions
2.26-0ubuntu22.26-0ubuntu2.12.27-0ubuntu22.27-0ubuntu32.27-3ubuntu1
Show 11 moreShow less
2.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
glibc
Ubuntu:Pro:20.04:LTS
All versions, plus listed versions
2.30-0ubuntu22.30-0ubuntu32.31-0ubuntu52.31-0ubuntu62.31-0ubuntu7
Show 13 moreShow less
2.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
glibc
Ubuntu:22.04:LTS
All versions, plus listed versions
2.34-0ubuntu32.35-0ubuntu12.35-0ubuntu32.35-0ubuntu3.12.35-0ubuntu3.3
Show 12 moreShow less
2.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
glibc
Ubuntu:24.04:LTS
All versions, plus listed versions
2.38-1ubuntu62.38-3ubuntu12.39-0ubuntu12.39-0ubuntu22.39-0ubuntu6
Show 10 moreShow less
2.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
glibc
Ubuntu:26.10
All versions, plus listed versions
2.43-2ubuntu22.43-2ubuntu2.32.44-1ubuntu12.44-1ubuntu2
None known
glibc
Ubuntu:26.04:LTS
All versions, plus listed versions
2.42-0ubuntu32.42-2ubuntu12.42-2ubuntu22.42-2ubuntu42.42-2ubuntu5
Show 4 moreShow less
2.43-2ubuntu12.43-2ubuntu22.43-2ubuntu2.32.43-2ubuntu2.4
None known

History

History
RecordedChangedSources
affected, aliasesOSV
affected, aliases, facts, referencesOSV
affected, aliases, factsOSV
first indexedCVE 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

This page doesn't list everything

Left out here: 86 versions. The JSON record has them.

MoveEnter Open