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-docs2. OpenAPI 文件暴露
常见文件:
openapi.json
openapi.yaml
swagger.json
swagger.yaml3. GraphQL Schema 暴露
GraphQL Schema 可能包含查询、变更操作、对象类型及字段定义,公开后可能暴露系统内部业务结构。
以上均为常见示例,实际路径取决于项目框架和部署配置。
0x03 漏洞产生原因
生产环境仍然启用 Swagger 等 API 文档功能。
API 文档缺少身份认证和访问控制。
OpenAPI 文件被直接放置在公开静态资源目录。
开发环境与生产环境共用配置,未关闭调试功能。
0x04 漏洞复现
在本地或授权测试环境中进行验证。
1. 检查 API 文档入口
根据应用实际配置,检查是否存在 Swagger、OpenAPI 等文档资源。
2. 验证访问权限
访问对应的 API 文档地址,确认是否能够在未登录状态下获取接口定义。
3. 分析暴露内容
重点检查:
判断重点: 是否存在未授权访问,以及公开内容是否包含具有实际价值的敏感信息。
0x05 漏洞危害
API Schema 信息暴露可能导致:
接口结构泄露:外部人员了解系统 API 的组织方式。
业务逻辑泄露:暴露内部功能及数据模型。
管理入口暴露:泄露管理类接口的路径和用途。
攻击面扩大:为后续安全风险分析提供更多信息。
注意:API 文档公开不等于接口可以未授权调用,实际影响还取决于接口自身的身份认证和权限控制。
0x06 修复建议
关闭不必要的文档功能:生产环境关闭不需要公开的 Swagger UI 和 API Schema 接口。
增加访问控制:对确实需要保留的接口文档设置身份认证和访问权限。
限制文件访问:避免内部 OpenAPI 文件直接存放在公开目录。
区分环境配置:开发环境与生产环境使用不同配置。
清理敏感信息:检查接口描述文件中是否包含内部地址、测试信息及敏感配置。
0x07 总结
API Schema 信息暴露是指 API 接口描述文件或文档缺少访问控制,导致外部人员获取系统接口结构和业务信息。
其本身不一定意味着接口存在未授权访问,但可能暴露内部接口、参数及业务模型,扩大系统的信息暴露面。
建议生产环境关闭不必要的 API 文档功能,对必须保留的文档实施身份认证和访问控制。
0x08 About 作者
本文介绍 API Schema 信息暴露的基本原理、常见场景、验证方法及修复建议,仅用于技术学习和授权环境下的安全测试。