SAP在10月13日的安全公告中表示,SAP的Cloud SDK for Python中的一个漏洞可能会将应用程序的OAuth2客户端凭证发送到攻击者控制的服务器。该漏洞影响使用SDK的SAP Business Technology Platform (BTP)上的多租户应用程序,SDK是SAP官方的BTP服务Python客户端。攻击者必须能够控制租户子域名,即应用程序传递给SDK以指明请求属于哪个租户的名称。
该漏洞被追踪为CVE-2026-89111,并且SAP的CVSS评分为10.0(满分10分)。公告中指出,版本0.45.2(于8月21日发布)是修复版本。
SDK使用应用程序的客户端凭证(客户端ID和客户端密钥)处理这些服务的身份验证。版本0.45.2增加了一个检查,拒绝任何不是简单名称的租户子域名。《黑客新闻》发现,后续的六个版本在每种情况下都没有应用该检查。版本0.53.0至0.55.0(在9月10日至9月18日之间发布)在应用程序调用SDK的目标服务模块时跳过了该检查。
版本0.53.0将该模块移至请求令牌的新共享代码中,而该代码未包含该检查。版本0.55.1在9月18日将其添加到此处。
版本0.55.1的发布说明中提到,传递包含URL分隔符的租户子域名“现在会立即引发ValueError,而不是默默地将凭证路由到攻击者控制的端点”。
《黑客新闻》在10月13日对SAP的检查进行了测试,针对从0.45.1到0.58.4的每个版本的源代码以及三个0.36版本。六个版本在SAP用版本0.55.1添加的11个测试中失败了9个。该版本及其之后的11个版本通过了所有11个测试。
截至10月13日,公告中没有列出0.45.2以上的受影响版本。公告和发布说明均未说明这六个版本是否属于CVE-2026-89111。
两个较旧的0.36版本也缺少该检查。版本0.36.1和0.36.2分别于9月4日和9月10日发布,均在8月的修复之后,并且未通过SAP为其编写的测试。两者都在公告所列的低于0.45.2的版本范围内。
发布版本
租户子域名检查
基础
低于0.45.2,包括0.36.1和0.36.2
缺失
SAP公告。《黑客新闻》对0.36.0、0.36.1、0.36.2和0.45.1的测试。
0.45.2至0.52.2
存在
《黑客新闻》对所有18个版本的测试。
0.53.0至0.55.0
在目标调用中缺失。在0.55.0的文档管理服务调用中也缺失。
SAP的0.55.1发布说明。《黑客新闻》对所有6个版本的测试。
0.55.1至0.58.4
存在
《黑客新闻》对所有12个版本的测试。
该怎么办
版本0.45.2至0.52.2和0.55.1至0.58.4包含该检查。版本0.58.4是10月13日时在PyPI(Python包索引)上的最新发布。
在0.36版本中升级不会添加该检查。其三个版本均不包含该检查。
SAP在公告中表示,尚未升级的应用程序可以在将每个租户子域名传递给SDK之前,先与其注册的租户列表进行比较。
该漏洞仅在应用程序将租户子域名传递给SDK时才重要。8月的修复涵盖了三个模块:代理网关、目标和文档管理服务。
公告未说明运行没有检查的版本的应用程序是否应更换其客户端凭证。
漏洞如何工作
当应用程序传递租户子域名时,SDK会请求该租户的访问令牌。为此,它从应用程序的配置中获取令牌URL,并用租户子域名替换其中的一部分。
没有检查的版本使用了它们所提供的任何值。然后,SDK将应用程序的客户端ID和客户端密钥发送到生成的URL以请求令牌。
根据SAP的说法,控制租户子域名的攻击者可以将该请求指向他们自己的服务器。
该检查仅接受由字母、数字和连字符组成的单个名称,长度最多为63个字符。任何其他值都会以错误停止请求。
SAP将该漏洞标记为服务器端请求伪造(SSRF),这是一种弱点,服务器可能被迫向其不打算的目标发送请求。
攻击者可以使用凭证做什么取决于应用程序的客户端被允许做什么。公告未说明。
8月修复,10月披露
未检查的代码自SDK在3月16日首次发布到PyPI以来就存在。
8月的发布说明在“错误修复”下列出了该修复,并未提及安全性。“之前,无效值被默默地用于构造格式错误的URL,”说明中写道。
公告在53天后发布。它将该漏洞的报告归功于一位名为SunandM的GitHub用户,并未报告任何攻击。
觉得这篇文章有趣吗?请在Google News、Twitter和LinkedIn上关注我们,以阅读更多我们发布的独家内容。