欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

对 libssh2 整数溢出漏洞 (CVE-2019-17498)的分析

来源:本站整理 作者:佚名 时间:2019-11-07 TAG: 我要投稿
     source.asExpr().(FunctionCall).getTarget().getName().matches("_libssh2_ntoh%")
   }
 
   override predicate isSink(DataFlow::Node sink) {
     convertedExprMightOverflowNegatively(sink.asExpr()) and
     exists(RelationalOperation cmp | cmp.getAnOperand() = sink.asExpr())
   }
 
   override predicate isAdditionalFlowStep(DataFlow::Node source,
                                           DataFlow::Node target) {
     exists(Field f |
       source.asExpr() = f.getAnAssignedValue() and
       target.asExpr() = f.getAnAccess())
     or
     target.asExpr().(AddExpr).getAnOperand() = source.asExpr()
     or
     target.asExpr().(SubExpr).getAnOperand() = source.asExpr()
   }
 }
 
 from Config cfg, DataFlow::PathNode source, DataFlow::PathNode sink
 where cfg.hasFlowPath(source, sink)
 select sink, source, sink,
   "possible integer overflow of tainted expression in bounds check"
该查询与我的同事FermínSerna针对U-Boot NFS漏洞编写的查询非常相似。该isSource可以找出_libssh2_ntohu32和_libssh2_ntohu64,用于网络主机字节顺序转换。它查找包含可能会溢出的子表达式的比较操作。例如,message_len
0x05  缓解措施
这不是openssh中的漏洞,因此它不会影响ssh(https://linux.die.net/man/1/ssh)。 libssh2是客户端C库,使应用程序可以连接到SSH服务器。其次,这不是libssh的漏洞,后者是一个不相关的C库,提供与libssh2类似的功能。
该漏洞存在于libssh2 1.8.2和更早版本中,已在libssh2版本1.9.0中得到修复。除了升级到1.9.0版之外,没有任何缓解此漏洞的方法。
该漏洞是越界读取,可能导致远程信息泄露。使用libssh2连接到恶意SSH服务器时将触发该事件。溢出发生在Diffie Hellman密钥交换期间,可以在完成身份验证之前在连接过程的早期触发漏洞。libssh2接收uint32_t来自恶意服务器的请求,并且对此没有任何限制。然后,libssh2从所指定的偏移量中读取uint32_t内存。我写了一个漏洞PoC,其中恶意的SSH服务器返回非常大的偏移值,这会导致libssh2因分段错误而崩溃。但是,我认为,更仔细选择的偏移量可能会导致信息泄露,因为读取的内存随后会返回给服务器。可利用性将取决于堆栈布局,由于libssh2只是一个库,因此将根据使用该库的应用程序而有所不同。
 

上一页  [1] [2] 

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载