
Exploit de prova de conceito para CVE-2025-51495, um estouro de inteiro na função mg_ws_cb do Mongoose WebSocket que leva a acesso de memória fora dos limites e potencial execução remota de código.
Gostaria de reportar uma vulnerabilidade de segurança identificada na versão mais recente do Mongoose (v7.17). O problema reside no módulo WebSocket, especificamente na função mg_ws_cb responsável por manipular frames WebSocket recebidos.
A função é vulnerável a um estouro de inteiro, o que pode levar a um acesso fora dos limites da memória sob certas entradas maliciosamente criadas. Essa condição pode ser potencialmente explorada por um atacante remoto para causar corrupção de memória ou travar a aplicação.
Devido a diferentes fornecedores implementarem a lógica de negócio do WebSocket de maneiras distintas, essa vulnerabilidade pode potencialmente levar à execução remota de código.
Detalhes:
A vulnerabilidade raiz está na função mg_ws_cb:
Um pacote WebSocket especialmente criado enviado pelo cliente pode definir ofs=0 neste ponto, o que causará um estouro de inteiro ao calcular ofs-1, resultando em um valor muito maior que o comprimento de recv.buf.
Em funções subsequentes de processamento WebSocket, este buf pode ser usado e, como seu comprimento é maior que o comprimento real, pode levar a acesso fora dos limites ou travamento do programa.
Gatilho da vulnerabilidade:
Para fins de demonstração, escolhi o exemplo websocket existente chamado "websocket-server" no projeto. Não fiz alterações no código, exceto pela adição de verificações ASAN durante a compilação. Ao executar o programa e enviar um pacote websocket específico, ocorre um travamento direto.

PoC:
Também escolhi o "websocket-client" existente no projeto como cliente e fiz modificações apenas nos dois parâmetros na função fn do main.c para enviar a requisição.
Executar o programa modificado fará com que o servidor trave.