本文分享的Writeup是作者在做Keybase.io的漏洞众测中发现的SOP(同源策略)绕过漏洞,由于Keybase.io在用的多个API端点都启用了CORS(跨域资源共享)机制,这种缓解同源策略的机制某种程度上克服了同源策略的严格限制,可以让不同域服务器间实现交互请求。而作者在测试中发现了Keybase的CORS策略错误配置,利用这种缺陷,可以操纵浏览器缓存获取用户敏感数据信息。一起来看看。

Keybase 是一个开源的跨平台即时通讯工具,在 PC 设备上支持 macOS、Linux 和 Windows 平台,并提供 Chrome/Firefox 浏览器扩展。此外还提供 iOS 和 Android 版本。和众多 IM 工具相比,Keybase 最吸引人的地方在于免费使用且不会受到任何广告骚扰,最重要的是它还是一个开源项目。

在安全性和隐私方面,Keybase 采用了端到端的加密方式,承诺会为每个用户的群组、文件和聊天等数据提供安全保护。如果这些数据上传到云中,也会进行加密处理。

漏洞前言

Keybase在当前用户向其他用户发送加密消息时,可以让当前用户通过一个API接口去查找其他Keybase用户,在该接口中提供了加密发送消息时所需的,如公钥等其他Keybase用户公共信息。这听起来貌似是安全的,是吧?

该API接口的CORS(跨域资源共享)策略配置如下:

Access-Control-Allow-Origin: *

Access-Control-Allow-Methods: GET

Access-Control-Allow-Headers: Content-Type, Authorization, Content-Length, X-Requested-With

Access-Control-Allow-Credentials: false

在了解这个CORS配置问题之前,我们先来厘清几个重要的知识点:

1、Access-Control-Allow-Origin中的星号“*”说明,任意外部域名都能与该API进行交互,执行跨域的请求调用;

2、Access-Control-Allow-Credentials中的“false”说明, 这里可能出于安全考虑,服务器不允许用户在跨域请求中包含代表身份信息的Cookie。此处Access-Control-Allow-Headers暴露的用户认证头信息和接下来要讲的漏洞关系不大,因为在查询上述API接口中用不到。

漏洞情况

自然地,由于上述那个可查询的API接口是公共的,所以在进行跨域请求时无需携带防御CSRF(跨站请求伪造)的token信息,因为用户在使用Keybase.io时是经过身份验证的,且他的会话信息存储在了Cookie中,只有一些非常敏感的API接口会要求在请求头中携带用户认证头token。

后来我发现,如果在消息加密验证和发送环节,用上述那个查找其他Keybase用户的API来查找我自己,哪怕输入我名字中的一个字母,搜索结果中就会匹配到我的一些账户信息,其中竟然包含了我的一些敏感信息,如:

邮箱地址

我使用和剩余的邀请码数量

计费信息

上一次登录的时间戳、邮件形式的时间/日期验证码

TripleDes加密的PGP私钥

但是,我并没有私钥存储在Keybase上啊,之后我才了解到这是Keybase的在2015到2016年的一个遗留功能,现在已经不再实施。

经测试,一旦我在上述API请求中Cookie信息被删除,我的个人敏感信息也不会再返回显示。但是,我在服务端对该API的响应消息中发现了一个名为 ‘Etag’ 的消息头,这是一个浏览器缓存标记头,代表客户端请求资源未发生变化,那么浏览器就可以从用户的缓存内容中去取出然后响应给用户。

Payload与漏洞利用

我想起Twitter用户@Bitk_曾用过一个技巧,那就是用javascript的fetch API方法去强制从浏览器缓存中直接发起一个跨域请求,而恰巧 Keybase 在这里未曾对服务端响应头部署过任何缓存控制头(Cache-Control)措施,于是,我就在本地构造了如下的Payload

    

如果上述Payload请求能成功执行,可能就会返回响应一些Keybase的缓存信息,基于此,我执行了一个身份验证请求,最终有效地返回了与我账户相关的一些个人敏感信息。如下:

为了确认Payload是否被成功执行,从下图的浏览器请求信息中可以看到,fetch方法直接从浏览器缓存中读取了我的身份信息。

漏洞上报及处理进程

2019.12.19   漏洞初报

2019.12.19   两小时后,Keybase在响应消息中中加入了‘Cache-Control: no-store’

2019.12.24   Keybase奖励了$1,500 公布漏洞

*参考来源:enumerated,clouds 编译整理,转载请注明来自 FreeBuf.COM

精彩推荐

同源策略禁止读取位于_用浏览器缓存绕过同源策略(SOP)限制相关推荐

  1. 已拦截跨源请求:同源策略禁止读取位于XXXXXXXXXXXXXXXX/demo_test.txt 的远程资源。(原因:CORS 请求不是 http)

    完整问题复现如下: 已拦截跨源请求:同源策略禁止读取位于XXXXXXXXXXXXXXXX/demo_test.txt 的远程资源.(原因:CORS 请求不是 http) 原始代码index.html在 ...

  2. 已拦截跨源请求:同源策略禁止读取位于 http:**** 的远程资源。(原因:CORS 头缺少 ‘Access-Control-A

    报错: Access to fetch at 'https://www.baidu.com/' from origin 'http://www.baidu.com' has been blocked ...

  3. 已阻止跨源请求:同源策略禁止读取位于

    解决方法--由于我的是PHP项目,在第二个页面/方法中,就是被请求的方法加入如下代码: Header("Access-Control-Allow-Origin: * "); Hea ...

  4. 已拦截跨源请求:同源策略禁止读取位于...的远程资源。(原因:CORS 请求未能成功)。

    已拦截跨源请求:同源策略禁止读取位于 http://192.168.43.207:8080/manager/login?name=hao&password=111 的远程资源.(原因:CORS ...

  5. 已拦截跨源请求:同源策略禁止读取位于 http://localhost:8202/admin/cmn/dict/findChildData/1 的远程资源。(原因:CORS 头缺少 ‘Access-C

    可能1: 这是一个CORS跨域访问错误,大概意思是被服务器端同源策略拦截导致,因为项目是前后端分离开发,所以服务器会判断前端属于跨域请求. (1) 在后端controller接口上添加注解: @Cro ...

  6. vue项目中已拦截跨源请求:同源策略禁止读取位于....(原因:CORS 请求未能成功)解决方案

    手动给Global.asax配置,添加如下方法 protected void Application_BeginRequest(object sender, EventArgs e){System.W ...

  7. python 系统策略禁止这个安装_电脑无法安装软件提示设置了系统策略禁止此项安装怎么办?...

    Win7系统安装软件提示系统管理员设置系统策略禁止此项安装怎么办?最近有用户在安装office2003时,就遇到了提示禁止此项安装的问题,那么电脑不能安装某些软件该如何解决呢?请看下文介绍. 解决方法 ...

  8. 计算机上策略禁止用户安装,教您系统管理员设置了系统策略禁止进行此安装怎么解决...

    用户常常会根据自己的需要在电脑系统中安装一些自己所需要的软件,有用户在安装软件的时候被禁止了,提示"系统管理员设置了系统策略,禁止进行此安装",这样的好处是可以防止他人恶意安装软件 ...

  9. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

最新文章

  1. 【opencv】(3) 图像滤波:均值、方框、中值、高斯
  2. ae万能弹性表达式_AE脚本精品表达式合集效果库 iExpressions 3.1.006【资源分享1453】...
  3. VC++实现获取网络时间
  4. 4.8地铁查询开发进度
  5. java 调用 ictclas50_1-Ictclas50分词系统ForJava
  6. TCP的定时器系列 — 超时重传定时器(有图有代码有真相!!!)
  7. 检测非法键盘hook_反越狱检测解读
  8. 订餐系统-第一个用NodeJs实现的项目
  9. C++--第12课 - 操作符重载 - 上
  10. c++ overload
  11. 由零开始学习小程序架构
  12. 马哥教育N63期-第一周作业
  13. 全国2013年10月考试《行政组织理论》试题和答案
  14. Stylized NeRF 水记(NeRF的风格化)
  15. html5教程渐变效果,科技常识:html5教程实现Photoshop渐变色效果
  16. 三星a60android9,三星A605G官方安卓9台湾版固件rom线刷包:BRI-A605GDXU5BSH3
  17. 激光打印机常见加粉问题与使用技巧
  18. 基于顺序存储结构的图书信息表的创建和输出
  19. java毕业设计吾悦商城管理系统mybatis+源码+调试部署+系统+数据库+lw
  20. 天道好轮回苍天饶过谁万般皆是命半点不由人——循环

热门文章

  1. 【Spring】基于XML的IOC案例
  2. LeetCode简单题之找出两数组的不同
  3. GAAFET与FinFET架构
  4. CMOS图像传感器与DDI显示芯片
  5. NVIDIA GPU的神经网络自动调度
  6. 每秒能捕捉万亿帧的相机
  7. 客快物流大数据项目(十):Docker容器命令
  8. 2021年大数据Spark(四十五):Structured Streaming Sources 输入源
  9. python3 内置函数map 返回的迭代器转为列表
  10. Android Intent hasExtra()方法的使用