内容简介:研究人员发现xiph.org基金会支持的开源流媒体服务器版本号为2.4.0到2.4.3的Icecast服务器和使用URL认证的Icecast服务器受该漏洞的影响。研究人员建议尽快升级到v 2.4.4。我们都知道sprintf是不安全的,因为不提供对缓冲区溢出的保护。许多文档中都说Snprintf是更安全版本的sprintf,但如果缓冲区太小,输出就会变短。但我们不清楚的是如果输出缩短,snprintf就不会返回写的字节。事实上,如果输出缓存足够大,那么返回的是已经写入的字节数。如果提供一个大于缓冲区大小的
研究人员发现xiph.org基金会支持的开源流媒体服务器 Icecast 的漏洞。攻击者可以伪造HTTP header来覆写服务器的栈内容,导致远程代码执行漏洞。因为Icecast常用于网络电台,所以攻击者利用该漏洞可以完全控制网络电台。该漏洞的CVE编号为 CVE-2018-18820 。
版本号为2.4.0到2.4.3的Icecast服务器和使用URL认证的Icecast服务器受该漏洞的影响。研究人员建议尽快升级到v 2.4.4。
Snprintf
我们都知道sprintf是不安全的,因为不提供对缓冲区溢出的保护。许多文档中都说Snprintf是更安全版本的sprintf,但如果缓冲区太小,输出就会变短。但我们不清楚的是如果输出缩短,snprintf就不会返回写的字节。事实上,如果输出缓存足够大,那么返回的是已经写入的字节数。如果提供一个大于缓冲区大小的size参数,根本无法应对缓冲区溢出。
下面是来自Icecast的有漏洞的代码:
在来自用户请求的HTTP header之上循环,并复制到缓冲区,构建一个发送到认证服务器的POST请求主体:
post_offset += snprintf(post + post_offset, sizeof(post) - post_offset, "&%s%s=%s", url->prefix_headers ? url->prefix_headers : "", cur_header, header_valesc);
下面是代码的简化版:
post_offset += snprintf(post + post_offset, sizeof(post) - post_offset, "%s", cur_header);
如果sizeof(post)的大小是10,那么就写入了8字节。那么如果下一个复制的header是baz会怎么样呢?
输出会变短,但post_offset在缓存的尾部会递增:
下面设想另一个复制的header内容为“AAAAA…”。 到snprintf的size参数是sizeof(post) – post_offset,这会下溢变成一个非常大的数。结果就是之后对snprintf的调用会有效地写入尽可能多的数据。数据会被写入post + post_offset,可能会超出post缓存的范围,那么就会覆盖栈中的其他内容。
也就是说我们可以发送一个随后会被缩短的长HTTP header,但是长度可以让我们定位栈中的任何位置post_offset。然后,可以发送第二个HTTP header,其内容会被写入定位的位置。
对攻击者来说,比较难的一点是header在复制到snprintf之前会进行处理,所以限制在可以写入到栈中的数据。研究人员的POC漏洞利用可以引发服务器进程段错误(segfault),类似DoS攻击。但研究人员认为攻击者可以对该攻击进行升级来获得完全远程代码执行。
修复
Xiph很快对漏洞进行了回应,并发布了补丁。补丁非常简单,检查了snprintf的返回值,如果使post_offset指向缓冲区的尾部,就记录错误并退出循环。
以上所述就是小编给大家介绍的《CVE-2018-18820漏洞分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 漏洞分析:OpenSSH用户枚举漏洞(CVE-2018-15473)分析
- 【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析
- 【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析
- 漏洞分析:对CVE-2018-8587(Microsoft Outlook)漏洞的深入分析
- 路由器漏洞挖掘之 DIR-815 栈溢出漏洞分析
- Weblogic IIOP反序列化漏洞(CVE-2020-2551) 漏洞分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。