CVE-2018-18820漏洞分析

钻研职员发明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指向缓冲区的尾部,就记录差错并退出轮回。

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包