谷歌地图API密钥未授权利用造成的危害

iso60001  282天前

22.jpg

现如今各个网络服务都免不了要调用外部的API,例如谷歌地图API就是这样一个知名的付费服务,它可让其他应用从谷歌地图的数据库中搜索地图数据,嵌入自己的应用中。

虽然它的部分服务在2018年初是免费的,但之后规划有所改变,所有API都需要配合API密钥或客户端id来使用。

针对这些API密钥,系统具有一些安全配置可阻止外部恶意者用户去非法使用它。开发人员可在安全策略中配置这些安全措施。虽然这些API密钥都被设计为公共API密钥,并且不会对客户数据机密性/完整性产生任何影响,但仍然需某些安全设置来阻止未经授权的使用。以下是相关配置的列表:

  • Referrers:通过定义HTTP请求的Referrer头来限制应用。可使用通配符规定多个域名/路径,例如*.example.com/*。但这里也易存在设置失误,因为如果是*example.comexample.com*,则攻击者可以通过ozguralpexample.comexample.com.ozguralp.com进行绕过。

  • IP地址:如果密钥只用于一个应用,比如服务器到端的解决方案,那么这个配置可能比较适合。

  • Android/iOS应用:如果你打算通过移动应用使用密钥,那这个设置也适用。

不过,客户端id比API密钥更安全,因为它在请求中使用一个额外的signature参数,是由应用后端通过私有签名密钥产生的,几乎不可能存在未授权缺陷。

影响

如果某些API密钥缺少对应的安全配置,则以下场景可能被攻击者利用:

  • 例如公司对API花费没有任何限制,则使用API服务可能会超出每月限额,又或者未经授权使用本服务产生额外费用,对公司造成经济损失。

  • 即使不存在费用问题,也有可能存在DoS缺陷。例如某些高度依赖地图的应用(Uber和Booking)可能会因地图而影响到应用的正常运行。

更多的影响

在分析“谷歌云控制台”中的这些安全设置时,我注意到这个API密钥也可以在其他谷歌服务中使用,比如BigQuery、Cloud、计算引擎和StackDriver。这对我来说是一个新发现,我现在正对其中可能蕴含的安全风险进行研究,一旦有足够的成果,就可能是另一篇新文章。

33.jpg

不同场景

虽然我在上面提到客户端id机制是足够安全的,但是在某些情况下,由于设置的问题,仍然存在风险。

Synack的一个私有程序中,应用向google-signature.json中的后端发出请求,请求的参数含有requestUrl,包括值/maps/api/streetview?size=400x400&location=40,40&client=<redacted>。而在响应中,它返回一个带有被签名的signature参数的谷歌地图API的URL。

44.jpg

由于这个特性和客户端的输入有关,所以它可能被恶意地在攻击者自己的系统中使用。这个漏洞大约为我带来了200美元的奖励。

不同的漏洞奖励平台的成果

最近,我注意到这种漏洞在几个不同的平台/项目上被报告,因此可以说是一个众所周知的漏洞。当我查看我最旧的报告时,发现是在两年前,可以说我是首批报告这种漏洞的人。以下我根据不同的平台的数据统计了该漏洞的情况。

  • Synack: 47份报告,33份被接受,总计约1万奖金。如果没有重复或可以通过其他应用利用,Synack也接受其他地图的漏洞,如Bing,Baidu,Mapbox等。

  • HackerOne:12个被报告,5个被接受,总计约1000奖励。所有被接受的项目都由客户自己管理,其余6到7份由HackerOne员工管理。我认为他们缺乏对这类漏洞的理解,后续很少有积极回复。

  • Bugcrowd:2个报告,1个被接受,1个重复,总共500奖金。看起来他们也接受了这种漏洞类型。

  • Detectify:有人早先提交了我所提及的漏洞,预计奖金至少3000。

  • Intigriti:仅在一个特殊场景看到1个报告,1个接受。看来他们也接受了这类漏洞。

脚本

我编写了一个脚本,该脚本会利用提供的API密钥检查所有的谷歌地图API端点,查看是否存在漏洞。不过和javascript有关的API并不会检查,因为这无法用python脚本实现。你可以参照说明手动实现。

另外,在使用脚本时,如果遇到任何错误或误报,请告诉我,因为这只是beta版,没有经过大规模测试。

链接:https://github.com/ozguralp/gmapsapiscanner/

更多建议

对于此类漏洞的补救,既可以参考以下措施一起进行,也可单独进行。

  • 正确使用IP、Referrer或应用限制。

  • 使用基于客户端的身份验证方案,而不是API密钥。

  • 禁用未被使用的API。

由于这是我的第一篇博客文章,你可通过Twitter给我留言/反馈!

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@ozguralp/unauthorized-google-maps-api-key-usage-cases-and-why-you-need-to-care-1ccb28bf21e

最新评论

昵称
邮箱
提交评论