CVE-2022-0543
Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.
Apply updates per vendor instructions.
Resumen
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.
Detalle 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.
Cómo se explota
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.
Versiones
Cómo protegerse
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.
Cómo 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.