CVE-2019-17498: libssh2整数溢出漏洞

ang010ela 新闻 2019年10月21日发布
Favorite收藏

导语:文中研究人员分析了libssh2整数溢出漏洞。

研究人员发现libssh2中存在漏洞,但是该漏洞并不是位于openssh中,所以不影响ssh的使用。Libssh2是一个客户端C语言库,可以让应用连接到SSH服务器。但漏洞也并不位于libssh中,libssh值是一个提供与libssh2类似功能的不相关的C函数库。

该漏洞位于libssh2 v1.9.0及之前版本中,截至目前,该bug已经在master分支修复,但含有补丁的官方发布版本还没有正式发布。

该漏洞是一个越界读漏洞,可能会导致DoS或远程信息泄露。当libssh2被用于连接恶意SSH服务器时该漏洞就会被出发。当SSH服务器发送disconnect消息时,就会发生溢出。也就是说该漏洞是在认证完成之前的连接阶段的早期被触发的。

触发漏洞

该漏洞是源位置是packet.c:480

if(message_len < datalen-13) {

datalen的值是不可信的,因为它是由远程SSH服务器控制的。如果datalen == 11,那么减就会溢出,message_len边界检查也就是无效的。message_len是远程SSH服务器控制的32位的无符号整数,所以会在第485行引发越界读:

language_len =
    _libssh2_ntohu32(data + 9 + message_len);

越界读只会引发segmentation fault(分段错误),但有可能在调用499行的LIBSSH2_DISCONNECT时引发其他伤害:

if(session->ssh_msg_disconnect) {
    LIBSSH2_DISCONNECT(session, reason, message,
                       message_len, language, language_len);}

这取决于libssh2库如何使用,因为session->ssh_msg_disconnect是默认为空的回调函数,但库的用户可以通过调用libssh2_session_callback_set对其进行设置。

研究人员编写了一个POC漏洞利用,其中恶意SSH服务器会返回一个datalen == 11,message_len == 0x41414141的disconnect消息,导致libssh2出现分段错误。

PoC见:https://github.com/kevinbackhouse/SecurityExploits/tree/8cbdbbe6363510f7d9ceec685373da12e6fc752d/libssh2/out_of_bounds_read_disconnect_CVE-2019-17498

本文翻译自:https://blog.semmle.com/libssh2-integer-overflow-CVE-2019-17498/如若转载,请注明原文地址: https://www.4hou.com/info/news/21007.html
点赞 1
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论