0x00 漏洞描述

API信息泄露是用于描述 API 接口结构的规范,通常包含接口地址、请求方法、参数、数据类型及响应结构等信息。

常见类型包括:

  • OpenAPI:描述 RESTful API 接口。

  • Swagger:用于生成、展示和调试 API 文档的工具生态。

  • GraphQL Schema:描述 GraphQL 接口、类型及字段。

如果生产环境未对 API Schema 或接口文档设置访问限制,外部人员可能直接获取系统接口定义,造成业务结构和接口信息泄露。

可能暴露的信息:

  • API 接口地址及请求方法。

  • 请求参数和响应字段。

  • 内部业务模块及数据结构。

  • 管理接口及权限相关信息。

  • 内部地址和其他不应公开的描述信息。

0x01 漏洞原理

以 OpenAPI 为例,接口描述文件通常采用 JSON 或 YAML 格式。

示例:

openapi: 3.0.0
info:
  title: User API
  version: 1.0.0

paths:
  /api/user:
    get:
      summary: 获取用户信息
      responses:
        '200':
          description: 成功

其中,paths 用于定义接口路径,parameters 用于描述请求参数,responses 用于定义响应结构。

如果这些文件能够被未授权访问,就可能暴露系统的接口组织方式和业务数据结构。

0x02 常见暴露场景

1. Swagger 文档暴露

常见资源路径:

/swagger-ui/
/swagger-ui.html
/v3/api-docs
/v2/api-docs

2. OpenAPI 文件暴露

常见文件:

openapi.json
openapi.yaml
swagger.json
swagger.yaml

3. GraphQL Schema 暴露

GraphQL Schema 可能包含查询、变更操作、对象类型及字段定义,公开后可能暴露系统内部业务结构。

以上均为常见示例,实际路径取决于项目框架和部署配置。

0x03 漏洞产生原因

  1. 生产环境仍然启用 Swagger 等 API 文档功能。

  2. API 文档缺少身份认证和访问控制。

  3. OpenAPI 文件被直接放置在公开静态资源目录。

  4. 开发环境与生产环境共用配置,未关闭调试功能。

0x04 漏洞复现

在本地或授权测试环境中进行验证。

1. 检查 API 文档入口

根据应用实际配置,检查是否存在 Swagger、OpenAPI 等文档资源。

2. 验证访问权限

访问对应的 API 文档地址,确认是否能够在未登录状态下获取接口定义。

3. 分析暴露内容

重点检查:

检查内容

关注信息

接口路径

内部业务接口、管理接口

请求参数

敏感字段、内部标识

数据结构

用户、订单等业务模型

响应字段

不应公开的字段定义

接口描述

内部地址、测试信息

判断重点: 是否存在未授权访问,以及公开内容是否包含具有实际价值的敏感信息。

0x05 漏洞危害

API Schema 信息暴露可能导致:

  • 接口结构泄露:外部人员了解系统 API 的组织方式。

  • 业务逻辑泄露:暴露内部功能及数据模型。

  • 管理入口暴露:泄露管理类接口的路径和用途。

  • 攻击面扩大:为后续安全风险分析提供更多信息。

注意:API 文档公开不等于接口可以未授权调用,实际影响还取决于接口自身的身份认证和权限控制。

0x06 修复建议

  1. 关闭不必要的文档功能:生产环境关闭不需要公开的 Swagger UI 和 API Schema 接口。

  2. 增加访问控制:对确实需要保留的接口文档设置身份认证和访问权限。

  3. 限制文件访问:避免内部 OpenAPI 文件直接存放在公开目录。

  4. 区分环境配置:开发环境与生产环境使用不同配置。

  5. 清理敏感信息:检查接口描述文件中是否包含内部地址、测试信息及敏感配置。

0x07 总结

API Schema 信息暴露是指 API 接口描述文件或文档缺少访问控制,导致外部人员获取系统接口结构和业务信息。

其本身不一定意味着接口存在未授权访问,但可能暴露内部接口、参数及业务模型,扩大系统的信息暴露面。

建议生产环境关闭不必要的 API 文档功能,对必须保留的文档实施身份认证和访问控制。

0x08 About 作者

本文介绍 API Schema 信息暴露的基本原理、常见场景、验证方法及修复建议,仅用于技术学习和授权环境下的安全测试。