
This repo contains all the work surrounding the development of the PoC for CVE-2024-48208, and how a simple OOB(Out-of-bound) read can result in jail escapes as well as broken access control.
O repositório contém todo o trabalho relacionado ao desenvolvimento do PoC para demonstrar como uma simples leitura OOB (Out-of-Bound) pode resultar em fugas de jail e quebra de controle de acesso.
A descrição original do CVE é a seguinte:

O PR no GitHub no repositório oficial detalha como a função domlsd() no arquivo ls.c é vulnerável a uma leitura OOB devido a um incremento não verificado do ponteiro base, que pode fazer o ponteiro apontar para um buffer fora do buffer cmd, como pode ser notado nas linhas 1053 e 1054.

Durante a depuração do buffer no GDB, notamos que a leitura OOB fazia o usuário cair no que é chamado de replybuf.
Após análise mais aprofundada, descobrimos que o replybuf é um buffer preenchido pela resposta que o servidor forneceu ao cliente. O replybuf é definido no arquivo ftpd.c, conforme mostrado abaixo:

Resumindo:
base apontar para uma parte do replybuf.replybuf contém a resposta fornecida ao cliente.Agora, no PR original do GitHub, o autor do CVE não considerou/demonstrou o que aconteceria se a seguinte condição em ls.c:1055 retornasse verdadeira?

Começamos a refletir sobre isso e descobrimos que, se um atacante conseguir fazer o chdir(base) retornar verdadeiro, a função domlsd() prossegue com a listagem do arquivo.
A equipe considerou os cenários, fornecidos em VMsetup.txt, sobre administradores de sistema configurando ambientes restritos, e decidiu construir um exploit que funcionaria da seguinte forma:
O usuário restrito se conectará ao servidor FTP vulnerável e fará login com suas credenciais.
nc <ip-do-servidor> <porta-ftp>
USER <nome-de-usuário>
PASS <senha>
Em seguida, o usuário entrará no modo EPSV.
EPSV
O usuário anota o número da porta retornado, pois precisará se conectar a ela para ler os resultados da listagem.
O usuário pode então criar um link (depende do deslocamento do buffer, que pode ser facilmente automatizado conforme a última resposta recebida) apontando para o diretório do qual deseja listar arquivos.
O usuário envia o comando malicioso (depende do deslocamento selecionado).
MLSD -........<mais de 4096 para estourar o buffer cmd>
O usuário pode então estabelecer outra conexão com o número da porta anotado anteriormente para ler a listagem.
Desenvolvemos um script de exploit automatizado pure.py que executa os mesmos passos, baseado em outros scripts que desenvolvemos ao longo do caminho para testes, que podem ser encontrados no diretório dev_files.
Para reproduzir a vulnerabilidade, você pode seguir um guia passo a passo para configuração de Máquina Virtual em VMsetup.txt
Para criar um contêiner Docker da instância vulnerável, consulte Dockersetup.txt