
CVE-2025-51495 の概念実証エクスプロイト。Mongoose WebSocket の mg_ws_cb 関数における整数オーバーフローにより、範囲外メモリアクセスと潜在的なリモートコード実行が引き起こされる。
最新リリースのMongoose(v7.17)に確認されたセキュリティ脆弱性を報告します。問題はWebSocketモジュール、特に着信WebSocketフレームを処理するmg_ws_cb関数に存在します。
この関数は整数オーバーフローに対して脆弱であり、特定の細工された入力によってメモリの範囲外アクセスを引き起こす可能性があります。この状態は、リモート攻撃者によって悪用され、メモリ破損やアプリケーションのクラッシュを引き起こす可能性があります。
ベンダーごとにWebSocketのビジネスロジックの実装が異なるため、この脆弱性はリモートコード実行につながる可能性があります。
詳細:
根本的な脆弱性はmg_ws_cb関数にあります:
クライアントから送信された特別に細工されたWebSocketパケットは、この時点でofs=0を設定する可能性があり、ofs-1を計算する際に整数オーバーフローを引き起こし、その結果、recv.bufの長さよりもはるかに大きな値になります。
その後のWebSocket処理関数でこのbufが使用される可能性があり、その長さが実際の長さよりも大きいため、範囲外アクセスやプログラムのクラッシュを引き起こす可能性があります。
脆弱性のトリガー:
デモンストレーションのため、プロジェクト内の既存のWebSocketサンプル「websocket-server」を選択しました。コンパイル時にASANチェックを追加した以外、コードには一切変更を加えていません。
プログラムを実行し、特定のWebSocketパケットを送信すると、直接クラッシュが発生します。
poc:
クライアントとしてプロジェクト内の既存の「websocket-client」も選択し、リクエスト送信用のmain.cのfn関数内の2つのパラメータのみを変更しました。
変更したプログラムを実行すると、サーバーがクラッシュします。