CVE-2025-23061 - Injeção de Comandos no Mongoose
Uma prova de conceito para a vulnerabilidade de Injeção de Comandos no Mongoose < 8.9.5 que afeta a opção match da função populate().
Detalhes da Vulnerabilidade
ID do CVE: CVE-2025-23061
Severidade: CRÍTICA (CVSS 9.0)
Pacote Afetado: mongoose
Versões Vulneráveis:
- < 6.13.6
-
= 7.0.0 < 7.8.4
-
= 8.0.0 < 8.9.5
Linha do Tempo do CVE-2024-53900 e CVE-2025-23061
- 7 de novembro de 2024: Dat Phung identificou uma vulnerabilidade crítica no Mongoose e submeteu um relatório de segurança à Snyk.
- 26 de novembro de 2024: O Mongoose lançou a versão 8.8.3 para corrigir essa vulnerabilidade.
- 2 de dezembro de 2024: O National Vulnerability Database (NVD) divulgou o CVE-2024-53900 para essa vulnerabilidade.
- 17 de dezembro de 2024: Ao analisar o patch 8.8.3 do Mongoose, Dat Phung encontrou uma bypass que ainda permitia RCE (Execução Remota de Código). Um relatório de segurança detalhado foi submetido à Tidelift.
- 13 de janeiro de 2025: O Mongoose lançou a versão 8.9.5, introduzindo um patch aprimorado que corrigiu efetivamente a bypass.
- 15 de janeiro de 2025: O National Vulnerability Database (NVD) divulgou oficialmente o CVE-2025-23061, enfatizando a gravidade da vulnerabilidade recém-identificada.
Causa Raiz
Essa vulnerabilidade existe devido a uma correção incompleta para o CVE-2024-53900. Embora a injeção direta de $where seja bloqueada, atacantes podem contornar essa proteção aninhando operadores $where dentro de operadores lógicos como $and, $or, etc.
O caminho de código vulnerável:
- O usuário fornece entrada por meio do parâmetro
match de populate()
- A aplicação usa a entrada do usuário sem sanitização diretamente na consulta match
- O Mongoose não sanitiza
$where quando aninhado dentro de operadores lógicos
- O atacante executa JavaScript arbitrário no servidor MongoDB
Impacto
- Divulgação de Informações: Acessar dados sensíveis sem autorização adequada
- Bypass de Autenticação: Recuperar informações restritas a administradores
- Execução de Código Arbitrário: Executar JavaScript no servidor MongoDB
- Modificação de Dados: Potencial para modificar registros do banco de dados
Configuração e Execução do PoC
Pré-requisitos
- Node.js >= 14
- MongoDB em execução localmente ou acessível por meio de string de conexão
Instalação
# Instalar dependências
npm install
# Opcional: Usar um URI específico do MongoDB
export MONGODB_URI="mongodb://localhost:27017/mongoose_cve_poc"
Executar o Servidor Vulnerável
npm start
O servidor iniciará em http://localhost:3000
Executar o Exploit
Em outro terminal:
node exploit.js
Referências
Aviso Legal
Este PoC é fornecido apenas para fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. Use-o somente em sistemas que você possua ou para os quais tenha permissão explícita de teste.