FERRAMENTAS LINUX: Guia Completo de Segurança do haveged no Linux (Entropy Daemon)

segunda-feira, 8 de junho de 2026

Guia Completo de Segurança do haveged no Linux (Entropy Daemon)

 

Fedora


Guia completo  para corrigir a vulnerabilidade CVE-2026-41054 no haveged (Fedora Linux). Inclui comandos de verificação, script de automação, mitigação alternativa via AppArmor/iptables e recomendações de livro para aprofundamento. Segurança que dura anos."


De Notícia Efêmera a Conhecimento Duradouro

Em maio de 2026, uma vulnerabilidade crítica de escalonamento de privilégios (CVE-2026-41054) foi descoberta no haveged — daemon de entropia que alimenta /dev/random com números aleatórios baseados no algoritmo HAVEGE

O problema existia desde a versão 1.9.14, afetando sistemas onde o serviço roda com privilégios elevados (o padrão no Fedora 44 e distribuições derivadas).

Em vez de descartar esse aviso como “mais uma notícia de segurança”, você pode transformá-lo em conhecimento perene — útil para proteger seus sistemas agora e nos próximos anos. Este guia prático mostra como verificar, corrigir e mitigar essa falha em qualquer ambiente Fedora ou RHEL-like.


Entendendo o Impacto: O que o CVE-2026-41054 realmente faz?


A falha residia na função socket_handler() do arquivo src/havegecmd.c. O código verificava o UID da conexão via SO_PEERCRED e enviava uma resposta NAK para usuários não-root. O problema é que, após enviar o NAK, a execução não retornava — continuava para o bloco de processamento de comandos.

Na prática, isso significava: um usuário local sem privilégios conseguia enviar comandos (MAGIC_CHROOT, MAGIC_CLOSE) para o daemon que rodava como root, através do socket UNIX abstracto. 

Com isso, era possível forçar o daemon a fazer chroot para um diretório controlado pelo invasor — abrindo caminho para escalonamento completo de privilégios.

A falha só podia ser explorada se a opção chroot estivesse desabilitada (padrão em muitas instalações) e afetava todas as versões com suporte a comando socket — ou seja, haveged 1.9.14 em diante. 

A correção veio em duas etapas: primeiro, adicionando goto out após o NAK para rejeitar conexões não-root; segundo, movendo a verificação de credencial para antes do parsing dos comandos, como defesa em profundidade.


Seção 1: Como Verificar se Você Está Vulnerável (Fedora e RHEL)


Execute estes comandos no terminal do seu servidor ou workstation:
bash
# 1. Verifique a versão atual do haveged
rpm -q haveged

# 2. Verifique se o serviço está rodando com privilégios elevados
systemctl status haveged | grep -i "user\|root"

# 3. Veja se a opção chroot está habilitada
ps aux | grep haveged | grep -i chroot

# 4. Verifique se o socket de comandos está exposto
ls -la /run/haveged* 2>/dev/null || echo "Socket não encontrado"

# 5. Para sistemas Fedora, confirme se a correção está instalada
dnf update --advisory FEDORA-2026-02b08daa05 --assumeno 2>/dev/null && echo "Pacote disponível" || echo "Já corrigido ou não aplicável"

Interpretação dos resultados:

  • Versão anterior a 1.9.21 → vulnerável

  • Serviço rodando como root + chroot não habilitado → cenário de risco alto

  • Qualquer sinal do socket em /run/haveged-cmd.socket → possível vetor de ataque


Seção 2: Script de Automação para Aplicar a Correção (Fedora Linux)


Salve como fix-haveged.sh e execute com sudo bash fix-haveged.sh:

bash
#!/bin/bash
# haveged Security Fix Script - CVE-2026-41054
# Compatible with Fedora Linux and RHEL derivatives

set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo -e "${GREEN}[INFO] Iniciando correção de segurança do haveged...${NC}"

# Check current version
CURRENT_VERSION=$(rpm -q haveged --queryformat "%{VERSION}" 2>/dev/null || echo "not_installed")
echo -e "${YELLOW}[INFO] Versão atual: $CURRENT_VERSION${NC}"

if [[ "$CURRENT_VERSION" == "not_installed" ]]; then
    echo -e "${YELLOW}[INFO] haveged não está instalado. Nada a fazer.${NC}"
    exit 0
fi

if [[ "$CURRENT_VERSION" > "1.9.20" ]] || [[ "$CURRENT_VERSION" == "1.9.22"* ]]; then
    echo -e "${GREEN}[OK] Sistema já está seguro (versão >= 1.9.21).${NC}"
    exit 0
fi

echo -e "${RED}[ALERTA] Versão vulnerável detectada! Aplicando correção...${NC}"

# Stop the service
sudo systemctl stop haveged || true

# Update package (Fedora specific)
if command -v dnf &> /dev/null; then
    echo -e "${GREEN}[INFO] Atualizando via dnf (Fedora)...${NC}"
    sudo dnf update -y haveged
elif command -v yum &> /dev/null; then
    echo -e "${GREEN}[INFO] Atualizando via yum (RHEL/CentOS)...${NC}"
    sudo yum update -y haveged
else
    echo -e "${RED}[ERRO] Gerenciador de pacotes não suportado.${NC}"
    exit 1
fi

# Verify new version
NEW_VERSION=$(rpm -q haveged --queryformat "%{VERSION}")
echo -e "${GREEN}[INFO] Nova versão instalada: $NEW_VERSION${NC}"

# Restart and enable service
sudo systemctl start haveged
sudo systemctl enable haveged

# Final security check
if [[ "$NEW_VERSION" == "1.9.22"* ]] || [[ "$NEW_VERSION" > "1.9.20" ]]; then
    echo -e "${GREEN}[SUCESSO] Correção aplicada com sucesso!${NC}"
else
    echo -e "${RED}[ERRO] Falha na correção. Versão ainda vulnerável.${NC}"
    exit 1
fi

echo -e "${GREEN}[INFO] Script concluído. Sistema seguro.${NC}"

Como usar:

bash
chmod +x fix-haveged.sh
sudo ./fix-haveged.sh

📗  Recomendação de Leitura


Segurança em servidores Linux: Ataque e Defesa  (anúncio) -> https://amzn.to/4ochVDk

Se você prefere estudar em português e quer aprender a "pensar como um hacker" para se antecipar a invasões, essa é a pedida! O livro ensina a usar as ferramentas prediletas dos invasores (como Nmap e Netcat) a seu favor, blindando seus sistemas.

Eu ganho uma comissão quando você faz uma compra.


Seção 3: Mitigação Alternativa (Caso Não Possa Atualizar Agora)


Se você não pode reiniciar o servidor ou aplicar a atualização imediatamente, estas medidas alternativas reduzem drasticamente o risco:

Opção A: Bloquear o socket de comandos via iptables (restrição local)

bash
# Remover permissões de escrita no socket
sudo chmod 000 /run/haveged-cmd.socket 2>/dev/null

# Bloquear acesso ao socket via iptables (limitação para processos locais)
sudo iptables -A OUTPUT -p unix --dport /run/haveged-cmd.socket -j DROP
sudo iptables -A INPUT -p unix --sport /run/haveged-cmd.socket -j DROP

# Persistir as regras
sudo iptables-save > /etc/iptables/rules.v4

 Limitação: iptables não filtra sockets UNIX diretamente. Essa abordagem é mais eficaz em sistemas onde o socket está exposto via rede (ex: configurações incorretas). Para proteção local robusta, use AppArmor.

Opção B: Restringir via AppArmor (recomendado)

O próprio AppArmor já protege o haveged por padrão em distribuições como Ubuntu e Debian. No Fedora, habilite e configure:

bash
# Instalar AppArmor (se não disponível)
sudo dnf install apparmor apparmor-utils

# Criar perfil restritivo para haveged
sudo aa-genprof haveged

# Colocar o perfil em modo de reclamação para auditoria
sudo aa-complain /usr/sbin/haveged

# Após validar os logs, ativar o perfil
sudo aa-enforce /usr/sbin/haveged

Perfil AppArmor recomendado (adicione em /etc/apparmor.d/usr.sbin.haveged):

text
/usr/sbin/haveged {
    # Capacidades essenciais
    capability dac_override,
    capability setgid,
    capability setuid,
    
    # Acesso apenas aos arquivos necessários
    /dev/urandom r,
    /dev/random rw,
    /run/haveged/ rw,
    
    # NEGAR acesso ao socket de comandos
    deny /run/haveged-cmd.socket rw,
    
    # Isolar o processo
    mount options=(ro, nosuid, nodev, noexec) -> /proc/*/,
}

Opção C: Executar em container ou namespace isolado

bash
# Executar haveged dentro de um container Docker com restrições
docker run --rm \
    --cap-drop=ALL \
    --cap-add=DAC_OVERRIDE \
    --security-opt=no-new-privileges:true \
    --read-only \
    -v /dev/urandom:/dev/urandom:ro \
    -v /dev/random:/dev/random:rw \
    haveged:1.9.22

Importante: Essas medidas são paliativas. A única solução definitiva é a atualização para haveged 1.9.22 (Fedora) ou 1.9.21 (upstream), que corrige a falha na origem.


Conclusão 

O CVE-2026-41054 mostra como um simples erro de lógica pode abrir brecha crítica. Este guia perene transforma a notícia passageira em valor duradouro: você sai com comandos, script pronto e mitigações alternativas. 

Aplique a correção agora ou use AppArmor como paliativo. Para dominar segurança de servidores Linux, o livro "Segurança em servidores Linux: Ataque e Defesa" na Amazon.



Nenhum comentário:

Postar um comentário