跟踪数据:QNX Slinger中的隐藏目录遍历漏洞

通过我们正在进行的设备安全分析,我们经常发现并负责任地发现连接设备中使用的封闭和开源软件组件中的新的未知漏洞。在这篇博文中,我们讨论了一个目录遍历漏洞,该漏洞是我们最近在分析设备固件时发现的黑莓QNX操作系统.
首先,简要介绍一下目录遍历漏洞的背景知识:目录遍历是一种利用设备中合法文件系统访问进程的攻击方法。如果攻击者可以在请求访问时制作文件路径输入,从而获得对敏感文件和目录的意外访问,则存在漏洞。此类攻击可能导致设备上的敏感应用程序和数据泄露或被盗,甚至允许攻击者通过添加恶意代码来修改设备的行为。
在连接的嵌入式设备中常见的一些网络服务,例如简单的HTTP和FTP服务器,可以想象为将传入的网络数据包转换为文件访问操作(图1)。在这种情况下,从网络发送到设备的一些数据(可能是恶意的)流向文件操作,并被解释为要读取的文件路径。
为了检测此类web服务中的目录遍历漏洞,我们遵循对接收到的网络数据包中的数据执行操作的路径,并将其划分为逻辑部分。该路径必须包含代码段,这些代码段对输入进行消毒,并强制执行有关可读取文件的允许位置的规则。我们可以尝试自动定位这些代码段,如果没有找到它们或观察到它们被不正确地实现,这可能被视为表明程序中存在潜在的漏洞。

图1:信息流的代码段。a: Naïve程序,其中收到的文件名在使用前未经过验证。b:预期的模式,接收到的文件名在使用之前被验证
在准备我们即将到来的黑莓QNX的支持时,一个基于posix兼容的微内核的操作系统(OS)广泛应用于汽车工业我们遇到了QNX Slinger,它是一个简单的HTTP服务器,包含在旧的操作系统版本中(直到6.6)。我们使用上面描述的过程对其进行了分析,发现数据流与预期的模式(图2)有些不同。从网络接收到数据后,要访问的文件名确实经过了消毒,以消除包含“/..”的可能性。并防止访问指定的HTML内容文件夹以外的位置。然而,在文件名被清理之后,它会经历另一个操作——URI解码。

图2:在QNX Slinger 1.0中观察到的数据包接收和文件访问之间的数据流。
虽然这两个操作之间的顺序可能看起来无关紧要,并且很容易被意外更改,但它具有重要的安全后果。这个流程引入了插入“/..”的可能性。通过在数据包中使用其编码当量(" /.%2e/ ")将/ "插入文件名。由于在清理操作中不考虑编码版本,因此攻击者可以使用它来执行目录遍历,转义指定的HTML目录并读取系统中的其他文件,如图3所示。

图3:使用/进行简单的目录遍历。%2e/代替/…/允许从文件系统中获取任意文件。
此外,由于Slinger具有CGI功能,因此可以使用相同的漏洞远程执行系统上的程序,通过包含“/”来从指定的CGI脚本目录转义。%2e/ ",以上述方式执行的脚本的名称。在这种情况下,文件名中的“/”字符将被解释为脚本名称及其参数之间的分隔符,这将干扰攻击者沿着目录树向下查找的能力。然而,在脚本名称和参数之间执行分离的段也位于解码阶段之前,允许攻击者使用“%2f”来访问文件系统中的任何位置。幸运的是,在打开监听套接字后,Slinger以最小权限(用户id -2)运行,这限制了此漏洞的影响。尽管如此,仍然可以执行一些操作。在下图中,您可以看到我们如何使用我们选择的参数执行/usr/sbin/logger,结果系统的syslog确实更新了(图4)。


图4:演示远程代码执行。上图:单个TCP数据包,包含从~/cgi-bin到/usr/sbin/logger的目录遍历,使用“%2f”而不是“/”和“%2e”而不是“。”进行编码。下图:slinger服务器的配置和上面显示记录器确实执行的数据包的影响。
所描述的错误是由于验证步骤不与文件访问/系统命令操作相邻。这种逻辑错误很容易通过细微的代码更改引入,即使是由经验丰富的软件工程师。这样的bug不能用局部术语来描述,所以找到它们需要允许研究人员沿着有趣的数据流路径考虑代码的不同部分及其功能的方法。在JFrog,我们探索了几种实现自动化深度的方法二进制软件分析形式,以提供我们在安全上下文中评估完整固件映像的整体解决方案。
完全修复漏洞需要更新Slinger组件,但是,遵循Slinger配置指南中详细的安全预防措施将在许多情况下减少其影响。我们相信,遵守系统上所有组件的安全指南将对现实世界的攻击场景产生至关重要的影响,并且对安全指南和标准的精确自动验证必须是嵌入式设备开发周期中的重要检查点。
上述漏洞已被负责任地披露给黑莓,黑莓迅速和专业地处理了这个问题。我们要感谢黑莓PSIRT团队的合作,感谢他们为供应商责任制定了高标准。该漏洞已发布CVE-2020-6932,带有CVSSv3 10。更多详情,请参阅黑莓咨询页面.
问题吗?想法吗?如有任何疑问,请致电research@www.si-fil.com与我们联系安全漏洞.
除了发现并负责任地披露漏洞作为我们日常活动的一部分之外,JFrog安全研究团队还通过授权组织通过自动安全分析发现漏洞来增强软件安全性。有关JFrog DevOps平台安全特性的更多信息和更新-点击这里.