在审查源代码时,我重点关注了 OpenClaw 如何处理 HTTP 请求——特别是负责发起服务端 fetch 调用的 fetchWithSsrFGuard() 函数。
我注意到有些不对劲。
当一个请求跟随跨源重定向(即服务器返回指向不同域名的 3xx 响应)时,OpenClaw 本应在将请求转发到新目标之前剥离敏感请求头。它确实这么做了——但只针对一个狭窄的硬编码黑名单:
Authorization, Proxy-Authorization, Cookie, Cookie2
问题在于?这个列表并不完整。
自定义授权请求头,如 X-Api-Key、Private-Token,或任何其他开发者常用的 bearer 风格请求头——这些都没有被剥离。它们被原样转发到了重定向目标。
这意味着:如果攻击者能够控制或影响重定向的指向,他们就能收到本不该属于他们的敏感凭据。
想象一下,你的应用使用 OpenClaw 并携带自定义的 X-Api-Key 请求头调用内部 API。一个恶意服务器响应了一个指向攻击者控制 URL 的重定向。OpenClaw 跟随了重定向——并顺带把你的 API 密钥一起转发了过去。
游戏结束。你的凭据现在落入了他人之手。
CVSS 3.1 评分:9.3(严重)
维护者用安全请求头白名单取代了黑名单方案。新逻辑不再试图阻止已知的恶意请求头,而是只允许已知的安全请求头在跨源重定向时通过——例如内容协商和缓存验证器之类的请求头。其他一切默认都会被剥离。
这才是正确的做法。基于黑名单的安全机制是脆弱的;基于白名单的安全机制才是稳健的。
参考资料
46715371b0612a6f9114dffd1466941ac476cef5<= 2026.3.2>= 2026.3.7请立即更新到 >= 2026.3.7。
如果你使用了自定义授权请求头(如 X-Api-Key 或 Private-Token),并且你之前使用的是旧版本,请将这些凭据视为可能已泄露,并立即轮换它们。