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

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服务器的配置和上面显示记录器确实被执行的数据包的影响。

所描述的错误是由于验证步骤与文件访问/系统命令操作不相邻造成的。这种逻辑错误很容易通过细微的代码更改引入,即使是经验丰富的软件工程师。这样的错误不能用局部术语来描述,所以要找到它们,就需要研究人员根据有趣的数据流路径考虑代码的不同部分及其功能。在JFrog,我们探索了几种自动化深入的方法二进制软件分析表单,以提供我们在安全上下文中评估完整固件映像的整体解决方案。

完全修复该漏洞需要更新Slinger组件,但是,遵循Slinger配置指南中详细介绍的安全预防措施将在许多情况下减少其影响。我们认为,遵守系统中所有组件的安全指南将对真实的攻击场景产生至关重要的影响,而对安全指南和标准的精确自动验证必须是嵌入式设备开发周期中的一个基本检查点。

上述漏洞已负责任地向黑莓披露,并迅速、专业地处理了这一问题。我们要感谢黑莓PSIRT团队的合作,并为供应商责任设定了高标准。该漏洞已使用CVSSv3 10发布CVE-2020-6932。有关详情,请参阅黑莓咨询页面

问题吗?想法吗?如有任何问题,请通过research@m.si-fil.com与我们联系安全漏洞

除了发现和负责任地披露漏洞作为我们日常活动的一部分外,JFrog安全研究团队还致力于增强软件安全性,使组织能够通过自动化安全分析发现漏洞。有关JFrog DevOps平台安全特性的更多信息和更新-点击这里