通過發送 UDP 數據包利用 Toxcore 中的緩衝區溢出

Toxcore(Tox P2P 消息傳遞協議的參考實現)中發現了一個漏洞 (CVE-2021-44847),該漏洞在處理特製的 UDP 數據包時可能會觸發代碼執行。 該漏洞會影響未禁用 UDP 傳輸的基於 Toxcore 的應用程序的所有用戶。 要進行攻擊,只需發送一個UDP數據包,知道受害者的IP地址、網絡端口和DHT公鑰(這些信息在DHT中是公開的,即攻擊可以在任何用戶或DHT主機上進行) 。

該問題出現在 toxcore 版本 0.1.9 至 0.2.12 中,並在版本 0.2.13 中得到修復。 在客戶端應用程序中,到目前為止,只有 qTox 項目發布了消除該漏洞的更新。 作為一種安全解決方法,您可以禁用 UDP,同時保留 TCP 支持。

該漏洞是由handle_request()函數中的緩衝區溢出引起的,該緩衝區溢出是由於網絡數據包中的數據大小計算不正確而導致的。 特別地,加密數據的長度是在宏CRYPTO_SIZE中確定的,定義為“1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE”,後來在減法運算“length - CRYPTO_SIZE”中使用了該長度。 由於宏中缺少括號,因此不是減去所有值的總和,而是減去 1 並將剩餘部分相加。 例如,緩衝區大小不是“length - (1 + 32 * 2 + 24)”,而是計算為“length - 1 + 32 * 2 + 24”,這導致覆蓋緩衝區外部的堆棧上的數據邊界。

來源: opennet.ru

添加評論