SSD安全公告-QNAP QTS未经认证的远程代码执行漏洞

Credit to Author: SSD / Maor Schwartz| Date: Mon, 18 Dec 2017 08:04:57 +0000

Want to get paid for a vulnerability similar to this one?
Contact us at: sxsxdx@xbxexyxoxnxdxsxexcxuxrxixtxy.xcom
See our full scope at: https://blogs.securiteam.com/index.php/product_scope

漏洞概要
以下安全公告描述了QNAP QTS的一个内存损坏漏洞,成功利用该漏洞会造成QNAP QTS 4.3.x和4.2.x版本(包括4.3.3.0299)未经验证的远程代码执行。

威联通科技(QNAP Systems, Inc)专注于为企业,中小型企业,SOHO和家庭用户提供文件共享,虚拟化,存储管理和监控应用的网络解决方案。 QNAP QTS是标准的智能NAS操作系统,支持所有文件共享,存储,备份,虚拟化和多媒体QNAP设备。

漏洞提交者
一位安全研究者TRUEL IT(@truel_it)向 Beyond Security 的 SSD 报告了该漏洞

厂商响应
QNAP已被告知该漏洞,并回复:“我们已经确认这个问题与最近的另一份报告相同,并已经发布了CVE-2017-17033。

尽管这份报告是重复的,但我们仍然会在即将发布的安全公告中对两位报送者表示感谢。

同时,在即将发布的QTS 4.2.6和4.3.3版本中将修复该漏洞。”

CVE: CVE-2017-17033

漏洞详细信息
由于缺乏适当的边界检查,可以通过特制的HTTP请求溢出堆栈缓冲区并劫持控制流以实现任意代码执行。

authLogin.cgi负责显示来自Web界面的系统信息,并且包含在用户提供的输入进行无限制的sprintf调用中。

authLogin.cgi二进制文件,位于QTS文件系统的/home/httpd/cgibin/目录中,可通过请求端点/cgi-bin/sysinfoReq.cgi进行访问。
该二进制文件是QTS的一部分,并充当几个功能的包装器。

易受攻击的调用位于handle_qpkg()(0x1C680)函数中,该函数由handle_sysInfoReq()(0x1D398)调用,以显示当前系统信息(型号名称,固件版本,ecc)。

通过向sysinfoReq.cgi发送一个HTTP请求,handle_sysInfoReq()(0x1D398)函数被触发,并且根据提供的参数,可以处理不同的进程步骤。

如果提供了qpkg HTTP参数,则调用handle_qpkg()(0x1C680)函数。

handle_qpkg()函数不会验证用户提供的lang HTTP参数值。

正如上面的代码路径所示,未经身份验证的攻击者可以为所述参数提供任意大小的值,然后通过sprintf()函数调用将其连接到静态大小(堆栈)缓冲区上的现有字符串。

漏洞证明
通过发送以下POST请求,我们将使堆栈溢出并用XXXX覆盖qpkg_all_info缓冲区的值,并用YYYY覆盖handle_qpkg()参数返回地址的值,从而造成崩溃。

产生以下崩溃:

Print Friendly, PDF & Email

https://blogs.securiteam.com/index.php/feed