HTTP 动词篡改规则检测 REST 服务是否正确验证了发送给服务的请求中的 HTTP 动词。它会在渗透测试工具附加到 REST 客户端时执行。如果服务定义与 REST 客户端中定义的请求相关联,则此规则会检查服务定义中未定义的 HTTP 动词,以获取匹配的资源。服务定义有两种关联方式:
- 将 REST 客户端中的服务定义字段设置为 OpenAPI/Swagger、RAML 或 WADL,并配置相应的 URL 字段。
- 如果 REST 客户端中的服务定义字段设置为无,则可以在用于运行测试的测试配置的执行选项卡中启用“API 覆盖率”。应取消勾选“被测试引用”选项,并指定一个包含待测资源的服务定义。该选项适用于在没有服务定义信息的情况下配置 REST 客户端。
当应用程序未正确响应服务定义(如 OpenAPI 或 RAML)中定义的资源,但却使用了服务定义中未包含的 HTTP 动词时,便会报告此漏洞。攻击者可能通过修改已知请求,包含不同的 HTTP 动词来绕过访问限制,从而访问应用程序中本应受到保护的数据。
解决方案
为应用程序中的每个资源定义允许使用的 HTTP 动词列表,并将所有这些动词包含在应用程序(如 OpenAPI 或 RAML)的服务定义中。拒绝所有与允许列表和/或服务定义不匹配的请求,HTTP 响应代码为 "405 方法不允许"。确保调用者有权限使用请求中指定资源的传入 HTTP 动词。
参考资料