Swagger JSON高危漏洞被发现 Java/PHP/NodeJS/Ruby或中招

标题:

标题:

全方位防范 Swagger JSON 高危漏洞

背景介绍:

最近,一种针对 Swagger JSON 文件的高危漏洞被发现,这种漏洞可能让攻击者直接获取到应用程序的代码。这种漏洞已经影响到了 Java、PHP、NodeJS、Ruby 等多种语言,因此我们需要对此进行有效的防范。

攻击过程:

攻击者可能会通过修改Swagger文档,添加恶意逻辑来执行以下行动:

  1. 正常请求:用户正常调用应用API,恶意代码不单单返回请求结果数据,同时可能会对用户请求的返回结果进行篡改、数据拦截操作。

  2. 改动类型:攻击者感染服务端,修改对应接口或者函数类型,修改返回值,导致调用此API者抛出异常或者数据解析失败。

  3. 任意代码执行:攻击者可以通过对文档的细微修改,足以导致服务端执行恶意脚本,通过这些执行了恶意脚本,攻击者可以获取系统权限或者应用源代码。

防范措施:

  1. 尽量不要将swagger UI界面暴露在公网上。

  2. 对于Swagger静态文件的存储目录,尽量设置只读权限。

  3. 应用可以通过代码校验规避此类漏洞。

  4. 对swagger的输入参数进行校验,避免在文件载入时执行恶意代码。

下面我们详细介绍每一种防范措施的具体实现:

  1. 隐藏swagger UI

Swagger UI 经常被用来测试和浏览 API 文档,因此它会被暴露在互联网上。为了防止不必要的风险,可以将 Swagger UI 隐藏在内部网络中,或者启用身份验证机制来控制其访问。

  1. 只读权限设置

对于 Swagger 静态文件存储目录,尽量设置只读权限,以便确保在攻击者发现漏洞的情况下,他们无法轻易地修改 Swagger 文档。

  1. 代码规避

使用一些代码扫描工具,例如 CODE ANALYSIS 、FindSecBugs 等,以帮助验证 Swagger 文件的安全性。通过这些工具可以识别出 Swagger 文件中可能存在的安全漏洞,有效防范高危漏洞。

  1. 输入参数校验

在服务端代码构建之前,可以对 Swagger 的输入参数进行校验。通过校验输入参数,可以避免在文件载入时执行恶意代码,从而防止高危漏洞的发生。

示例说明:

以下代码演示了如何在 Node.js 中读取并验证 Swagger 文件的内容,避免其执行恶意代码:

const YAML = require("yamljs");
const fs = require("fs");

const filename = "swagger.yml";
const data = YAML.parse(fs.readFileSync(filename).toString());

if (data.securityDefinitions) {
  for (let [, value] of Object.entries(data.securityDefinitions)) {
    if (value.in && value.in === "header") {
      console.warn(
        "The `securityDefinitions` section contains a scheme that uses HTTP headers for authentication. Headers cannot be set from a Web page using XMLHttpRequest, CORS is enabled on the target server, and the Access-Control-Allow-Origin header does not allow the origin of the requesting page."
      );
    }
  }
} else {
  console.warn("No security schemes were found in the `securityDefinitions` section.");
}

代码中先使用 yamljs 模块读取Swagger文件内容,然后通过 onject.entries 检查 securityDefinitions 后循环检索到所有in: header的定义,检查后如果定义了in: header会输出警告信息并退出程序。

本文标题为:Swagger JSON高危漏洞被发现 Java/PHP/NodeJS/Ruby或中招

基础教程推荐