
CVE-2025-14847 explicação e laboratório
Referência CVE : CVE-2025-14847
Este repositório é um laboratório educacional que demonstra o conceito por trás de uma classe de problemas frequentemente descritos como "compressão de enquadramento / divulgação de memória por metadados de tamanho" em protocolos de rede de bancos de dados.
Ele foi escrito para apoiar a compreensão defensiva: como a compressão de rede do MongoDB é negociada e enquadrada, por que os campos de tamanho são importantes e como parsers robustos evitam exposição acidental de memória.
Nota sobre a referência CVE: Este laboratório é estruturado em torno da ideia referenciada como CVE-2025-14847. Este repositório não valida, reproduz ou explora um bug específico de fornecedor, nem alega que qualquer versão específica do MongoDB seja afetada. Ele foca no modo de falha geral (metadados de tamanho incompatíveis em torno de payloads comprimidos) e nas mitigações.
Este repositório não inclui (e não deve ser usado como) evidência de quais versões do MongoDB são vulneráveis ou corrigidas para qualquer CVE específico.
Para documentar versões "vulneráveis" vs "corrigidas" corretamente para um relatório, use um comunicado oficial do fornecedor / notas de versão para o CVE e cite-o.
Passos práticos para verificar o que você está executando:
docker compose exec mongodb mongod --versiondocker compose exec mongodb mongosh --quiet --eval "db.version()"mongod --versionmongosh --quiet --eval "db.version()"Se você compartilhar o link do comunicado que está usando, posso formatar uma tabela limpa "Afetado / Corrigido" no README sem adivinhar.
Este laboratório ilustra um modo de falha de compressão de enquadramento / incompatibilidade de metadados de tamanho:
OP_COMPRESSED adiciona mais campos de tamanho (comprimento da mensagem externa, tamanho declarado não comprimido e o comprimento da própria mensagem interna).Consulte protocol_overview.md para a descrição detalhada do enquadramento.
Ao final do laboratório, você deve ser capaz de:
Ele faz:
hello não comprimido incluindo compression: ["zlib"]OP_COMPRESSED corretamente enquadrada usando zlibEle NÃO faz:
docker-compose.yml – Executa um contêiner MongoDB com compressão zlib habilitada e exposição apenas no localhost.protocol_overview.md – Protocolo de fio + BSON + fluxo de compressão + explicação conceitual da vulnerabilidade.mitigation.md – Orientação de defesa: correção de versão, configuração e ideias de detecção.lab_probe.py – Sonda original que negocia compressão e registra tamanhos de mensagens com segurança.A partir do diretório deste repositório:
docker compose up -d
Confirme que está em execução:
docker compose ps
python .\lab_probe.py
Saída esperada:
hellohello comprimido e registra tanto os tamanhos comprimidos quanto descomprimidos da mensagempython .\lab_probe.py --toy-demo
Isso executa apenas verificações locais de análise para ilustrar por que a validação de tamanho é importante.
docker compose down
127.0.0.1:27017 no host.