前言:
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

