CVE-2025-66909CVE-2025-66909是Deep Java Library (DJL)项目中Turms AI-Serving模块的一个高危拒绝服务漏洞。该漏洞存在于ExtendedOpenCVImage类中,该类使用OpenCV的imread()函数加载图像时未对图像尺寸或像素数量进行任何验证。攻击者可利用此漏洞上传精心构造的压缩图像文件(如PNG),该文件压缩后体积很小,但解压缩后会膨胀至数GB。当服务加载此类图像时,会导致内存立即耗尽,引发OutOfMemoryError,最终导致服务崩溃。由于该OCR服务通常无需认证即可访问,攻击者可通过发送多个恶意请求彻底拒绝服务可用性。该漏洞CVSS评分7.5,属于高危级别,对系统可用性造成严重影响。
漏洞根源在于ai/djl/opencv/ExtendedOpenCVImage.java文件中的图像加载逻辑。该类直接调用OpenCV的imread()函数加载图像,完全缺少输入验证机制。攻击者利用图像解压缩炸弹(Decompression Bomb)技术,构造一个看似很小的PNG文件(通常只有几KB),但该文件包含恶意的压缩数据流,解压后会生成巨大的图像数据(可达数GB)。具体原理:PNG等压缩格式允许通过重复的过滤器类型和DEFLATE压缩块构造嵌套压缩结构,使得压缩比达到1:100000甚至更高。当OpenCV尝试解码并分配内存存储图像像素数据时,会一次性申请数GB的连续内存空间,导致JVM堆内存耗尽。由于攻击无需认证且可通过网络发起,攻击者可在短时间内通过并发请求彻底瘫痪服务。该漏洞影响Turms AI-Serving v0.10.0-SNAPSHOT及更早版本。