返回资讯中心
外部精选
软件工程
#开发者实时流

Svix 因 JSON Schema 引用机制漏洞修复端点安全问题

来源标题:JSON Schema References Considered Harmful

Svix 披露并修复了一个由其端点引入的安全漏洞,成因是 JSON Schema 规范缺陷与开源库的危险默认配置叠加。漏洞与 $ref 关键字可引用任意 URI 上的外部 schema 文件有关,Svix 允许用户上传任意 schema 用于事件类型,作者呼吁工程界避免同类问题反复出现。

Hacker News 最新atopia2026/11/12 · 今天14 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

2026年11月12日·阅读约5分钟

JSON Schema References Considered Harmful

作者:James Brown(Twitter)

以 Markdown 查看复制供 LLM 使用

Svix 最近在我们的一个端点中发现并修复了一个令人头疼的漏洞,该漏洞是由一份糟糕的规范和某个开源库中有风险的默认设置共同引入的。这篇博客文章将详述细节,并探讨我们作为工程师社区可以采取哪些措施,以避免每隔几年就再次出现同一类问题。

背景

“JSON Schema”是一种用于编写其他文件格式模式的元语言;基本上,它是一种描述格式的语言。JSON Schema 文档本身也是合法的 JSON1,并且预期应用于类 JSON 数据2。除了常规的模式构造(如 number 和 string 等原始类型,以及 object 和 array 等复合类型)之外,JSON Schema 还提供了将模式分解为多个不同部分或文件的功能,这些部分或文件可以使用 $ref 关键字进行引用。它们既可以是同一文档的其他片段(写作 #/path/to/other/section),也可以是完全位于任意 URI 上的其他 JSON Schema 文件。

Svix 允许用户为事件类型上传任意模式(作为 v1.event-type.create 的一部分),并使用开源的 Rust jsonschema 库来验证这些模式。该库会自动(并且自 v0.21.0 起是急切地)处理 $ref 条目的解引用,包括获取任意 HTTP 资源,以及在指定 file:/// URI 时从磁盘加载文件。如果某个资源不包含有效的 JSON Schema 文档,错误消息将包含受影响文档的片段。

如果这个问题听起来很像自 1998 年以来一直困扰 XML 的外部实体扩展攻击,那么,你并没有说错。太阳底下没有新鲜事,只要同一批企业架构宇航员继续以同样的方式构建同样的系统,我们就会遇到同样的安全问题。大型应用不可避免地会发展出庞大的 API 表面积3,而每一种 IDL 最终都不可避免地要应对如何在模式设计中促进类型复用和 DRY 原则的相同问题。XML 做到了,Avro 做到了,现在我们在 JSON Schema 中也遇到了同样的问题。

Svix 的影响

攻击者可以利用这一点作为原语,从 Svix 服务器(可能具有网络特权)的视角向任意 URI 发起任意 HTTP GET 请求。如果这些 GET 请求返回了有效 JSON 但不是有效 JSON Schema 文档,错误消息可能包含所返回文档的片段4。似乎没有任何此类恶意模式被上传到 Svix 云环境。任何攻击者都必须已经拥有对任何 OSS 或 Enterprise 部署的组织级访问权限,因此在那里这是一个不太可能的攻击途径。尽管如此,我们仍鼓励 OSS 客户升级到 v1.104.0,Enterprise 客户升级到 v1.3116.0 或更高版本。

展望未来

我们期待这样一个最终到来的未来:Rust 提供工具,能够稳健地使用第三方库,而无需费力地审计其代码;类似于 Joe-E 的某种全面授权系统,但适用于 Rust。在缺乏语言特性的情况下,精心设计的微服务架构,或者分解为可通信的 wasm 组件,可能是降低依赖风险的有效策略。

这也是重申一条库开发原则的好机会:将 I/O 委托给调用方。jsonschema 默认嵌入自己的 HTTP 客户端这一选择相当令人恼火——除了安全问题之外,它还让测试变得相当麻烦。依赖注入对于这类情况可能是一种有价值的模式;如果 jsonschema 采用强制性的 Retrieve,而不是提供一个“方便的”预烘焙选项,这个问题就永远不会出现。

唉,你只能用手头拥有的军队去打仗,所以目前重要的是软件工程师要对我们使用和依赖的第三方库保持警惕——对 JSON Schema 的粗略检查不会让大多数工程师对 XXE 风险和任意网络请求警觉起来。每一个依赖项都需要由负责集成和维护它的人完全理解。

如果您有任何问题或疑虑,请随时通过 support@svix.com 联系我们。

您有兴趣与我们一起为服务器到服务器通信构建和保护优秀的 Rust 应用吗?来 Svix 工作吧!

脚注

是的,当然有用于 JSON Schema 的 JSON Schema 模式。不幸的是,它没有被称为元循环模式…… ↩

例如,JSON Schema 被用于描述 Kubernetes 的模式,尽管 Kubernetes 配置通常用 YAML 而不是 JSON 编写 ↩

LLM 辅助的软件开发使新代码变得廉价、良好的品味变得昂贵,这不太可能改善这个问题 ↩

攻击者还可以触发任意文件读取,并且如果这些文件包含有效 JSON 但不是有效 JSON Schema 文档,则可以读取这些文件的片段。不过,任何 Svix 容器上都没有任何有趣的 JSON 文件。 ↩

Svix 是企业级就绪的 webhook 服务。在几分钟内构建一个安全、可靠且可扩展的 webhook 平台。

本页内容

背景

Svix 的影响

展望未来

标签

技术Rust安全

Markdown

以 Markdown 查看复制供 LLM 使用

Svix

Webhook 即服务,用于发送和接收。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →