Threat Hunting - Vulnerabilidade RCE ao SSH (CVE-2024–3094)

Wagner Souza
7 min readApr 1, 2024
Threat Hunting - Vulnerabilidade RCE ao SSH (CVE-2024–3094)

Introdução

A Red Hat divulgou, na sexta-feira, 29/03/2024, um “alerta de segurança urgente” informando que duas versões de uma popular biblioteca de compactação de dados chamada XZ Utils (anteriormente LZMA Utils) foram infectados com código malicioso projetado para permitir acesso remoto, ao serviço sshd, e obtendo acesso não autorizado a todo o sistema remotamente.

O comprometimento da cadeia de fornecimento de software, notificado como CVE-2024–3094[1], tem uma pontuação CVSS de 10,0, indicando gravidade máxima. Afeta as versões 5.6.0 do XZ Utils (lançado em 24 de fevereiro) e 5.6.1 (lançado em 9 de março).

“Através de uma série de ofuscações complexas, o processo de construção da liblzma extrai um arquivo-objeto pré-construído de um arquivo de teste disfarçado existente no código-fonte, que é então usado para modificar funções específicas no código da liblzma”, disse a subsidiária da IBM em um comunicado[2].

Não deixe de apoiar esse projeto. Como?! Quando for comprar qualquer coisa no site da Amazon, utilize o meu link de associado https://amzn.to/3AbcrAI. Ou adquirindo um desses treinamentos: Curso Java WEB Full-Stack / Formação Júnior AWS Cloud e Spring Boot REST com Angular 13 / Formação Spring Boot API Pipeline Gitaction AWS / Treinamento Viver de YouTube / Segurança em rede de computadores. Com isso, parte do valor da compra é repassado para este projeto.

Especificamente, o código nefasto incorporado ao código é projetado[3] para interferir no processo daemon sshd do serviço SSH (Secure Shell) por meio do conjunto de software systemd[4] e potencialmente permitir que um agente de ameaça quebre a autenticação sshd e obtenha acesso não autorizado ao sistema remotamente.

O pesquisador de segurança da Microsoft, Andres Freund, foi creditado por descobrir e relatar o problema[4] na sexta-feira. O pesquisador de segurança da informa que o código malicioso fortemente ofuscado foi introduzido ao longo de uma série de quatro commits no Projeto Tukaani[5] no GitHub por um usuário chamado Jia Tan (JiaT75).

Por precaução, os usuários do Fedora Linux 40 foram recomendados a fazer o downgrade para uma versão 5.4. Algumas das outras distribuições Linux impactadas pelo ataque à cadeia de suprimentos estão abaixo -

  • Kali Linux (entre 26 e 29 de março)[6]
  • openSUSE Tumbleweed e openSUSE MicroOS (entre 7 e 28 de março)[7]
  • Debian versões testes, instáveis e experimentais (de 5.5.1alpha-0.1 a 5.6.1–1)[8]

O desenvolvimento levou a Agência de Segurança Cibernética e de Infraestrutura dos EUA (CISA) a emitir um alerta próprio[9], instando os usuários a fazer o downgrade do XZ Utils para uma versão não comprometida (por exemplo, XZ Utils 5.4.6 Stable).

Detecção

Para apoiar o processo de gestão de vulnerabilidades, seguem algumas formas de detecção deste pacote em seu sistema operacional e a realização de um downgrade ou upgrade no mesmo.

Verificação com scripts em Shell Bash

Os administradores de sistemas Linux podem verificar qual versão do XZ está instalada consultando seu gerenciador de pacotes ou executando o seguinte script de shell bash:

for xz_p in $(type -a xz | awk '{print $NF}' | uniq); do strings "$xz_p" | grep "xz (XZ Utils)" || echo "No match found for $xz_p"; done

Utilize o script[10] abaixo para identificação do pacote em distribuições com gerenciador de pacotes dpkg ou yum, respectivamente Debian/Debian-like e Red Hat/Red Hat-like:

#!/bin/bash
# CVE-2024-3094-checker.sh
# Quick and dirty PoC for checking whether a vulnerable version of xz-utils is installed
# https://nvd.nist.gov/vuln/detail/CVE-2024-3094
# Author Baroni Fabio

# This shell script is provided as-is and without warranty of any kind, express or implied.
# By executing this script, you acknowledge that you do so at your own risk.
# The author(s) of this script shall not be liable for any damages or issues that may arise from its use, including but not limited to data loss, system instability, or any other unintended consequences.
# It is recommended to review the script and understand its functionality before running it, and to ensure that appropriate backups are in place.
# Use of this script implies your acceptance of these terms.


# Detect package manager
if command -v apt-get &>/dev/null; then
PKG_MANAGER="apt-get"
elif command -v yum &>/dev/null; then
PKG_MANAGER="yum"
elif command -v zypper &>/dev/null; then
PKG_MANAGER="zypper"
else
echo "Unsupported package manager. Exiting."
exit 1
fi

if [ "$PKG_MANAGER" = "zypper" ]; then

version=$(rpm -q xz)
if [[ $version =~ (5\.6\.(0|1)) && ! $version =~ revertto ]]; then
echo "It seems you have a vulnerable version of the xz package installed on your system"
echo "OpenSuse has released a patched version that avoids this CVE, running zypper to update the xz package..."
sudo zypper refresh
sudo zypper update xz
if [ $? -eq 0 ]; then
echo "xz package updated successfully. Now it is advisable to reboot"
else
echo "xz package update failed"
fi

if lsb_release -d | grep -q "Tumbleweed"; then
echo "OpenSuse recommends openSUSE Tumbleweed users where SSH is exposed to the internet to make a fresh installation of the system and change credentials, as it’s unknown if the backdoor has been exploited."
echo "Due to the sophisticated nature of the backdoor an on-system detection of a breach is likely not possible."
echo "Also rotation of any credentials that could have been fetched from the system is highly recommended."
fi
else
echo "Your OpenSuse installation is probably safe."
fi
elif [ "$PKG_MANAGER" = "apt-get" ]; then
version=$(dpkg -l | grep "xz-utils" | awk '{print $3}')
if [[ "$version" == *"5.6.0"* || "$version" == *"5.6.1"* ]]; then
echo "Vulnerable version of xz-utils found: $version"
read -p "Do you want to attempt installing the stable uncompromised xz-utils 5.4.6 version from source? (y/n): " choice
if [[ "$choice" == "y" || "$choice" == "Y" ]]; then
echo "Downloading xz-utils 5.4.6 from source..."
wget https://github.com/tukaani-project/xz/releases/download/v5.4.6/xz-5.4.6.tar.gz
tar -zxvf xz-5.4.6.tar.gz
cd xz-5.4.6
echo "Configuring xz-utils..."
./configure
echo "Compiling xz-utils..."
make
echo "Installing xz-utils..."
sudo make install
echo "xz-utils 5.4.6 installed successfully."
else
echo "You chose not to install the package automatically. Install manually if needed. Exiting."
fi
else
echo "You appear to be safe."
fi
fi

Para mais detalhes, acesse https://github.com/byinarie/CVE-2024-3094-info.

Yara Rules


rule BKDR_XZUtil_Script_CVE_2024_3094_Mar24_1 {
meta:
description = "Detects make file and script contents used by the backdoored XZ library (xzutil) CVE-2024-3094."
author = "Florian Roth"
reference = "https://www.openwall.com/lists/oss-security/2024/03/29/4"
date = "2024-03-30"
score = 80
hash = "d44d0425769fa2e0b6875e5ca25d45b251bbe98870c6b9bef34f7cea9f84c9c3"
strings:
$x1 = "/bad-3-corrupt_lzma2.xz | tr " ascii
$x2 = "/tests/files/good-large_compressed.lzma|eval $i|tail -c +31265|" ascii
$x3 = "eval $zrKcKQ" ascii
condition:
1 of them
}

rule BKDR_XZUtil_Binary_CVE_2024_3094_Mar24_1 {
meta:
description = "Detects injected code used by the backdoored XZ library (xzutil) CVE-2024-3094."
author = "Florian Roth"
reference = "https://www.openwall.com/lists/oss-security/2024/03/29/4"
date = "2024-03-30"
score = 75
hash1 = "319feb5a9cddd81955d915b5632b4a5f8f9080281fb46e2f6d69d53f693c23ae"
hash2 = "605861f833fc181c7cdcabd5577ddb8989bea332648a8f498b4eef89b8f85ad4"
hash3 = "8fa641c454c3e0f76de73b7cc3446096b9c8b9d33d406d38b8ac76090b0344fd"
hash4 = "b418bfd34aa246b2e7b5cb5d263a640e5d080810f767370c4d2c24662a274963"
hash5 = "cbeef92e67bf41ca9c015557d81f39adaba67ca9fb3574139754999030b83537"
hash6 = "5448850cdc3a7ae41ff53b433c2adbd0ff492515012412ee63a40d2685db3049"
strings:
$op1 = { 48 8d 7c 24 08 f3 ab 48 8d 44 24 08 48 89 d1 4c 89 c7 48 89 c2 e8 ?? ?? ?? ?? 89 c2 }
$op2 = { 31 c0 49 89 ff b9 16 00 00 00 4d 89 c5 48 8d 7c 24 48 4d 89 ce f3 ab 48 8d 44 24 48 }
$op3 = { 4d 8b 6c 24 08 45 8b 3c 24 4c 8b 63 10 89 85 78 f1 ff ff 31 c0 83 bd 78 f1 ff ff 00 f3 ab 79 07 }

/* function signature from detect.sh provided by Vegard Nossum */
$xc1 = { F3 0F 1E FA 55 48 89 F5 4C 89 CE 53 89 FB 81 E7 00 00 00 80 48 83 EC 28 48 89 54 24 18 48 89 4C 24 10 }
condition:
uint16(0) == 0x457f
and (
all of ($op*)
or $xc1
)
}

rule BKDR_XZUtil_KillSwitch_CVE_2024_3094_Mar24_1 {
meta:
description = "Detects kill switch used by the backdoored XZ library (xzutil) CVE-2024-3094."
author = "Florian Roth"
reference = "https://gist.github.com/q3k/af3d93b6a1f399de28fe194add452d01?permalink_comment_id=5006558#gistcomment-5006558"
date = "2024-03-30"
score = 85
strings:
$x1 = "yolAbejyiejuvnup=Evjtgvsh5okmkAvj"
condition:
$x1
}

Elastic Security

O Elastic Security integra soluções de SIEM, Endpoint & Cloud security unificando soluções de segurança e acelerando o monitoramento, detecção e resposta a incidentes de segurança. Com a funcionalidade do Osquery, é possível apoiar o processo de gestão de vulnerabilidade. Abaixo, uma query de SQL para consulta de informações em um host:

Figura 1: Acesso ao recurso de Osquery disponibilizado no Elastic Security
Figura 2: Resultado da query
SELECT 'DEB Package' AS source, name, version,
CASE
WHEN version LIKE '5.6.0%' OR version LIKE '5.6.1%' THEN 'Potentially Vulnerable'
ELSE 'Most likely not vulnerable'
END AS status
FROM deb_packages
WHERE name = 'xz-utils' OR name = 'liblzma' OR name LIKE 'liblzma%'
UNION
SELECT 'RPM Package' AS source, name, version,
CASE
WHEN version LIKE '5.6.0%' OR version LIKE '5.6.1%' THEN 'Potentially Vulnerable'
ELSE 'Most likely not vulnerable'
END AS status
FROM rpm_packages
WHERE name = 'xz-utils' OR name = 'liblzma' OR name LIKE 'liblzma%';

Para hosts com sistema operacional macOS:

SELECT 'Homebrew Package' AS source, name, version,
CASE
WHEN version LIKE '5.6.0%' OR version LIKE '5.6.1%' THEN 'Potentially Vulnerable'
ELSE 'Most likely not vulnerable'
END AS status
FROM homebrew_packages
WHERE name = 'xz' OR name = 'liblzma';

A equipe de engenharia de detecção, do Elastic Security Labs, já disponibilizou uma regra de detecção para essa vulnerabilidade: Potential Execution via XZBackdoor.

Para mais insights de detecção: https://github.com/Bert-JanP/Hunting-Queries-Detection-Rules/blob/main/Vulnerability%20Management/InboundSSHConnectionToVulnerableXZMachine.md

Referências

1 - https://nvd.nist.gov/vuln/detail/CVE-2024-3094
2 - https://access.redhat.com/security/cve/CVE-2024-3094
3 - https://www.redhat.com/en/blog/urgent-security-alert-fedora-41-and-rawhide-users
4 - https://twitter.com/kdrag0n/status/1773950974480314574
5 - https://tukaani.org/
6 - https://twitter.com/kalilinux/status/1773786266074513523
7 - https://news.opensuse.org/2024/03/29/xz-backdoor/
8 - https://lists.debian.org/debian-security-announce/2024/msg00057.html

9 - https://www.cisa.gov/news-events/alerts/2024/03/29/reported-supply-chain-compromise-affecting-xz-utils-data-compression-library-cve-2024-3094

10 - https://github.com/FabioBaroni/CVE-2024-3094-checker/blob/main/CVE-2024-3094-checker.sh

--

--

Wagner Souza

Democratizar o conhecimento nas áreas de tecnologia e segurança da informação.