
Easy File Sharing Web Server 7.2 における SEH ベースのバッファオーバーフロー。パスワード回復エンドポイントを介して到達可能。
Easy File Sharing Web Server 7.2 における SEH ベースのバッファオーバーフロー。パスワード回復エンドポイントからアクセス可能。
このリポジトリは、脆弱性研究とエクスプロイト開発を教える際に使用する教材の一部として作成されました。特に、SEH (Structured Exception Handler) オーバーフローや ROP (Return-Oriented Programming) チェーンの概念を導入する場面を想定しています。
これは私の講演 "" に関連しています。その講演では、脆弱性研究にはさまざまな入り口があり、レガシーソフトウェアで公的に文書化された CVE を研究することが初心者にとって最もアクセスしやすい道の一つであると説明しています。
この CVE は、完全で現実的なエクスプロイトシナリオを示しているため選ばれました。
このケースを、入門的なバッファオーバーフロー演習とより高度なエクスプロイト開発概念との間の橋渡しとして活用することを目的としています。
この脆弱性は、Easy File Sharing Web Server 7.2 に影響を与えます。これは、軽量な Windows ウェブサーバーアプリケーションで、かつて単純なファイル共有に広く使用されていました。このソフトウェアは、現代のセキュリティ緩和策を考慮せずに記述されました。教育的観点から特に興味深いのは、以下の要因の組み合わせです。
この組み合わせにより、CVE-2025-34096 は、現実的な未認証攻撃シナリオでのエクスプロイト開発手法を教えるための優れたケースとなっています。
Easy File Sharing Web Server 7.2 は、HTTP 経由でファイルを共有するために構築された軽量 Windows アプリケーションです。基本的なファイルブラウジングやユーザーアカウントに加えて、ユーザーがメールアドレスを入力して忘れた資格情報を受け取るためのパスワード回復機能が含まれています。
そのフォームは /sendemail.ghp に POST します。Email フィールドを処理するハンドラは、値を固定サイズのスタックバッファに長さチェックなしで直接コピーします。このエンドポイントは認証を必要としないため、リモート攻撃者と脆弱なコードパスの間には何も防御がありません。
主要な技術的詳細は以下の通りです。
Easy File Sharing Web Server は、メール通知機能の一部として /sendemail.ghp への HTTP POST リクエストを処理します。このエンドポイントが受け入れる Email パラメータは、長さチェックなしでローカルのスタックバッファにコピーされます。
脆弱なロジックを簡略化したものは次のようになります。
char email_buffer[256];
strcpy(email_buffer, user_input);
宛先バッファが固定サイズであり、入力長が検証されないため、Email フィールドに十分に長い文字列を送信すると、コピーがバッファの末尾を超えて書き込まれます。
より多くのデータが書き込まれるにつれて、スタックレイアウトが破損します。単純なリターンアドレスの上書きとは異なり、オーバーフローはスタックに保存されている Structured Exception Handler (SEH) チェーンに到達します。破損したスタックの結果として例外がトリガーされると、OS は SEH チェーンを辿り、攻撃者が制御可能なハンドラアドレスに制御を移します。
したがって、エクスプロイトの流れは SEH オーバーライト手法に従います。
これにより、この脆弱性は基本的な EIP 上書きよりもエクスプロイトが複雑になりますが、現実のシナリオをよりよく代表するものとなります。
クラッシュは、/sendemail.ghp への POST リクエストの Email パラメータに長い文字列を送信することで再現できます。認証は不要です。Python を使用した例:
import socket
HOST = '127.0.0.1'
PORT = 80
request = (
'POST /sendemail.ghp HTTP/1.1\r\n'
'Email=' + 'A' * 5000 + '&getPassword=Get+Password'
).encode('utf-8')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
デバッガで実行すると、クラッシュは破損した SEH チェーンとアクセス違反を示し、ユーザー制御のデータが例外ハンドラポインタを上書きしたことを確認できます。
このリポジトリの目的は、単にクラッシュを実演することだけでなく、実際の SEH ベースのエクスプロイトを開発する際に使用される方法論に従って、完全なエクスプロイトプロセスを段階的に説明することです。
メインの README を簡潔に保つために、詳細なエクスプロイトノート、スクリプット、デバッガの手順は、このリポジトリの Vulnerability 📂 フォルダ内に配置されています。
そこには、この CVE のエクスプロイトに使用された完全なワークフローが含まれています。以下を含みます: