【CVE-2020-1957】shiro搭配spring時身份驗證繞過漏洞分析


0x00 漏洞簡介

https://www.openwall.com/lists/oss-security/2020/03/23/2

 

0x01 漏洞分析

翻查官方commit,在commit https://github.com/apache/shiro/commit/9762f97926ba99ac0d958e088cae3be8b657948d 中找到相關信息

 

 

 大致理解為Spring web在匹配url的時候會容錯后面多余的/,而shiro匹配不上導致繞過,由國人tomsun28提交pull request

 

0x02 漏洞環境搭建

使用springboot+shiro搭建一個簡單的demo,代碼參考至 https://segmentfault.com/a/1190000019440231(使用java原生的整合方式)
其中shiro使用的是1.4.0版本
在shiro-config中配置一個對url "/test/secret"的過濾,此url需要登錄才能訪問

 同時在LoginController中配置以下代碼,用於返回一個需要認證的信息

1 @GetMapping("/test/secret")
2     public String secret(){
3         return "secret";
4     }

直接訪問/test/secret,跳轉到登錄頁面

 

 訪問/test/secret/,返回了secret

 

 

官方修復也很簡單就是把url后面的/也考慮進去了再進行匹配
順便一提,使用maven拉取包的時候發現1.5.1版源碼已經修復了,而1.5.0,1.4.2的源碼卻拉取不到
 
0x03 更新
  shiro的匹配符知識

 

看freebuf的分析( https://www.freebuf.com/vuls/231909.html),才發現自己看漏了。。。
后續還有一個繞過,具體commit看這里  https://github.com/apache/shiro/commit/3708d7907016bf2fa12691dff6ff0def1249b8ce
由於shiro先獲取的url,然后會判斷分號是否存在,如果存在就會把后面的刪除,進入shiro匹配,匹配不上默認放行,之后Spring web對路徑進行規范化從而訪問到了相應的控制器
比如:
/fdsf;/../test/secret

 
0x04 實際攻擊
當shiroFilter這么寫

 

 與及這么寫

都存在繞過,也就是說當配置在二級目錄下面的身份驗證都存在被繞過的風險

只有這么寫的時候,才不存在問題

 

 本人技術水平有限,如有不妥之處還望諒解


免責聲明!

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



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