通过发送 UDP 数据包利用 Toxcore 中的缓冲区溢出

在 Toxcore(Tox P2P 消息传递协议的参考实现)中发现了一个漏洞 (CVE-2021-44847),该漏洞可能在处理特制 UDP 数据包时触发代码执行。 该漏洞会影响所有未禁用 UDP 传输的基于 Toxcore 的应用程序的用户。 要进行攻击,只需发送一个知道受害者的 IP 地址、网络端口和 DHT 公钥的 UDP 数据包(此信息在 DHT 中公开可用,即攻击可能针对任何用户或 DHT 主机进行) .

该问题出现在 toxcore 版本 0.1.9 到 0.2.12 中,并在版本 0.2.13 中得到修复。 在客户端应用程序中,目前只有 qTox 项目发布了消除漏洞的更新。 作为一种安全解决方法,您可以在保留 TCP 支持的同时禁用 UDP。

该漏洞是由 handle_request() 函数中的缓冲区溢出引起的,该缓冲区溢出是由于网络数据包中的数据大小计算不正确所致。 特别地,加密数据的长度在定义为“1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE”的 CRYPTO_SIZE 宏中确定,后来用于“长度 - CRYPTO_SIZE”减法运算。 由于宏中缺少括号,因此不是减去所有值的总和,而是减去 1 并添加剩余部分。 例如,缓冲区大小不是“length - (1 + 32 * 2 + 24)”,而是计算为“length - 1 + 32 * 2 + 24”,这导致覆盖缓冲区外堆栈上的数据边界。

来源: opennet.ru

添加评论