Páginas

quarta-feira, 10 de junho de 2026

strongSwan no SUSE: da Correção Urgente à Segurança Duradoura para sua VPN IPsec

 



Aprenda a identificar, corrigir e mitigar a vulnerabilidade double‑free no strongSwan (CVE‑2026‑47895) em distribuições SUSE. Comandos práticos, script de automação, mitigação com firewall e recomendações de leitura para aprofundar seus conhecimentos em segurança de redes.


1. O problema (e por que ele não vai sumir)

No início de junho de 2026 foi divulgada uma falha crítica no strongSwan, a implementação open‑source mais utilizada do protocolo IPsec.

 A vulnerabilidade, catalogada como CVE‑2026‑47895, consiste em um double‑free no tratamento de certas identidades clonadas. Em resumo: um erro de gerenciamento de memória pode fazer o programa tentar liberar o mesmo espaço duas vezes, levando a uma queda do serviço (DoS) e, potencialmente, à execução remota de código arbitrário (RCE).

O problema afeta todas as versões do strongSwan desde a 4.3.3 (lançada há mais de uma década) e foi corrigido na versão 6.0.7. Em distribuições SUSE, o pacote corrigido está disponível nos canais LTSS (Long Term Service Support) para os produtos afetados, conforme o aviso SUSE‑SU‑2026:2312‑1.

A data da divulgação é apenas um ponto de partida. O conteúdo que você verá a seguir é perene: os comandos, o script e as mitigações alternativas continuarão úteis por muitos meses – e até anos –, independentemente de quando você esteja lendo este artigo.

2. Como verificar se você está vulnerável

Antes de qualquer ação, confirme se o seu sistema SUSE executa uma versão vulnerável do strongSwan.

2.1. Verificar a versão instalada

bash
zypper info strongswan | grep Version

ou, de forma mais direta:

bash
rpm -q strongswan

2.2. Verificar o status do serviço

bash
systemctl status strongswan
systemctl status strongswan-starter

2.3. Verificar a versão do daemon em execução

bash
ipsec version

2.4. Verificar se o serviço IPsec está ativo e listar conexões

bash
ipsec statusall

2.5. Tabela de decisão



3. Script de automação para aplicar a correção

O script abaixo automatiza todo o processo de verificação, atualização e validação em uma máquina SUSE. Salve o conteúdo como fix_strongswan.sh, torne‑o executável (chmod +x fix_strongswan.sh) e execute‑o com privilégios de root.

bash
#!/bin/bash
# fix_strongswan.sh - Atualiza strongSwan em sistemas SUSE para corrigir CVE-2026-47895
# Uso: sudo ./fix_strongswan.sh

set -e  # interrompe o script se qualquer comando falhar

# Função para imprimir cabeçalhos
print_header() {
    echo "=================================================="
    echo "$1"
    echo "=================================================="
}

print_header "Iniciando correção do strongSwan (CVE-2026-47895)"

# 1. Verifica se está rodando como root
if [[ $EUID -ne 0 ]]; then
   echo "ERRO: Este script precisa ser executado como root (use sudo)." 
   exit 1
fi

# 2. Salva a versão atual para diagnóstico
CURRENT_VER=$(rpm -q strongswan 2>/dev/null || echo "não instalado")
echo "Versão atual do strongSwan: $CURRENT_VER"

# 3. Atualiza a lista de pacotes (apenas para garantir)
print_header "Atualizando metadados dos repositórios"
zypper refresh

# 4. Aplica o patch específico do SUSE (método recomendado)
print_header "Aplicando o patch SUSE-SU-2026:2312-1"
zypper patch --cve=CVE-2026-47895 || {
    echo "Falha ao aplicar o patch via zypper. Tentando instalar o pacote atualizado..."
    zypper update strongswan
}

# 5. Se o comando acima falhar, tenta a atualização explícita do pacote
if ! zypper update strongswan; then
    echo "ERRO: Não foi possível atualizar o strongSwan."
    echo "Verifique se os repositórios LTSS estão habilitados:"
    echo "  zypper repos --enabled"
    exit 1
fi

# 6. Reinicia o serviço
print_header "Reiniciando o serviço strongSwan"
systemctl restart strongswan-starter
systemctl enable strongswan-starter

# 7. Verifica o status do serviço
print_header "Verificando status do serviço"
systemctl status strongswan-starter --no-pager

# 8. Exibe a nova versão instalada
NEW_VER=$(rpm -q strongswan)
print_header "Correção concluída!"
echo "Versão antiga: $CURRENT_VER"
echo "Nova versão  : $NEW_VER"

# 9. Verificação final com ipsec version
if command -v ipsec &> /dev/null; then
    echo ""
    echo "Versão do daemon em execução:"
    ipsec version
fi

echo ""
echo "Script finalizado. Recomenda-se reiniciar o sistema se possível."


📗  Recomendação de Leitura


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

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.


4. Mitigação alternativa caso não possa atualizar agora

Se por qualquer motivo você não puder aplicar a correção imediatamente (ex.: janela de manutenção bloqueada, dependências conflitantes), as regras de firewall abaixo reduzem significativamente a superfície de ataque.

Atenção: Mitigações não substituem a atualização. Use‑as apenas como paliativo enquanto planeja a correção definitiva.


4.1. Bloquear pacotes IPsec suspeitos com iptables

O double‑free é acionado por pacotes IKE manipulados que contêm identidades maliciosas. Bloquear tráfego IKE não autenticado pode evitar a exploração.

bash
# Bloquear pacotes IKE nas portas 500 e 4500 vindos de fontes externas não autorizadas
iptables -A INPUT -p udp --dport 500 -j DROP
iptables -A INPUT -p udp --dport 4500 -j DROP

# Se você usa IPsec NAT‑T, bloqueie também o ESP (protocolo 50)
iptables -A INPUT -p 50 -j DROP

Para restaurar o funcionamento normal após a correção:

bash
iptables -D INPUT -p udp --dport 500 -j DROP
iptables -D INPUT -p udp --dport 4500 -j DROP
iptables -D INPUT -p 50 -j DROP


4.2. Usar o match module policy do iptables para permitir apenas tráfego já protegido

Se você precisa manter a VPN ativa, uma abordagem mais fina é aceitar apenas pacotes que já passaram pelo processamento IPsec:

bash
# Permite apenas tráfego que já foi decifrado pelo IPsec
iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
iptables -A INPUT -j DROP

4.3. Alternativa com nftables (moderno)

Em sistemas mais novos que utilizam nftables:

bash
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0\; policy drop\; }
nft add rule inet filter input meta l4proto udp udp dport {500,4500} drop
nft add rule inet filter input ip protocol 50 drop


Conclusão



A vulnerabilidade CVE‑2026‑47895 no strongSwan serve como um lembrete atemporal: softwares de infraestrutura crítica exigem manutenção contínua. O double‑free estava presente há mais de dez anos, e apenas uma atualização cuidadosa pode eliminá‑lo.

Mantenha‑se seguro com três ações:

 1. Identifique – use os comandos da seção 2 para saber sua situação.

  2. Corrija – execute o script de automação (seção 3) em todas as máquinas SUSE que utilizam strongSwan.

 3. Proteja‑se – enquanto a correção não é aplicada, implemente as regras de firewall da seção 4 como mitigação temporária.

Recomenda‑se também revisar periodicamente a versão do strongSwan em seus sistemas e manter‑se informado sobre novos lançamentos que possam trazer correções adicionais.


Nenhum comentário:

Postar um comentário