
Estouro de heap pré-autenticação no servidor SFTP Xlight <= 3.9.4.2
Versões Xlight de 32 e 64 bits <= 3.9.4.2
Um atacante não autenticado com acesso ao Xlight SFTP poderia obter execução de código ou causar uma negação de serviço.
Strings enviadas pela rede no protocolo SFTP são prefixadas com um comprimento de quatro bytes. A função que o Xlight usa para ler essas strings do pacote de rede tem um estouro de inteiro ao validar o comprimento e ao alocar a quantidade de memória necessária. Ao criar o comprimento de quatro bytes de uma string, podemos acionar um memmove grande (~4GB) de um buffer controlado pelo atacante, fora dos limites, para o heap.
A função vulnerável é usada para receber strings durante o handshake SSH, inclusive na pré-autenticação ao receber algoritmos suportados, suítes de cifras e um nome de usuário e senha do cliente. Podemos mirar qualquer uma dessas strings com um comprimento forjado para acionar a exploração.
Isso é fácil de acionar, mas a facilidade de exploração depende da bitness do binário do Xlight.
Em 32 bits, a cópia ultrapassará o final do heap, destruindo tudo no processo, antes de causar uma falha. É provável que seja possível corromper uma estrutura adjacente no heap e explorar a natureza multithread desse servidor para acessar os dados corrompidos, antes que a cópia descontrolada derrube o processo.
Em 64 bits, não conseguimos uma escrita fora dos limites (OOB), porque o argumento de tamanho para a chamada de alocação de memória é um size_t (ou seja, 64 bits de largura quando compilado para 64 bits), o que significa que não podemos estourar esse valor com a adição de dois inteiros de 32 bits e, em vez disso, apenas alocamos um buffer grande de ~4GB. Esse bug resulta em uma leitura fora dos limites, que derruba o processo.