UBUNTU-CVE-2026-84243: High severity ubuntu/eglibc vulnerability
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 (ATSECURE). 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 LCALL, 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 LCMESSAGES 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 LCALL. 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 ATSECURE. 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.
Affected Software
Event History
Frequently Asked Questions
Are setuid and setgid programs affected?
No. The described behavior is not accepted when the program runs in AT_SECURE mode, which includes setuid or setgid execution.
What conditions are required for exploitation?
An attacker must be able to set the LANGUAGE environment variable for a program that uses gettext. LANGUAGE is used only when the LC_MESSAGES locale is not set to "C".
What is the practical impact of loading an attacker-controlled message catalog?
A crafted .mo file can cause a crash through out-of-range offsets. Translations with format directives that do not match the program's arguments can cause undefined behavior in printf-family functions and may permit code execution with the program's privileges.