---
# System prepended metadata

title: 'Spring4Shell - JianHong,Wu'

---

# Spring4Shell - JianHong,Wu

## Introduction
從2022開始，出現了嚴重 0-day 漏洞 Spring4Shell，Spring4Shell 漏洞的發生原因，是在傳送參數時未能進行安全的反序列化（Deserialization），該錯誤可讓駭侵者遠端執行任意程式碼，且其 CVSS 危險程度評分高達 9.8 分（滿分為 10 分），危險程度評級為最高等級的「嚴重」（critical）等級。

**影響地區及比例**[3]
* 在漏洞被發現後的第一個週末，Check Point Research 發現了約 37K 次分配 Spring4Shell 漏洞的嘗試
* 全球 16% 的組織受到 Spring4Shell 漏洞利用的影響
* 軟件供應商是受影響最大的行業，28% 的組織受到影響
* 受影響最嚴重的地區是歐洲，影響為 20%

## 我們可用的Attack Sequence
Step 1. 利用 Spring4Shell get Shell
Step 2. download and execute agent
Step 3. 使用agent進行C&C，並做Persistence
Step 4. Exfiltration

其中Step 2~4，我們可透過我們所學的APT3 or APT29達到，相較比較容易

## Spring4Shell Attack Path [6]
![](https://i.imgur.com/ZSh8IlV.png)

1. 將HTTP Parameters透過Spring轉成Objects
2. 由於CVE-2010-1622有一些保護此RCE漏洞的Module，需要使用JDK 9+的Class.getModule()去存取ClassLoader
3. 又ClassLoader有能力存取處理一些需要高權限的Method，故可以更改logging target去建立revershell

## 漏洞存在條件
* JDK 9+
* 直接或者間接使用了Spring Framework

## Spring

Spring Framework 用於在 Java 中開發企業級Application。它是一個提供全面基礎設施的平台，以增強Memory管理而開發的基於model-view-controller or MVC-based applications。它使Code更更易於維護。
Spring Framework 是 Spring 生態系統的一部分，其中包括用於Cloud、Data和Security等。

## 攻擊行為
如果我們提出了下面請求
```
get_headers = {
    "prefix": "<%",
    "suffix": "%>//",
    # This may seem strange, but this seems to be needed to bypass some check that looks for "Runtime" in the log_pattern
    "c": "Runtime",
}
```
則相當於送出以下參數:
* class.module.classLoader.resources.context.parent.pipeline.first.pattern
=帶有prefix和suffix的[jsp webshell]
* class.module.classLoader.resources.context.parent.pipeline.first.suffix
=.jsp
* class.module.classLoader.resources.context.parent.pipeline.first.directory
=shell的文件名（不含suffix）
* class.module.classLoader.resources.context.parent.pipeline.first.prefix
=shell的儲存路徑（相對路徑，預設為webapps/ROOT）
* class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat
=(空)

在此漏洞中，攻擊者可以透過綁定的Class屬性進行任意的寫值，可以利用Class屬性來修改Tomcat的Log configuration，向Log寫入Shell

而這些payload可以分開送，也可以合併在一次的請求中

## Spring4Shell Variation 
該漏洞最後會覆寫Tomcat日誌配置進而上傳WebShell

Variation 1 - UPX C&C
1. 先製作一個UPX加殼後的C&C agent
2. 在取得shell後，直接透過shell下載C&C agent取名為System software並執行此加殼的C&C agent

Variation 2 - Beaconing frequency or Command Timing
* WebShell或C&C agent的Beaconing frequency
* command 執行的時間間隔

Variation 3 - Non-standard port
* 開啟受害者電腦的Non-standard port並植入WebShell進行連線，而非在80 port上
* 下載一個會在Non-standard port上執行的C&C agent，執行後透過此agent進行C&C

Variation 4 - Obfuscated Command
* 將指令透過Base64編碼後傳過去，並透過解碼指令對Base64指令解碼

## Seemingly Case
* Google drive Backup and Sync Utilities 會定期傳送 sync info
* Google Drive Sync 的 C&C Beaconing


## Deserialization
序列化簡單說就是將物件變成資料流，可以將物件儲存成檔案，永久儲存在硬碟中，必且可以在兩台電腦中傳遞物件，是非常實用的功能。
反序列化就是將檔案還原成物件，並拿來使用。

下圖參考為序列化與反序列化的示意圖[4]
![](https://i.imgur.com/uvSYlHT.png)

由於 Spring4Shell 漏洞的發生原因，是在**傳送參數時未能進行安全的反序列化（Deserialization），該錯誤可讓駭侵者遠端執行任意程式碼**。

故接下來將介紹不安全反序列化的弱點成因
### 不安全的反序列化的弱點成因[5]
* 攻擊者在**未過濾使用者輸入的序列化結構**輸入惡意字串
* 導致**伺服器解析**後回傳非預期結果，可能**導致任意指令執行**
* 簡而言之就是後端沒有驗證反序列化的字串是否合法，導致攻擊者可以執行任意指令

而在JAVA反序列化中，JAVA是使用binary形式儲存序列化字串，除此之外像是PHP也會做序列化與反序列化的行為。


## 解決辦法

升級 Spring Framework 至 5.3.18 和 5.2.2 版本，以及 Spring Boot 至 2.5.12 版本，或更高版本。

## POC:
https://github.com/TheGejr/SpringShell
https://github.com/craig/SpringCore0day
https://github.com/dinosn/spring-core-rce/

## Reference
[1] National Cybersecurity FFRDC,**CVE-2022-22965**,2022
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22965
[2] TWCERT/CC,**Spring4Shell 0-day 嚴重漏洞已遭駭侵者濫用，建議立即進行更新**,2022-04-06
https://www.twcert.org.tw/newepaper/cp-67-5993-38dfc-3.html
[3] Sumeet Wadhwani,**16% of Organizations Impacted by Spring4Shell Exploitations, Europe Worst Hit**, April 7, 2022
https://www.spiceworks.com/it-security/vulnerability-management/news/spring4shell-impact/
[4] krishankant singhal,**Serialization and Deserialization**,Apr 13, 2020
https://krishankantsinghal.medium.com/serialization-and-deserialization-5046c958c317
[5] REDFOX,**Insecure Deserialization in Java**,September 2, 2022
https://redfoxsec.com/blog/insecure-deserialization-in-java/
[6]  Siddhesh Parab ,REDHUNT LABS,**Things You Should Know About the Spring4Shell Vulnerability (CVE-2022-22965)**,April 3, 2022
https://redhuntlabs.com/blog/the-spring4shell-vulnerability.html