研究人员警告说,由于16个不同的URL解析库之间的不一致而导致的8个不同的安全漏洞可能导致各种Web应用程序拒绝服务(DoS)情况、信息泄露、和远程代码执行(RCE)。这些漏洞是在为各种语言编写的第三方Web包中发现的,并且与Log4Shell和其他软件供应链威胁一样,可能已被导入数百或数千个不同的Web应用程序和项目中。受影响的是Flask(用Python编写的微型Web框架)、Video.js(HTML5视频播放器)、Belledonne(免费VoIP和IP视频电话)、NagiosXI(网络和服务器监控)和Clearance(Ruby密码验证)。跳到问题摘要。了解URL解析混淆URL解析是将Web地址分解为其基础组件的过程,以便可以将流量正确路由到不同的链接或不同的服务器。通常在应用程序中导入各种编程语言可用的URL解析库来实现此功能。ClarotyTeam82Research和Synk的研究人员周一在一份分析报告中写道:“一个URL实际上是由五个不同的部分构成的:方案、权限、路径、查询和片段。”“每个组件都扮演着不同的角色,它决定了请求的协议、持有资源的主机、应该获取的确切资源等等。”根据综合分析,由于每个库执行解析活动的方式不同,可能会弹出安全漏洞。Team82和Synk研究了16个不同的URL解析库,包括:urllib(Python)、urllib3(Python)、rfc3986(Python),httptools(Python),curllib(cURL),Wget,Chrome(浏览器),Uri(.NET),URL(Java),URI(Java),parse_url(PHP),url(NodeJS),url-parse(NodeJS)、net/url(Go)、uri(Ruby)和URI(Perl)。他们在这些库解析组件的方式中发现了五类不一致:Scheme混淆:涉及丢失或Scheme格式错误的URL的混淆斜杠混淆:涉及包含不规则数量斜杠的URL的混淆带有斜杠(\)的URL编码数据混淆:涉及包含URL编码数据的URL混淆SchemeMix-ups:涉及在没有特定Scheme解析器的情况下解析属于Scheme的URL混淆两个主要的Web应用程序开发漏洞,这些不一致会创建易受攻击的代码块:使用多个解析器:无论是设计还是疏忽,开发人员有时会在他们的项目中使用多个URL解析库。由于某些库可能会以不同方式解析相同的URL,这可能会在代码中引入漏洞。规范不兼容:不同的解析库是根据不同的web标准或URL规范编写的,这会在设计上造成不一致,这也会导致漏洞,因为开发人员可能不熟悉URL规范之间的差异及其含义(例如,什么应检查或清洁)。作为一个真实的攻击场景的例子,斜杠混淆会导致服务器端请求伪造(SSRF)漏洞,可以用来实现RCE。研究人员解释说,不同的库处理斜线数量超过通常数量的URL(例如https:///www.google.com)的方式不同:其中一些会忽略多余的斜线,而另一些则将URL视为已解释为无主机.对于前者(这是大多数现代浏览器和cURL所采用的方法),接受带有错误数量的斜杠的格式错误的URL可能会导致SSRF,研究人员解释说:“[一个不忽略额外斜杠的库......将把这个[malformed]URL解析为具有空权限的URL(netloc),从而通过比较netloc(本例中的空字符串)与google.com的安全检查。但是,由于cURL额外的斜线被忽略,因此它将获取URL,从而绕过尝试的验证并导致SSRF漏洞。”根据Claroty的说法,URL混淆还负责绕过Log4Shell补丁,作为两个不同的URL解析器:一个用于验证URL,另一个用于获取URL。“根据每个解析器如何处理URL的片段部分(#),权限也会发生变化。""验证URL的主机是否被允许,使用Java的URI,它解析URL,提取主机,并检查主机是否在允许主机的白名单中。其实,如果我们用Java的URI解析这个URL,就会发现这个URL的主机号是127.0.0.1,被列入了白名单。但是,在某些操作系统(主要是macOS)和特定配置上,当JNDI查找进程获取此URL时,它不会尝试从127.0.0.1获取它,而是向127.0.0.1#.evilhost.com发出请求.这意味着虽然此恶意负载将绕过AllowedDaPost本地主机验证(由URI解析器完成),但它仍会尝试从远程位置获取类。“URL解析安全漏洞在他们的分析中,研究人员在第三方Web应用程序中发现了8个由URL解析混乱导致的高危漏洞。除了在不受支持的Flask版本中发现的漏洞外,他们说,所有这些漏洞都已被修补,因此开发人员应该使用更新的版本更新他们的应用程序:1.Flask-securityopenredirect(Python,CVE-2021-23385)2.Flask-security-tooopenredirect(Python,CVE-2021-32618)3.Flask-用户开放重定向(Python,CVE-2021-23401)4.Flask-unchained开放重定向(Python,CVE-2021-23393)5.Belledonne的SIP堆栈空指针间接引用(DoS)(C,CVE-2021-33056)6.Video.js跨站脚本(XSS)(JavaScript,CVE-2021-23414)7.NagiosXI开放重定向(PHP,CVE-2021-37352)8.清除开放重定向(Ruby,CVE-2021-23435)开放重定向漏洞很容易被利用,因为它们可用于欺骗、网络钓鱼和中间人攻击(MITM)。Web应用程序接受用户控制的输入,这发生在输入指定用户将在特定操作后重定向的URL时。例如,当用户登录网站时,他们可能会被重定向到恶意网站。研究人员解释说,开放重定向攻击通常会被验证阻止:“Web服务器验证给定的URL,并且只允许属于同一站点或受信任域列表的URL。“URL库混淆会干扰正确的身份验证,就像Clearance漏洞一样。研究人员指出,Clearance(Ruby的Rails框架中广泛使用的第三方插件,可实现简单安全的电子邮件和密码身份验证)中的功能下attack是“return_to”。这个函数在登录/注销过程之后调用,应该安全地将用户重定向到他们之前请求的页面。但是,如果可以说服目标点击具有以下语法的URL,它可以中断它下来:http://www.victim.com/////evil.com。研究人员解释说:“因为Rails忽略了URL中的多个斜杠,路径段完全到达Clearance(/////evil.com)并在那里解析。""由于URI.parse删除了两个斜杠,因此生成的URL为///evil.com。每当服务器将用户重定向到此URL///evil.com时,浏览器会将此网络路径相对引用转换为指向evil.com域(主机)的绝对http://evil.comURL。“BelledonneVoIP崩溃在Belledonne的Linphone中发现了一个更有趣的漏洞,这是一种免费的IP语音软电话、SIP客户端和音频和视频通话服务。根据分析,由于它处理SIP消息解析方式,它遭受方案混淆。研究人员解释说:“通过研究Belledone的URL解析功能,我们发现[一段]代码解析了to/fromSIP标头中的SIPURL。""Belledone将SIPURL解析为通用URL,并使用strcasecmp检查方案是SIP还是SIP,以及给定的URL是否是SIPURL。但是,他们解释说Belledonnegeneric_uri接受从不同URL组件创建的URL,而不需要存在特定组件。他们得出结论:“这意味着只包含路径而不包含URL方案的URL是有效的URL。”""使用此方法,我们提供的URL仅包含一个斜杠(/),导致URL的方案结果为NULL。然后,当Belledone使用strcasecmp时,它会比较NULL指针(因为没有提供方案),导致NULL指针取消引用并导致应用程序崩溃。该团队创建了一个概念验证利用代码,能够通过简单的恶意VoIP呼叫使任何远程用户的应用程序崩溃,“需要受攻击用户的零交互”。Team82和Synk研究人员指出,“可能会出现许多漏洞,从可导致远程代码执行的SSRF漏洞到可导致复杂网络钓鱼攻击的开放重定向漏洞。为了保护他们的应用程序,开发人员应使用尽可能少的解析器可能,他们说。“我们建议你完全避免使用URL解析器,通常这很容易做到,”研究人员说,“在微服务环境中传输解析后的URL。”他们指出:“如果微服务在不同的框架或编程语言,可能会使用不同的URL解析器。”“”为了避免这个问题,你可以简单地在前端微服务中解析URL,并以解析后的形式进一步传输。“了解与应用业务相关的解析器的差异逻辑。有时不可避免地要使用多个解析器,因此开发人员需要了解解析行为的差异。在解析之前始终规范化URL。始终确保应用程序删除多个正斜杠/反斜杠、空格和控制字符,以便在解析之前将URL恢复为正确的形式,请注明原文地址。
