libssh2被发明整数溢出和越界读取破绽(CVE-2019-13115) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

libssh2被发明整数溢出和越界读取破绽(CVE-2019-13115)

申博_安全预警 申博 58次浏览 未收录 0个评论

libssh2是一个C函数库,用来完成SSH2协定。SSH2是一套平安通信协定框架(初期的SSH1由于存在平安破绽),基于SSH2协定的产物主要有openssh,putty,SSH Secure Shell Client等,这些都是开源的,然则这些代码异常难明而且庞杂,一个个函数深层次的挪用很快就让人在C言语代码的海洋中丢失了方向,妄想经由历程从这些开源软件中抽取顺序代码段来“组装”本身的应用顺序是异常人所能完成的。不过还好网路上涌现了一些开源的SSH2开辟库,应用这些开辟库开辟本身的SSH2顺序却要简朴很多,由于这些开辟库都是开源的,往往是针对linux平台的,而且平常只供应了源代码。

不过,近来libssh2 被发明整数溢出和越界读取破绽(CVE-2019-13115)。

然则,切勿惊惶!这不是openssh中的破绽,因而它不会影响我们天天都运用的ssh。其次,这不是libssh中的破绽,libssh是一个与libssh2不相关的C函数库,只不过供应与libssh2类似的功用。

该破绽只存在于libssh2 1.8.2及更早版本中,在版本1.9.0中已得到了修复。提议用户尽快升级到版本1.9.0,除此之外,我不知道有任何针对此破绽的减缓步伐。

该破绽会越界读取,能够致使进击者提议长途进击。当运用libssh2衔接到歹意SSH服务器时,该破绽就会被触发。溢出发作在Diffie Hellman密钥交流时期,这意味着在完成身份考证之前,该破绽能够在衔接历程的初期被触发。libssh2从歹意服务器吸收一个uint32_t,而且不对其举行边境搜检,然后libssh2从uint32_t指定的偏移量中读取内存。为此,我编写了一个观点考证破绽应用顺序,个中歹意SSH服务器会返回一个异常大的偏移值,这会致使libssh2崩溃并涌现分段毛病。然则,我以为只要经由精心设计的偏移量才能够会致使长途进击的发作,由于所读取的内存随后会返回到服务器。观点考证破绽应用顺序取决于堆规划,由于libssh2只是一个库,因而它将依据运用应用顺序而有所不同。

破绽的发明历程

2019年3月18日,Canonical公司的Chris Coulson研究员表露了libssh2 (CVE-2019-3855到CVE-2019-3863)中的9个破绽。这些破绽已在libssh2 1.8.1版本中得到了修复。当时,我注意到提交的修复顺序在LGTM上引入了几个新警报。这些警报里包括的代码以下:

if((p_len = _libssh2_get_c_string(&buf, &p)) < 0)
C

题目是_libssh2_get_c_string返回-1作为毛病代码,但p_len是无标记的,因而将疏忽毛病前提。事实证明,libssh2团队已在稍后的提交中修复了这些题目,如许我就能够依据完全的修复历程细致检察代码,看看它们是不是包括任何其他显著的破绽。很快,我就发明了以下这个实行得很蹩脚的边境搜检函数:

int _libssh2_check_length(struct string_buf *buf, size_t len)
{
    return ((int)(buf->dataptr - buf->data) <= (int)(buf->len - len)) ? 1 : 0;
}
C

这个函数的题目是,对int的强迫转换能够会溢出。左侧的转换是平安的,由于buf的字段是可托的值,然则右侧的转换是不平安的,由于len的值是不可托的。经由历程使len的值大于buf-> len + 0x80000000来建立一个观点考证破绽,就能够很轻易绕过此溢出搜检。 别的,该观点考证如今能够在GitHub上找到。

我厥后相识到(拜见下面的时间线),在版本1.8.2宣布以后,主开辟分支引入了_libssh2_check_length,因而在版本1.8.2中不存在这类易受进击的界线搜检破绽。不幸的是,1.8.2版却没有任何边境搜检,所以观点考证破绽依然能够事情。在1.8.2版本中,破绽的源位置是kexc:1675。不过由于p_len包括一个不受信托的值,因而对s的后续读取多是越界的。由于在1.8.2版本中不存在_libssh2_check_length,所以p_len的值无需大于0x80000000,就能够触发破绽。这意味着len的值越小,越轻易触发越界读取破绽,这意味着该破绽更有能够被用来完成长途进击。

包括负值的毛病码查询敕令会被明白成无标记

当我正在检察修复Chris Coulson发明的破绽的提交时,却意外埠注意到一个罕见的毛病模式,个中一个包括负值的毛病码查询敕令会被明白成无标记。这个毛病是变体剖析的抱负候选项,由于这是一个轻易犯的毛病,而且它没有被规范编译器正告捕捉。所以我编写了这个简朴的查询来查找破绽的每一个实例:

import cpp
import semmle.code.cpp.dataflow.DataFlow
import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis

from Function f, FunctionCall call, ReturnStmt ret, DataFlow::Node source, DataFlow::Node sink
where call.getTarget() = f
and ret.getEnclosingFunction() = f
and ret.getExpr().getValue().toInt() < 0
and source.asExpr() = call
and DataFlow::localFlow(source, sink)
and sink.asExpr().getFullyConverted().getType().getUnderlyingType().(IntegralType).isUnsigned()
and lowerBound(sink.asExpr()) < 0
select sink

这个查询的代码以下:

r_len = _libssh2_get_c_string(&buf, &r);
if(r_len <= 0)
    return -1;
C

查询查找偶然返回负整数常量的函数,比方,_libssh2_get_c_string在第773行实行此操纵。然后,它查找对该函数的挪用,该函数猎取返回值并将其转换为无标记范例。

极验发布全国首个图数据建模平台,“新引擎”助力企业告别AI“马车时代”

2019年7月11日,由极验主办的Graph Learning 创新大会暨极验2019图数据建模平台发布会在北京泰富酒店举行。本次大会邀请到203位行业内头部企业代表、媒体及嘉宾,一起就当下最火热的图神经网络展开了探讨与交流,并共同见证了全国首个自研图数据建模平台的首发时刻。 国内首个图数据建模平台——叠图 中国需要技术创新 这是一个产业智能化磅礴而来的时代,企业的发展与数据的联系愈发紧密,头条系的算法铸就了字节跳动的崛起,Deepmind则用AlphaGo 战胜李世石引爆机器智能的无限可能,阿里与华为分别推出AI芯片,底层支撑也将迎来变革。 而实现智能化的方法有很多种,在过去,企业通过深度

你能够在此处检察此查询当时找到的9个效果。我在2019年3月28日发送给libssh2团队的电子邮件中包括了该链接,他们已修复了所有这些毛病。

时间线

libssh2团队在收到我的报告后的几天内,就在GitHub上宣布了针对该破绽的修复顺序,但花了差不多3个月才宣布了新版本。

2019-03-28:我私自向libssh2团队泄漏破绽;

2019-03-29:libssh2团队发送开端复兴;

2019-04-05:libssh2团队修复了他们开辟分支上的毛病:08ef9b7,5929e26,b4289ee;

2019-05-08:我请求更新修补顺序什么时候宣布;

2019-05-09:libssh2团队回应说该破绽仅存在于开辟分支上,而且从未包括在发行版中;

2019-05-11:我通知libssh2团队我的PoC也适用于1.8.2版本;

2019-05-16:libssh2团队在1.8.2版本中讯问毛病的源位置;

2019-05-16:我在版本1.8.2中复兴了毛病的源位置;

2019-06-17:我正告libssh2团队,我们的90天表露停止日期将于2019-06-26到期;

2019-06-20:libssh2版本1.9.0宣布;

2019-06-30:该破绽被记为CVE-2019-13115;

原文地点: https://www.4hou.com/vulnerable/19177.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明libssh2被发明整数溢出和越界读取破绽(CVE-2019-13115)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

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