← voltar
CVE-2022-0543criticalsob ataqueCWE-862

CVE-2022-0543

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 10epss 99%
da publicação à arma0 dias
Publicada no NVD18 de fev.
1ª PoC9 de abr.
metasploit18 de fev.
CISA KEV+38d
probabilidade de exploração
99%top 1% das CVEs
exploração observada
simCISA + VulnCheck
13 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-04-18

Apply updates per vendor instructions.

Resumo

Falha de empacotamento específica do Debian (e derivados que seguem o mesmo esquema de build) que permite escapar do sandbox Lua do Redis usado pelo comando EVAL, chegando a execução arbitrária de comandos de shell. Não é uma falha no código-fonte do Redis upstream — é um efeito colateral de como o Debian compilou a biblioteca Lua contra o pacote redis-server. Importa porque o vetor de entrada (EVAL/EVALSHA) costuma estar disponível sem autenticação em instâncias Redis expostas, o que casa mal com um CVSS 10.0 e explica a presença no catálogo KEV da CISA.

Detalhamento técnico

O Redis expõe scripting Lua via os comandos EVAL/EVALSHA, executando o script dentro de um ambiente restrito que remove funções perigosas do Lua padrão (como todo o módulo 'os' e 'io') para impedir acesso ao sistema operacional a partir do script. O upstream do Redis compila e embute o interpretador Lua estaticamente dentro do binário redis-server, o que preserva esse sandboxing.

O pacote redis do Debian, por outro lado, linka o Lua como biblioteca dinâmica (liblua) do sistema. Esse método de build faz com que uma variável global chamada 'package' — parte do sistema de módulos do Lua — seja automaticamente populada no ambiente do script, mesmo tendo sido removida pelo sandboxing do Redis. Essa variável dá acesso a package.loadlib e, por consequência, à stdlib completa do Lua, incluindo os.execute.

CWE relevante segundo a CISA é CWE-862 (Missing Authorization), refletindo que o problema real é a ausência de controle sobre quem pode chegar a EVAL, e não uma corrupção de memória clássica. O atacante não precisa injetar nada exótico: ele controla o conteúdo do script Lua enviado ao EVAL, e a presença de 'package' nesse ambiente é o que rompe o isolamento.

A falha foi descoberta e reportada por Reginaldo Silva (ubercomp.com), que documentou o mecanismo de escape do sandbox decorrente dessa escolha de empacotamento.

Como é explorada

O vetor é o comando EVAL (ou EVALSHA) do protocolo Redis, enviado via conexão TCP à porta do serviço — normalmente 6379. O pré-requisito real é o acesso à interface Redis com permissão para executar scripts Lua: em instâncias sem 'requirepass'/ACL configurados (situação comum em deploys default, containers e instâncias expostas por engano à internet), qualquer cliente que alcance a porta pode enviar EVAL sem autenticação alguma. Em instâncias com autenticação, um usuário autenticado com permissão para EVAL também explora a falha.

A exploração consiste em enviar um script Lua que acessa a variável 'package' presente indevidamente no ambiente sandboxed, chegando a package.loadlib e daí à execução de comandos de shell via os.execute, com os privilégios do processo redis-server. Não há necessidade de bypass de memória, ROP ou engenharia complexa — é abuso direto de uma API exposta pelo próprio interpretador.

A CISA confirma exploração ativa (entrada no catálogo KEV, adicionada em 2022-03-28, com prazo de correção em 2022-04-18) e o EPSS próximo de 1.0 reflete probabilidade altíssima de exploração observada/prevista. Existem módulo Metasploit, template Nuclei e PoC pública, o que baixa a barreira técnica para qualquer atacante automatizar varredura e exploração em massa contra instâncias Redis expostas.

Versões

Afetadas
Pacote redis do Debian nas versões anteriores às corrigidas — confirmadamente encontrado em redis/5:5.0.14-1+deb10u1 (buster), redis/5:5.0.3-4 e redis/5:6.0.15-1 (bullseye/unstable), conforme registrado no bug tracker do Debian. O problema é específico do empacotamento Debian (e potencialmente de derivados que sigam o mesmo esquema de build), não do código-fonte upstream do Redis.
Corrigidas em
Buster (oldstable): 5:5.0.14-1+deb10u2. Bullseye (stable): 5:6.0.16-1+deb11u2. Unstable/sid: 6.0.16-2 e 7.0~rc2-2, conforme registrado no Debian bug #1005787 e na DSA-5081-1.

Como se proteger

A correção definitiva é atualizar o pacote redis do Debian para uma versão que corrige o vínculo com Lua. Segundo o bug tracker do Debian e a DSA-5081-1: para oldstable (buster), versão 5:5.0.14-1+deb10u2; para stable (bullseye), versão 5:6.0.16-1+deb11u2; no ramo unstable/sid, 6.0.16-2 ou 7.0~rc2-2 também corrigem o problema.

Se a atualização não for possível de imediato, o paliativo real é restringir ou desabilitar o acesso a EVAL/EVALSHA para usuários não confiáveis via ACL do Redis (renomear ou bloquear esses comandos para papéis sem necessidade de scripting), exigir autenticação com requirepass/ACL, e — o controle mais efetivo na prática — nunca expor a porta do Redis a redes não confiáveis, mantendo bind em localhost/rede interna e firewall restringindo acesso. Nenhuma dessas medidas corrige a causa raiz (o vazamento de 'package' no sandbox), apenas reduz quem consegue alcançar o vetor.

Um mito a descartar: como o problema é de empacotamento e não do código-fonte do Redis, compilar/rodar binários oficiais do projeto Redis (upstream, não empacotados pelo Debian) já elimina a exposição, já que ali o Lua é embutido estaticamente. Trocar apenas a versão do Redis sem trocar a origem do pacote Debian vulnerável não resolve nada.

Como detectar

O Redis não registra por padrão o conteúdo de comandos EVAL/EVALSHA em log; sinais confiáveis exigem instrumentação adicional, como MONITOR ativo, slowlog com limiar baixo, ou proxy/IDS de rede capturando o payload RESP do comando. Procure scripts Lua enviados via EVAL que referenciem 'package', 'package.loadlib' ou 'os.execute' — presença dessas strings em um script Lua recebido por um Redis é forte indício de tentativa de exploração, já que scripts legítimos de aplicação raramente tocam esses símbolos. Na ausência de logging de comandos, não há sinal confiável a posteriori — a defesa prática é impedir o vetor (autenticação, ACL, bind restrito) em vez de depender de detecção após o fato.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
It was discovered, that redis, a persistent key-value database, due to a packaging issue, is prone to a (Debian-specific) Lua sandbox escape, which could result in remote code execution.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Produtos afetados
Debian · redis
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.