
Xlight SFTPサーバー <= 3.9.4.2 における事前認証ヒープオーバーフロー
Xlight 32ビットおよび64ビットバージョン <= 3.9.4.2
Xlight SFTPにアクセスできる認証されていない攻撃者は、コード実行を達成したり、サービス拒否を引き起こしたりする可能性があります。
SFTPプロトコルでネットワーク経由で送信される文字列には、先頭に4バイトの長さが付加されています。Xlightがネットワークパケットからこれらの文字列を読み取るために使用する関数は、長さの検証時および必要なメモリの割り当て時に整数オーバーフローが発生します。文字列の4バイトの長さを細工することで、攻撃者が制御するバッファからヒープ上に範囲外の大きなmemmove(約4GB)をトリガーできます。
脆弱な関数は、SSHハンドシェイク全体で文字列の受信に使用され、サポートされているアルゴリズム、暗号スイート、およびクライアントからのユーザー名とパスワードを受信する際の認証前を含みます。これらの文字列のいずれかを細工された長さで標的にすることで、エクスプロイトをトリガーできます。
これはトリガーするのは簡単ですが、悪用の容易さはXlightバイナリのビット数に依存します。
32ビットでは、コピーがヒープの終端を超えて実行され、プロセス内のすべてを破壊した後、クラッシュを引き起こします。ワイルドコピーがプロセスをクラッシュさせる前に、ヒープ上の隣接する構造を破損し、このサーバーのマルチスレッド性を悪用して破損したデータにアクセスすることが可能である可能性があります。
64ビットでは、メモリ割り当て呼び出しのサイズ引数がsize_t(つまり、64ビット用にコンパイルされた場合64ビット幅)であるため、OOB書き込みはできません。つまり、2つの32ビット整数の加算でこの値をオーバーフローさせることはできず、代わりに大きな約4GBのバッファを割り当てるだけです。このバグは代わりにOOB読み取りを引き起こし、プロセスがクラッシュします。