Insecure Authorization Restriction
不安全的授权限制
描述
不安全的授权限制是指服务器端限制中的弱点,这些弱点可能被攻击者通过 HTTP 请求操作技术加以利用。此漏洞允许攻击者绕过访问控制,从而导致对资源的未授权访问和权限提升,并允许未授权的用户检索、创建、更新或删除敏感数据。
例如,针对 Web 服务器上不安全的授权限制进行攻击将涉及以下技术:
- HTTP 请求方法模糊测试:在服务器上测试无效的、格式错误的或非预期的 HTTP 方法。
- HTTP 请求路径模糊测试:通过变形、添加或删减来操作 HTTP 请求路径。
- HTTP 请求查询参数模糊测试:添加、删除或更改原始查询参数。
- HTTP 请求标头模糊测试:添加常用标头、删除标头或添加代理标头。
所有这些技术都针对服务器逻辑中的缺陷、漏洞或错误。
import requests
response = requests.get("http://www.some-url.com/unauthorized_path")
'''if we have some unauthorized path that gets us a 403 code,
we can try something like adding a query parameter like "debug=true" to see if we can
trick the server by exploiting some mistake.'''
response = requests.get("http://www.some-url.com/unauthorized_path?debug=true")
'''Might get us the resource we want''
建议
组织应实施适当的访问控制,并强制执行严格的 HTTP 请求验证,以降低由于不安全的授权限制所带来的 HTTP 漏洞风险。这涉及拥有强大的服务器端逻辑来管理关于所接收到的 HTTP 方法、标头、查询参数和路径的规则。
以下是一些建议:
- 限制 HTTP 方法:限制哪些 HTTP 方法可以访问您的各个视图/资源。
- 清理查询参数:清理每个请求的查询参数,并确保只有有限的一组参数能够影响服务器的逻辑。
- 限制标头:限制哪些标头可以影响您的代码。对哪些标头/方法组合能够在服务器端进行更改使用严格的规则,并确保您的逻辑不依赖于很容易在互联网上找到的标头值(例如 Google 的 User-Agent)。
- 强大的路径解析:实施带有严格规则的强大路径解析,并拒绝不符合您标准的请求。
python
# 此路由仅允许 GET 和 POST 方法
@app.route('/limiting_method_usage', methods=['GET', 'POST'])
def limiting_method_usage():
if request.method == 'GET':
return jsonify({"message": "This is a GET request"})
elif request.method == 'POST':
data = request.json
return jsonify({"message": "This is a POST request", "data": data})
# 仅使用你期望的请求头
@app.route('/limiting_header_values')
def limiting_header_values():
expected_header = request.headers.get('Expected-Header')
### 根据预期请求头的逻辑
链接
标准
- OWASP_ASVS_L1:
- V4_1_1
- V4_1_2
- V4_1_3
- V4_1_5
- V5_1_1
- V5_1_2
- V5_1_3
- V5_1_4
- V5_2_2
- OWASP_ASVS_L2:
- V4_1_1
- V4_1_2
- V4_1_3
- V4_1_5
- V5_1_1
- V5_1_2
- V5_1_3
- V5_1_4
- V5_2_2
- OWASP_ASVS_L3:
- V4_1_1
- V4_1_2
- V4_1_3
- V4_1_5
- V5_1_1
- V5_1_2
- V5_1_3
- V5_1_4
- V5_2_2
- PCI_STANDARDS:
- REQ_2_2
- HIPAA_CONTROLS:
- SECURITY221
- SECURITY212
- SECURITY213