← back
CVE-2022-24112criticalunder attackCWE-290

apisix/batch-requests plugin allows overwriting the X-REAL-IP header

100Vexday Risk Score

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

ssvc Actcvss 9.8epss 96%
from disclosure to weapon11 days
Published on NVDFeb 11
1st PoC+11d
metasploitDec 7
CISA KEV+195d
exploitation probability
96%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
18 public exploit(s)
Action required by CISAfederal deadline: 2022-09-15

Apply updates per vendor instructions.

Summary

O plugin batch-requests do Apache APISIX permite que um cliente externo sobrescreva o cabeçalho X-REAL-IP usado pelo gateway para decidir se uma requisição interna partiu de um IP autorizado. Isso quebra a restrição de IP da Admin API e, em instalações com a chave de API padrão não alterada, resulta em execução remota de código no plano de dados. Está no catálogo KEV da CISA com exploração confirmada e existe módulo Metasploit e template Nuclei públicos, o que torna a varredura automatizada trivial.

Technical detail

O batch-requests é um plugin que aceita, em uma única requisição HTTP ao gateway, uma lista de sub-requisições a serem despachadas internamente — inclusive para caminhos administrativos como /apisix/admin/*. A Admin API do APISIX normalmente é protegida por uma lista de IPs permitidos (allowlist), verificada a partir do cabeçalho X-REAL-IP que o próprio gateway deveria fixar com o IP real do cliente antes de repassar a sub-requisição internamente.

O bug (classificado pela CISA como CWE-290, autenticação/verificação de identidade por spoofing) está na ordem/lógica dessa reescrita: o código do plugin não neutraliza de forma consistente um X-REAL-IP fornecido pelo próprio atacante antes que a checagem de allowlist seja avaliada para a sub-requisição interna. O atacante controla o cabeçalho e o corpo da requisição externa ao batch-requests, incluindo o caminho e o payload da sub-requisição embutida — inclusive endpoints da Admin API.

O resultado prático é um bypass de restrição de IP: uma requisição originada de qualquer lugar da rede pode ser processada internamente como se tivesse partido de um IP confiável (ex.: localhost). Como a Admin API do APISIX permite criar rotas, upstreams e plugins arbitrários, e plugins como serverless-pre-function/serverless-post-function executam código Lua, o acesso não autorizado à Admin API se converte em execução de código no processo do gateway.

How it’s exploited

O vetor é uma requisição HTTP não autenticada enviada diretamente ao endpoint do plugin batch-requests exposto no plano de dados (a porta pública do gateway), contendo uma sub-requisição direcionada à Admin API. Não é necessária autenticação prévia para acionar o bypass em si — a barreira que cai é justamente o controle de IP que substituiria a autenticação de rede da Admin API.

O impacto final depende de duas pré-condições que a nota do fornecedor destaca e que a manchete 'RCE crítico' esconde: (1) a Admin API precisa estar acessível pelo mesmo caminho de rede que o plano de dados — se ela roda em porta separada isolada de rede, o bypass de IP ainda funciona, mas o atacante só consegue contornar restrições de IP de rotas do plano de dados, sem chegar à Admin API; (2) para virar RCE, o atacante precisa da chave de API da Admin API — em instalação padrão com a chave default não alterada, isso é trivial, tornando o cenário 'default config' plenamente crítico (CVSS 9.8, sem interação do usuário, sem privilégio). Com chave alterada, o atacante ainda pode abusar do bypass para outras finalidades (SSRF interno, contorno de allowlist de rotas), mas não obtém RCE diretamente.

A presença no catálogo KEV da CISA confirma exploração ativa in-the-wild, e a existência de módulo Metasploit e template Nuclei indica que a cadeia completa (bypass de IP → Admin API → criação de plugin malicioso → RCE) já está automatizada e é usada em varredura de massa contra instâncias expostas à internet com configuração padrão.

Versions

Affected
O advisory do Apache Software Foundation não especifica um limite inferior exato de versões afetadas; a correção foi disponibilizada nas linhas 2.10.x e 2.12.x (2.10.4 e 2.12.1), o que indica que versões anteriores a esses releases nessas linhas — e presumivelmente séries anteriores que incluíam o plugin batch-requests habilitado por padrão — são vulneráveis.
Fixed in
2.10.4 e 2.12.1, conforme o comunicado oficial da Apache Software Foundation.

How to protect

A correção definitiva é atualizar o Apache APISIX para 2.10.4 (backport da linha 2.10.x) ou 2.12.1, conforme o advisory oficial do projeto. Se a atualização não for imediata, o paliativo indicado pelo próprio fornecedor é desabilitar explicitamente o plugin batch-requests: declarar a lista de plugins habilitados em conf/config.yaml sem incluí-lo, ou comentar sua entrada em conf/config-default.yaml. O custo desse paliativo é funcional — qualquer integração que dependa de agregação de requisições via batch-requests deixa de funcionar até a atualização.

Trocar a chave de API padrão da Admin API e/ou mover a Admin API para uma porta isolada, sem exposição no mesmo segmento de rede do plano de dados, reduz o impacto (evita o salto direto para RCE), mas não corrige a vulnerabilidade em si: o bypass de IP no batch-requests continua permitindo contornar restrições de IP de rotas do plano de dados, segundo o próprio texto do advisory.

Não funciona como mitigação confiar apenas em uma allowlist de IP para proteger a Admin API sem também isolar rede/porta ou desabilitar o plugin vulnerável — é exatamente esse controle que a falha quebra.

How to detect

Procurar em logs de acesso do APISIX chamadas ao endpoint do plugin batch-requests seguidas, na mesma janela de tempo, de operações na Admin API (/apisix/admin/*) — criação ou alteração inesperada de rotas, upstreams ou plugins (especialmente serverless-pre-function/post-function) fora de mudanças de configuração planejadas é o indicador mais forte de exploração bem-sucedida. Requisições externas contendo cabeçalho X-REAL-IP manipulado combinadas com payloads batch-requests que referenciam caminhos administrativos também são um sinal direto de tentativa de bypass, ainda que nem toda tentativa fique visível se o atacante não obtiver a chave de API correta.

Não há um único log ou assinatura de tráfego universalmente confiável além desse padrão de correlação, já que a requisição inicial ao batch-requests, isoladamente, pode ser legítima — o sinal está na combinação com acesso subsequente à Admin API a partir de um contexto que deveria estar bloqueado pela allowlist de IP.

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.
An attacker can abuse the batch-requests plugin to send requests to bypass the IP restriction of Admin API. A default configuration of Apache APISIX (with default API key) is vulnerable to remote code execution. When the admin key was changed or the port of Admin API was changed to a port different from the data panel, the impact is lower. But there is still a risk to bypass the IP restriction of Apache APISIX's data panel. There is a check in the batch-requests plugin which overrides the client IP with its real remote IP. But due to a bug in the code, this check can be bypassed.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.