事件经过
vLLM 的 nemotron_vl.py 和 nano_nemotron_vl.py 在模块加载时各自设置 Image.MAX_IMAGE_PIXELS = None,永久禁用 Pillow 的进程级解压炸弹防御。未认证的调用者若能够访问已导入任一 Nemotron-VL 处理器的实例的 /v1/chat/completions,可提交一个解压后占用大量内存的病态图像,可能导致 worker 被 OOM 杀死。
影响分析
由于该设置是进程级的,此进程中的所有图像加载均不再受防护,且攻击无需认证、只需单个请求。它使远程调用者能够耗尽内存,并拒绝共享 vLLM 服务实例上的租户服务(CWE-400,CVSS 7.5)。
攻击途径
向 /v1/chat/completions 发送精心构造的解压炸弹图像以耗尽内存并 OOM 杀死 worker。
受影响系统
vLLM >= 0.10.2,< 0.25.0,部署 Nemotron-VL 模型。
缓解措施
升级到 vLLM 0.25.0(PR #47010 移除了模块级赋值,并增加了可配置的 VLLM_MAX_IMAGE_PIXELS 解码像素数限制)。