前言:
OWASP API 安全项目是第一次发布,在查找OWASP API TOP 10相关解读资料的时候,发现中文资料比较少,但是API在万物云化的今天越来越重要,因此考虑自己写点东西以加深自己的理解。
API全称为Application programming interface,意为应用程序编程接口。这个概念较为广泛,更像是一种资源交互方式。
OWASP API Security Top 10具体为:
API 1 Broken Object Level Authorization-----------失效的对象级别授权
API 2 Broken Authentication---------------------------失效的用户身份验证
API 3 Excessive Data Exposure------------------------过度的数据暴露
API 4 Lack of Resources & Rate Limiting-----------资源缺乏和速率限制
API 5 Broken Function Level Authorization----------失效的功能级授权
API 6 Mass Assignment-------------------------------- 批量分配
API 7 Security Misconfiguration-----------------------安全配置错误
API 8 Injection-----------------------------------------------注入
API 9 Improper Assets Management--------------------资产管理不当
API 10 Insufficient Logging & Monitoring-------------日志和监控不足
附中文版链接: http://www.owasp.org.cn/owasp-project/OWASPAPITop102019.pdf
通过对比表发现和OWASP Top 10还是具有一定差异的。我通过查询找到下面这个图。可以看到红色的是主要差异项,绿色的是排名不变的,黄色的是排名发生了变化的项目。通过这个排名可以知道,在api安全方面,侧重点是不一样的,XXE、反序列化、敏感信息泄露、XSS、使用具有已知漏洞的组件是API安全TOP 10里是没有的。没有的原因不是说API安全不存在这些问题,而且这些问题排名在10名开外,因此不在其中。
接下来,结合案例来看看API安全提及的一些问题。
1、失效的对象级别授权
这里直接上图,文中的对于API 1的定义类似于IDOR,也就是说API 安全中排名第一的问题是权限问题,提供的案例也是越权。如遍历用户ID方式,以用户角色为维度。因此,尝试去hackerone上找相关的公开报告。
https://hackerone.com/reports/763994
https://hackerone.com/reports/853130
https://hackerone.com/reports/975047
https://twitter.com/samwcyo/status/1350025970615529473?s=20
2、失效的用户身份认证
排名第二的是身份认证问题。这个问题基本上围绕认证方面,如弱口令、明文存储、弱加密、密码爆破、GET方式传输令牌和密码等,这里案例就比较多了。弱口令就不说了,完全是管理问题。明文存储国内案例有CSDN、网易,国外有 facebook,而GET方式传输令牌和密码,某运营商目前仍这样处理,由于查询余额、积分、账单等敏感操作都是用GET请求方式,后续大部分查询操作referer都可以看到令牌和sessionid,又由于令牌等几个值一直不变,过期时间较长,因此很容易泄露用户个人数据。而爆破的话,H1上案例也不少。
https://hackerone.com/reports/708013
https://hackerone.com/reports/970157
3、过度的数据暴露
这个问题比较容易理解,字面上的意思即是问题的所在。API在对查询进行响应的时候返回了过多的敏感信息。之前在测试一个微信公众号,就遇到过这样的问题,明明只查了待缴金额,结果把余额、账单等信息都返回过来了。
4、资源缺乏和速率限制
这个问题偏向于资源竞争。我在其他文章里找到更容易懂的解释-----API不会对客户端/用户可以请求的资源大小或数量施加任何限制。这不仅会影响API服务器的性能,从而导致拒绝服务(DoS),而且还为诸如暴力破解之类的身份验证漏洞敞开了大门。
https://hackerone.com/reports/764434
https://hackerone.com/reports/887321
5、失效的功能级授权
这个问题和API 1有点像,都是授权方面的问题。但是这个更偏向于在功能授权上的问题,像是垂直越权。比如,管理员面板,普通用户正常情况无法访问,但存在此类越权问题时即可访问管理员面板。
https://twitter.com/hunter0x7/status/1352572216119062528
6、批量分配
这个问题从字面上是最难理解的。但仔细看定义,还好理解。大致就是API存在用户可控的参数。
https://hackerone.com/reports/452959
https://hackerone.com/reports/813300
7、安全配置错误
这个范围会大一些,如明文传输、敏感信息泄露、存储桶未授权访问、错误配置CORS等问题。之前测几个小程序的时候,接口未授权访问出现的频率最高,有的接口可遍历所有用户信息。个别参数客户端可控,导致返回了明文敏感信息。因此在测试接口时,仔细看重要操作的数据包还是十分必要的。
https://hackerone.com/reports/1021906
https://hackerone.com/reports/1001951
8、注入
属于输入验证漏洞类别。如sql注入、HTML注入、命令注入、LDAP注入等漏洞类别。
https://hackerone.com/reports/816254
https://hackerone.com/reports/1034625
https://hackerone.com/reports/950180
9、资产管理不当
这个问题就是字面上的意思,很好理解。资产管理的问题。如暴露测试接口地址、未下线的旧接口。而此类接口的发现,我总结了三种方式,一是捕风捉影,通过检测所有流量包来查找;二是按图索骥,通过JS等信息收集方式发现去寻找并构造API;三是无中生有,通过猜解、遍历方式去获取接口。而在实践中,这三种方式都有成功的记录。
10、日志和监视不足
最后一个无需多说,是以资产拥有方的角度出发的。和日常安全测试关系不大。
参考链接:
http://r6d.cn/acMHU
https://owasp.org/www-project-api-security/
https://nordicapis.com/testing-owasps-top-10-api-security-vulnerabilities/
https://apisecurity.io/encyclopedia/content/owasp/owasp-api-security-top-10.htm
https://apisecurity.io/encyclopedia/content/owasp-api-security-top-10-cheat-sheet-a4.pdf
https://portswigger.net/daily-swig/owasp-reveals-top-10-security-threats-facing-api-ecosystem