CVE-2020-17523:Apache Shiro身份認證繞過漏洞分析


0x01 Apache Shiro

Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。

0x02 漏洞簡介

2021年2月1日,Apache Shiro官方發布漏洞通告,漏洞編號為:CVE-2020-17523。
當Apache Shiro與Spring框架結合使用時,攻擊者可以通過構造特殊的HTTP請求數據包,繞過身份認證匹配規則。

0x03 漏洞復現

環境搭建

使用tomcat部署shiro1.7.0.war包。

公眾號回復shiro獲取下載鏈接。

復現過程

訪問admin下面的資源/admin/1跳轉到登錄界面:

使用payload:/admin/%20繞過身份驗證,成功訪問admin頁面:

0x04 漏洞分析

漏洞成因

代碼中,Shiro會對請求的uri進行鑒權操作,Shiro的校驗uri的函數為PathMatches,當PathMatches返回true時才會進入鑒權。

然而PathMatches("/admin/*","/admin/ ")返回結果為false,因此訪問/admin/ 這個uri時Shiro不會進行鑒權操作,
但是Spring接收到的uri則是/admin/%20,會正常返回響應admin page

代碼分析

代碼執行過程中調用tokenizeToStringArray方法,而當調用此方法時trimTokens參數值為true

而在tokenizeToStringArray方法中,trimTokenstrue時調用了trim()函數,去除了空格字符,導致未進行鑒權操作:

簡單總結下,在存在漏洞Shiro版本中,執行tokenizeToStringArray方法時trimTokens值為true,導致uri中的空格字符被清除,因此代碼並沒有經過鑒權處理,然而Spring接受到的uri:/admin/%20會正常返回響應,最終導致身份驗證被繞過。
利用Shiro與Spring處理uri的不同規則繞過身份驗證。

0x05 影響版本

Apache Shiro < 1.7.1

0x06 修復方案

官方修復方案中,將tokenizeToStringArray方法中的trimTokens置為false

建議升級到Apache Shiro 1.7.1版本

公眾號回復shiro獲取漏洞環境


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM