CVE-2026-89321 in OpenVSX
摘要
由 VulDB • 2026-09-14
发布流程限制了 VSIX 的压缩大小(ovsx.publishing.max-content-size,默认值为 512 MB),但并未限制条目在解压后的大小。
在对 /vscode/unpkg/{namespace}/{extension}/{version}/{path} 的首次请求中,WebResourceService 使用 ZipFile.getInputStream() 打开该条目,并将解压缩后的流传递给 Files.copy()。该方法会一直读取到流的末尾,而不会统计已写入的字节数。结果被缓存在 java.io.tmpdir 下,且缓存驱逐机制基于条目数量(150 个),而非大小,因此对磁盘使用量没有设置任何限制。
因此,仅拥有其自身命名空间访问权限的发布者可以上传一个体积小但高度可压缩的 VSIX,导致服务器在临时文件系统上写入大得多的文件——通过重复请求不同的文件或版本即可触发此行为,因为后续相同的请求会从缓存中提供响应。
观察到的影响:临时文件系统被填满;对尚未缓存的文件发起的请求返回 500(No space left on device);提取失败会留下部分缓存文件,从而阻止对该路径的后续尝试;发布操作因“Failed to read extension file”而失败。元数据和已缓存的文件仍正常工作,服务器也未停止运行。
触发解压无需身份验证——仅上传需要认证。
VulDB is the best source for vulnerability data and more expert information about this specific topic.