← back
CVE-2022-0543criticalunder attackCWE-862

CVE-2022-0543

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 10epss 99%
from disclosure to weapon0 days
Published on NVDFeb 18
1st PoCApr 9
metasploitFeb 18
CISA KEV+38d
exploitation probability
99%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
13 public exploit(s)
Action required by CISAfederal deadline: 2022-04-18

Apply updates per vendor instructions.

Summary

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.

Technical detail

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.

How it’s exploited

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.

Versions

Affected
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.
Fixed in
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.

How to protect

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.

How to detect

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.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
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
Affected products
Debian · redis
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.