Guia definitivo para administradores SUSE sobre as vulnerabilidades CVE-2025-47907, CVE-2026-33186, CVE-2026-33814, CVE-2026-34986 e CVE-2026-39821 no Azure Storage AzCopy. Aprenda a verificar, corrigir e mitigar com scripts prontos e medidas alternativas para manter seus sistemas seguros.
O que você precisa saber sobre as vulnerabilidades no AzCopy
Em junho de 2026, a SUSE lançou o boletim de segurança SUSE-SU-2026:2466-1, atualizando o pacote azure-storage-azcopy para a versão 10.32.4. Esta atualização corrige cinco vulnerabilidades que afetam componentes críticos do ecossistema Go utilizados pelo AzCopy:
A gravidade varia de 2.1 a 9.1 na escala CVSS, com destaque para o CVE-2026-33186 que atinge 9.1 (Crítico) segundo o NVD.
Como verificar se você está vulnerável
Verificar a versão instalada do AzCopy
# Verifica a versão do pacote instalado zypper info azure-storage-azcopy # Ou use rpm para consulta direta rpm -q azure-storage-azcopy
Comparar com a versão segura
A versão corrigida é a 10.32.4. Se a sua versão for anterior, seu sistema está vulnerável.
Verificar se os CVEs afetam seu ambiente
Para o CVE-2025-47907 (race condition no database/sql), verifique se sua aplicação usa consultas SQL concorrentes com cancelamento de contexto durante o Scan:
# Procure por uso do database/sql com contexto cancelável grep -r "database/sql" --include="*.go" /caminho/do/seu/codigo grep -r "Rows.Scan" --include="*.go" /caminho/do/seu/codigo
Para o CVE-2026-33186 (bypass de autorização gRPC), verifique o uso do pacote authz do gRPC-Go:
grep -r "google.golang.org/grpc" --include="*.go" /caminho/do/seu/codigo grep -r "authz" --include="*.go" /caminho/do/seu/codigo
Verificar dependências Go indiretas
O AzCopy é escrito em Go e pode puxar dependências vulneráveis. Use o govulncheck para uma análise completa:
# Instalar govulncheck (se não tiver) go install golang.org/x/vuln/cmd/govulncheck@latest # Analisar o binário ou o código-fonte govulncheck /usr/bin/azcopy # ou, se tiver o código-fonte: govulncheck ./...
Script de automação para aplicar a correção
#!/bin/bash # SCRIPT: fix-azcopy-vulnerabilities.sh # DESCRIÇÃO: Verifica e atualiza azure-storage-azcopy para a versão segura 10.32.4 # AUTOR: [Seu nome] # DATA: $(date +%Y-%m-%d) set -euo pipefail # Cores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Configurações PACKAGE_NAME="azure-storage-azcopy" MIN_SAFE_VERSION="10.32.4" LOG_FILE="/var/log/azcopy-update-$(date +%Y%m%d-%H%M%S).log" # Função para log log() { echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # Função para verificar se o script está rodando como root check_root() { if [[ $EUID -ne 0 ]]; then log "${RED}ERRO: Este script precisa ser executado como root.${NC}" log "Execute: sudo $0" exit 1 fi } # Função para verificar o sistema operacional check_os() { if ! command -v zypper &> /dev/null; then log "${RED}ERRO: zypper não encontrado. Este script é para distribuições SUSE.${NC}" exit 1 fi log "${GREEN}Sistema SUSE detectado.${NC}" } # Função para verificar a versão atual check_current_version() { if rpm -q "$PACKAGE_NAME" &> /dev/null; then CURRENT_VERSION=$(rpm -q --qf "%{VERSION}" "$PACKAGE_NAME") log "${GREEN}Versão atual do $PACKAGE_NAME: $CURRENT_VERSION${NC}" # Comparação simples de versão (funciona para versionamento semântico básico) if [[ "$CURRENT_VERSION" == "$MIN_SAFE_VERSION" ]] || \ [[ "$(printf '%s\n' "$MIN_SAFE_VERSION" "$CURRENT_VERSION" | sort -V | head -n1)" == "$MIN_SAFE_VERSION" ]]; then log "${GREEN}✓ O sistema já está atualizado (versão $CURRENT_VERSION >= $MIN_SAFE_VERSION)${NC}" return 0 else log "${YELLOW}! Sistema está vulnerável (versão $CURRENT_VERSION < $MIN_SAFE_VERSION)${NC}" return 1 fi else log "${YELLOW}! Pacote $PACKAGE_NAME não está instalado.${NC}" log "Deseja instalar? (s/N)" read -r resposta if [[ "$resposta" =~ ^[Ss]$ ]]; then return 1 else log "Instalação cancelada." exit 0 fi fi } # Função para atualizar o pacote apply_update() { log "${GREEN}Iniciando atualização do $PACKAGE_NAME...${NC}" # Atualiza os repositórios log "Atualizando repositórios..." zypper refresh || { log "${RED}ERRO: Falha ao atualizar repositórios.${NC}" exit 1 } # Aplica o patch específico log "Aplicando atualização SUSE-SU-2026:2466-1..." zypper patch --cve="CVE-2025-47907,CVE-2026-33186,CVE-2026-33814,CVE-2026-34986,CVE-2026-39821" || { log "${YELLOW}Aviso: Patch específico pode não estar disponível. Tentando atualização geral...${NC}" zypper update "$PACKAGE_NAME" } # Verifica se a atualização foi bem-sucedida if rpm -q "$PACKAGE_NAME" &> /dev/null; then NEW_VERSION=$(rpm -q --qf "%{VERSION}" "$PACKAGE_NAME") log "${GREEN}✓ Atualização concluída! Nova versão: $NEW_VERSION${NC}" if [[ "$NEW_VERSION" == "$MIN_SAFE_VERSION" ]] || \ [[ "$(printf '%s\n' "$MIN_SAFE_VERSION" "$NEW_VERSION" | sort -V | head -n1)" == "$MIN_SAFE_VERSION" ]]; then log "${GREEN}✓ Sistema agora está seguro (versão $NEW_VERSION >= $MIN_SAFE_VERSION)${NC}" else log "${RED}⚠ ATENÇÃO: Versão $NEW_VERSION ainda pode ser vulnerável.${NC}" log "Considere verificar manualmente no portal SUSE." fi else log "${RED}ERRO: Falha ao atualizar o pacote.${NC}" exit 1 fi } # Função para verificar dependências Go vulneráveis check_go_vuln() { if command -v govulncheck &> /dev/null; then log "${GREEN}Verificando vulnerabilidades em dependências Go...${NC}" if command -v azcopy &> /dev/null; then AZCOPY_PATH=$(which azcopy) govulncheck "$AZCOPY_PATH" 2>&1 | tee -a "$LOG_FILE" || { log "${YELLOW}Aviso: govulncheck pode não suportar análise de binários.${NC}" } fi else log "${YELLOW}govulncheck não encontrado. Instale com: go install golang.org/x/vuln/cmd/govulncheck@latest${NC}" fi } # Função para reiniciar serviços que usam AzCopy restart_services() { log "Procurando serviços que usam AzCopy..." # Lista de serviços comuns que podem usar AzCopy SERVICES=("azcopy" "azure-storage" "saphana-checks") for svc in "${SERVICES[@]}"; do if systemctl is-active --quiet "$svc" 2>/dev/null; then log "Reiniciando serviço: $svc" systemctl restart "$svc" || { log "${YELLOW}Aviso: Falha ao reiniciar $svc${NC}" } fi done log "${GREEN}✓ Serviços reiniciados (quando aplicável).${NC}" } # --- EXECUÇÃO PRINCIPAL --- log "=== SCRIPT DE CORREÇÃO AZCOPY - SUSE ===" log "Iniciado em: $(date)" check_root check_os if check_current_version; then log "Nenhuma ação necessária." check_go_vuln exit 0 fi # Se chegou aqui, precisa atualizar log "${YELLOW}Iniciando processo de correção...${NC}" # Faz backup da configuração atual (se existir) if [ -f /etc/azcopy/config.json ]; then BACKUP_DIR="/root/azcopy-backup-$(date +%Y%m%d)" mkdir -p "$BACKUP_DIR" cp -r /etc/azcopy "$BACKUP_DIR/" log "${GREEN}Backup criado em: $BACKUP_DIR${NC}" fi apply_update check_go_vuln restart_services log "${GREEN}=== CORREÇÃO CONCLUÍDA ===" log "Log salvo em: $LOG_FILE" log "Recomenda-se reiniciar o sistema se possível." log "${GREEN}✓ Sistema atualizado com sucesso!${NC}"
Como usar o script:
# 1. Salve o script em um arquivo nano fix-azcopy-vulnerabilities.sh # 2. Torne-o executável chmod +x fix-azcopy-vulnerabilities.sh # 3. Execute como root sudo ./fix-azcopy-vulnerabilities.sh
📗 Recomendação de Leitura
Segurança em servidores Linux: Ataque e Defesa (anúncio) -> https://link.amazon/B0gMOJEFt
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.
Mitigação alternativa caso não possa atualizar agora
Se você não puder aplicar a atualização imediatamente, estas medidas podem reduzir o risco:
Mitigação para CVE-2026-33814 (Loop infinito HTTP/2)
Configure regras no iptables para limitar ou bloquear tráfego HTTP/2 malicioso:
# Bloquear frames SETTINGS com MAX_FRAME_SIZE=0 (detecção baseada em padrões) # Nota: Isso é uma mitigação parcial - a atualização é a solução definitiva # Limitar conexões HTTP/2 por IP (rate limiting) iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -m recent --set iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP # Bloquear pacotes suspeitos (exemplo - ajuste conforme necessidade) # iptables -A INPUT -p tcp --dport 443 -m string --string "SETTINGS_MAX_FRAME_SIZE" --algo bm -j LOG --log-prefix "HTTP2_ATTACK: "
Mitigação para CVE-2026-33186 (Bypass de autorização gRPC)
Se você usa o AzCopy com gRPC, considere:
- Adicionar um proxy reverso (nginx/haproxy) que normalize o cabeçalho :path, garantindo a barra inicial
- Restringir acesso à rede para apenas IPs confiáveis
# Exemplo: Restringir acesso à porta gRPC (padrão 50051) apenas para IPs internos iptables -A INPUT -p tcp --dport 50051 -s 192.168.0.0/16 -j ACCEPT iptables -A INPUT -p tcp --dport 50051 -j DROP
Mitigação para CVE-2026-34986 (Panic no JWE)
- Se você usa JWE com algoritmos KW:
- Evite algoritmos de wrapping de chave (terminados em KW) até atualizar
- Valide previamente se encrypted_key não está vazio antes de chamar o decrypt.
Mitigação para CVE-2025-47907 (Race condition no SQL)
- Evite cancelar contextos durante operações Rows.Scan
- Use consultas sequenciais em vez de paralelas quando possível
O SUSE inclui AppArmor por padrão. Crie um perfil restritivo para o AzCopy:
# Gerar perfil AppArmor para o AzCopy sudo aa-genprof /usr/bin/azcopy # Aplicar o perfil em modo de reclamação (aprendizado) sudo aa-complain /usr/bin/azcopy # Depois de testar, ative em modo de enforced sudo aa-enforce /usr/bin/azcopy
Isolamento de rede
Se o AzCopy não precisar de acesso externo, isole-o:
# Criar um namespace de rede separado ip netns add azcopy-ns # Mover o processo para o namespace (exemplo) # ip netns exec azcopy-ns /usr/bin/azcopy [args]

Nenhum comentário:
Postar um comentário