新的“ParseThru”参数走私漏洞影响基于 Golang 的应用程序
安全研究人员发现了一个名为ParseThru的新漏洞,该漏洞会影响基于 Golang 的应用程序,该漏洞可能被滥用以未经授权访问基于云的应用程序。
以色列网络安全公司 Oxeye 在与 The Hacker News 分享的一份报告中说:“由于使用了该语言内置的不安全 URL 解析方法,新发现的漏洞允许攻击者在某些条件下绕过验证。”
这个问题的核心在于,由于引入了在“net/url”库中实现的 Golang 的 URL 解析逻辑的更改而导致的不一致。
虽然 1.17 之前的编程语言版本将分号视为有效的查询分隔符(例如,example.com?a=1;b=2&c=3),但此行为已被修改为在找到包含以下内容的查询字符串时引发错误一个分号。
根据去年 8 月发布的 1.17 版本的发行说明,“net/url 和 net/http 包用于接受“;”(分号)作为 URL 查询中的设置分隔符,以及“&”(与号) 。
“现在,带有非百分比编码分号的设置被拒绝,当在请求 URL 中遇到一个时,net/http 服务器将向‘Server.ErrorLog’记录一个警告。”
当基于 1.17 或更高版本构建的基于 Golang 的公共 API 与运行早期版本的后端服务通信时,就会出现问题,从而导致恶意行为者可以走私包含查询参数的请求,否则这些请求将被拒绝。
简而言之,这个想法是发送在查询字符串中包含分号的特制请求,面向用户的 Golang API 将忽略该分号,但由内部服务处理。
反过来,由于负责获取已解析查询字符串的方法之一会默默地丢弃返回的错误消息,这反过来又成为可能。
Oxeye 表示,它在 Harbour、Traefik 和 Skipper 等开源项目中发现了几个 ParseThru 实例,这使得绕过现有的验证并执行未经授权的操作成为可能。在向各自的供应商负责任地披露后,这些问题已得到解决。
这不是 URL 解析第一次提出安全问题。今年 1 月初,Claroty 和 Snyk披露了使用 C、JavaScript、PHP、Python 和 Ruby 语言编写的第三方库中多达 8 个缺陷,这些缺陷源于 URL 解析中的混淆。
