溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Apache Shiro 權限繞過漏洞CVE-2020-11989的分析是怎樣的

發布時間:2021-12-28 17:09:21 來源:億速云 閱讀:283 作者:柒染 欄目:安全技術
# Apache Shiro 權限繞過漏洞CVE-2020-11989的分析

## 一、漏洞背景

Apache Shiro是一個強大且易用的Java安全框架,提供認證、授權、加密和會話管理等功能。2020年6月,Apache Shiro官方披露了一個高危權限繞過漏洞(CVE-2020-11989),該漏洞影響版本為1.5.3及以下,當Shiro與Spring框架結合使用時,攻擊者可構造特殊請求繞過權限控制。

### 1.1 漏洞基本信息
- **CVE編號**:CVE-2020-11989  
- **漏洞類型**:權限繞過  
- **影響版本**:Apache Shiro ≤ 1.5.3  
- **CVSS評分**:9.8(Critical)  
- **漏洞公開時間**:2020年6月22日  

### 1.2 漏洞產生環境
當同時滿足以下條件時易受攻擊:
1. 使用Spring框架的`DispatcherServlet`(如Spring Boot)
2. 配置了Shiro的URL路徑過濾規則
3. 存在靜態資源目錄(如`/static`、`/public`)

## 二、漏洞原理分析

### 2.1 Shiro的URL匹配機制
Shiro通過`PathMatchingFilterChainResolver`進行URL路徑匹配,核心邏輯如下:

```java
public FilterChain getChain(ServletRequest request, ServletResponse response, FilterChain originalChain) {
    String requestURI = getPathWithinApplication(request);
    for (String pathPattern : filterChainManager.getChainNames()) {
        if (pathMatches(pathPattern, requestURI)) {
            return filterChainManager.proxy(originalChain, pathPattern);
        }
    }
    return null;
}

2.2 Spring的URL處理機制

Spring的DispatcherServlet在處理請求時會對路徑進行規范化: 1. 解碼URL編碼字符(如%2e.) 2. 處理路徑遍歷符號(如/../) 3. 移除重復斜杠(如///

2.3 漏洞觸發點

當攻擊者構造如下請求時:

http://target.com/;/admin
  1. Shiro層:;/admin被當作完整路徑進行匹配,若未配置該路徑規則則放行
  2. Spring層:;被當作合法字符處理,最終路由到/admin控制器

2.4 根本原因

  • 解析差異:Shiro與Spring對URL的解析邏輯不一致
  • 安全邊界失效:Shiro的權限檢查被Spring的路徑處理繞過
  • 特殊字符處理:分號;在RFC 3986中屬于合法字符但處理不規范

三、漏洞復現

3.1 環境搭建

<!-- pom.xml 依賴 -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.5.3</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.2 安全配置示例

@Bean
public ShiroFilterFactoryBean shiroFilter() {
    ShiroFilterFactoryBean factory = new ShiroFilterFactoryBean();
    Map<String, String> filterMap = new LinkedHashMap<>();
    filterMap.put("/admin/**", "authc"); // 需要認證
    filterMap.put("/static/**", "anon"); // 允許匿名訪問
    factory.setFilterChainDefinitionMap(filterMap);
    return factory;
}

3.3 攻擊向量

請求方式 惡意URL 繞過效果
GET http://target.com/;/admin 訪問受保護的管理頁面
POST http://target.com/static/..;/admin/update 通過靜態目錄繞過

3.4 實際攻擊示例

curl -v "http://localhost:8080/;/admin"
* 注意觀察響應碼200(正常應為302跳轉登錄頁)

四、修復方案

4.1 官方補丁

升級到Shiro 1.6.0及以上版本,主要修改: 1. 新增removeSemicolon()方法處理分號

private String removeSemicolon(String uri) {
    int semicolonIndex = uri.indexOf(';');
    return (semicolonIndex != -1) ? uri.substring(0, semicolonIndex) : uri;
}
  1. 修改getPathWithinApplication()方法調用鏈

4.2 臨時緩解措施

// 自定義Filter繼承AccessControlFilter
@Override
protected boolean isAccessAllowed(ServletRequest request, 
    ServletResponse response, Object mappedValue) {
    HttpServletRequest req = (HttpServletRequest) request;
    String uri = req.getRequestURI();
    if (uri.contains(";")) {
        return false; // 直接拒絕含分號的請求
    }
    return true;
}

4.3 最佳實踐建議

  1. 采用白名單機制配置靜態資源
  2. 避免使用/**通配符規則
  3. 結合Spring Security進行雙重防護

五、深度技術分析

5.1 URL標準化對比

處理階段 /%3badmin /;admin /static/../admin
瀏覽器編碼 %3badmin ;admin static/../admin
Shiro解析 %3badmin ;admin static/../admin
Spring解析 ;admin ;admin admin

5.2 其他可能觸發字符

除分號外,以下字符也需注意: - 反斜杠\(Windows路徑特性) - Unicode編碼字符(如\u002e) - URL雙重編碼(如%252e

5.3 同類漏洞對比

CVE編號 觸發條件 影響范圍
CVE-2020-1957 Spring+Shiro路徑穿越 Shiro < 1.5.2
CVE-2020-11989 分號處理差異 Shiro ≤ 1.5.3
CVE-2021-41303 正則匹配缺陷 Shiro < 1.8.0

六、安全啟示

  1. 框架組合風險:混合使用多個安全框架時需注意兼容性問題
  2. 深度防御原則:建議在網絡層、應用層、數據層實施多重防護
  3. 標準化處理:所有安全組件應遵循統一的URL處理規范(RFC 3986)
  4. 持續監控:建議部署RASP方案實時攔截異常請求

附錄

A. 參考鏈接

B. 檢測工具

# 使用nmap檢測
nmap -p 80,443 --script http-shiro-auth-bypass <target>

C. 時間線

  • 2020-05-15 漏洞首次報告
  • 2020-06-12 Apache確認漏洞
  • 2020-06-22 發布安全更新
  • 2020-07-10 CVE正式分配

”`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女