内容提要
谷歌DevSite基础设施存在严重漏洞:OAuth客户端密钥被复用为Flask会话签名密钥,且会话数据使用不安全的pickle反序列化。攻击者可伪造会话并在服务器执行Python代码,影响七个域名。研究员Köck报告后,谷歌评为最高S0级,奖励9万美元,但耗时两月才修复。
延伸解读
漏洞利用链的三个关键错误
该漏洞的利用依赖于三个错误同时存在:OAuth客户端密钥被暴露在Flask会话cookie中、同一密钥被复用为会话签名密钥、以及使用不安全的pickle反序列化会话数据。攻击者只需获取密钥,即可伪造有效cookie并执行任意Python代码。修复其中任一错误都能阻断攻击链,这提醒开发者应避免密钥复用,并使用安全的序列化格式。
修复延迟与未解疑问
谷歌在8月6日收到报告,次日确认,8月27日批准赏金,但直到10月7日才部署修复,耗时约两个月。谷歌未解释延迟原因,也未说明是否采取了临时缓解措施。此外,修复细节不明:两个签名密钥是否都已轮换、现有会话是否失效、是否有利用证据,均未公开。这凸显了即使高危漏洞,修复过程也可能存在不透明和滞后。
潜在影响与未验证风险
研究员仅验证了在三个域名上执行代码,但伪造会话在全部七个域名上被接受。更严重的潜在风险在于,内部App Engine应用可能访问谷歌内部服务通信系统Stubby,从而扩大攻击面。此外,攻击者可能篡改开发者文档,替换安装命令或下载链接,形成供应链攻击。但这些风险均未被实际测试,谷歌也未披露进程权限,因此完整影响范围仍属未知。
Q&A
谷歌DevSite漏洞的具体技术细节是什么?
漏洞涉及三个关键错误:OAuth客户端密钥被复用为Flask会话签名密钥,且会话数据使用不安全的pickle反序列化。攻击者可以伪造会话并在服务器上执行Python代码。
这个漏洞影响了哪些谷歌域名?
漏洞影响了七个域名,包括developers.google.com、docs.partner.android.com和web.dev等。这些域名依赖两个不同的签名密钥。
谷歌为这个漏洞支付了多少奖金?
谷歌支付了9万美元奖金,包括7.5万美元的基础奖金(针对S0级RCE漏洞)和1.2倍的报告质量乘数。
漏洞从报告到修复用了多长时间?
漏洞于8月6日报告,谷歌次日接受,8月27日批准奖金,但直到10月7日才部署修复,耗时约两个月。
攻击者利用这个漏洞能做什么?
攻击者可以伪造会话并在服务器上执行Python代码,可能访问内部服务如Stubby,甚至修改开发者文档以进行供应链攻击,但具体影响范围未完全证实。
研究员是如何发现并验证这个漏洞的?
研究员Simon Köck发现OAuth客户端密钥被复用为会话签名密钥,通过离线重现cookie签名伪造会话,并使用Python sleep载荷验证了代码执行。