现代 Web 应用中的授权安全问题很难被安全扫描器轻易发现。以下是一些来自 Shopify、LINE、NordVPN 的示例。 原因之一是安全扫描器主要寻找 SQLi、XSS、RCE,而不是授权安全漏洞,并且扫描器通常不了解 Web 应用应有的行为方式。这就是为什么目前大多数授权漏洞主要依靠手动发现。 OpenAPI 安全扫描器旨在帮助通过自动化和人工审查发现授权安全问题。它就像一个外部单元测试工具,确保一切行为符合预期。
观看此 视频 以跟随操作,或继续阅读下文。
Fork 或克隆本项目,并按照以下说明开始使用。
使用此扫描器的工作流程大致如下:
对于开发者来说,使用此工具可以为 API 的内外部行为增加一层额外的保障。并且可以通过触发流水线 https://docs.gitlab.com/ee/ci/triggers/ 在每次代码部署时触发扫描器。
对于漏洞赏金猎人来说,使用此工具可以确保您始终掌握目标 API 的最新状态,因为我们都知道,即使某个特定端点以前没有漏洞,将来也可能因各种原因变得脆弱。因此,使用此工具将漏洞挖掘中的人工部分自动化会更加方便。
请确保您有权扫描目标 API。
您需要一份 Web 应用的 OpenAPI yaml 文件,并将其替换到仓库中的 api.yaml 文件内容。
将 api.yaml 的内容替换为目标 API 的 OpenAPI yaml 文件,然后进入 GitLab 项目的 Settings -> CI/CD -> 展开 Variables,按以下格式输入变量。
此处提供的凭据将以 Authorization: Bearer 标头格式传递给 API 调用。
建议为至少两个具有不同权限的用户帐户准备访问令牌,您还可以为每个用户帐户创建多个访问令牌,以测试不同作用域访问令牌的正确行为。
{
"<user_a>":[
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
},
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
}
],
"<user_b>":[
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
}
]
}
此处提供的端点应为 GET 类型的 API 调用,您也可以在 JSON 正文中包含查询参数。以下示例中,端点是 /org/{orgs}/repos,查询参数为 type=all。对于端点 /repos/{owner}/{repo},则没有查询参数。
{
"/orgs/{org}/repos":{
"type":"all"
},
"/repos/{owner}/{repo}":{
}
}
可以在此处提供路径变量,扫描器将根据路径变量中的值生成所有组合。
{
"org":[
"test-org"
],
"owner":[
"ngalongc",
"reconless"
],
"repo":[
"public-repo",
"private-repo"
]
}
在这种情况下,将生成以下组合 API 调用,并且它们都将由 OPENAPI_CREDS 中提供的不同凭据集调用。
/orgs/test-org/repos?type=all
/repos/ngalongc/public-repo
/repos/ngalongc/private-repo
/repos/reconless/public-repo
/repos/reconless/private-repo
前往 https://gitlab.com/-/profile/personal_access_tokens 创建一个 api 访问令牌,并将值替换到此处。此 GitLab 访问令牌用于从 GitLab 运行器下载扫描结果。
<YOUR_GITLAB_API_ACCESS_TOKEN>
这应该是您的 API 服务器的基础 URL 值。
https://example.com/api/v3
检测到 API 变更时 Slack 通知的截图
artifacts 中扫描结果的截图
示例报告:https://ngalog-gitlab.gitlab.io/-/openapi_security_scanner/-/jobs/966841401/artifacts/sample.html
GET 类型的端点/users/{user_id}/activities),每次调用时的响应都不同,因此检测此类 API 的变化没有意义贡献正是让开源社区成为如此令人惊叹的学习、启发和创造之地的原因。您所做的任何贡献都 深受感谢。
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)基于 MIT 许可证发布。更多信息请参阅 LICENSE。
Ron Chan - @ngalongc
项目链接:https://gitlab.com/ngalog-gitlab/openapi_security_scanner