Insecure HTTP Methods Vulnerability and Protection (Advanced)
Description
The insecure HTTP methods vulnerability refers to a web server enabling high-risk HTTP methods (such as PUT, DELETE, CONNECT, etc.) without implementing strict access controls and input validation, allowing attackers to directly modify server resources or execute dangerous operations using these methods. Compared to the basic level, this advanced section focuses on deeper attack scenarios (like method overriding, privilege bypass) and comprehensive protection strategies.
Solution Process
-
Deep Dive into Vulnerability Principles
- Functions of Dangerous Methods:
- PUT: Allows clients to upload files to the server. If the path is predictable (e.g.,
PUT /static/evil.txt), attackers can overwrite critical files. - DELETE: Directly deletes server resources (e.g.,
DELETE /users/123), leading to data loss. - CONNECT: Could be abused as a proxy to forward malicious traffic.
- TRACE/TRACK: Echoes request content, which, combined with XSS, can be used to steal cookies.
- PUT: Allows clients to upload files to the server. If the path is predictable (e.g.,
- Advanced Attack Scenarios:
- Method Override Attack: By forging the
X-HTTP-Method-Overriderequest header, a POST request can be transformed into PUT/DELETE, bypassing frontend restrictions. - Privilege Bypass: Some frameworks (like Spring MVC) support the
PATCHmethod for partial resource updates. If permission checks are incomplete, attackers can modify sensitive fields (e.g., user roles).
- Method Override Attack: By forging the
- Functions of Dangerous Methods:
-
Vulnerability Detection Steps
- Step 1: Enumerate Allowed HTTP Methods
Probe using the OPTIONS method:
If the response includesOPTIONS /api/users HTTP/1.1 Host: example.comAllow: GET, POST, PUT, DELETE, a risk exists. - Step 2: Test Method Override Vulnerability
Send a POST request with an override header:
Observe if the resource is deleted.POST /api/users/1 HTTP/1.1 Host: example.com X-HTTP-Method-Override: DELETE - Step 3: Check PATCH Privilege Bypass
Attempt a partial update on a permission field:
Verify if privilege escalation is successful.PATCH /api/users/1 HTTP/1.1 {"role": "admin"}
- Step 1: Enumerate Allowed HTTP Methods
-
Protection Strategy Design
- Enforce Method Whitelist:
Explicitly prohibit dangerous methods at the gateway/web server (e.g., Nginx):location /api/ { limit_except GET POST { deny all; } } - Disable Method Override Functionality:
Disable override support in framework configurations (e.g., setspring.mvc.hiddenmethod.filter.enabled=falsein Spring Boot). - In-Depth Permission Validation:
- Implement resource-level access control (e.g., RBAC model) for PUT/DELETE/PATCH methods, ensuring users can only operate on their own data.
- Use annotations (like
@PreAuthorize) to validate field permissions in PATCH requests:@PatchMapping("/users/{id}") @PreAuthorize("hasPermission(#id, 'User', 'update')") public void updateUser(@PathVariable String id, @Valid @RequestBody UserUpdateRequest request) { // Only allow modification of non-sensitive fields (e.g., username, prohibit role changes) }
- Log Monitoring and Alerts:
Log all PUT/DELETE/PATCH operations and trigger real-time alerts for abnormal behaviors (e.g., frequent deletions).
- Enforce Method Whitelist:
-
Protection Effectiveness Verification
- Resend OPTIONS requests to confirm the response includes only safe methods (e.g., GET, POST).
- Attempt to upload a file using PUT; it should return
405 Method Not Allowed. - Simulate a PATCH privilege bypass attack to verify the system blocks it and logs a security event.
Through the above advanced protection measures, the deep-seated risks posed by insecure HTTP methods can be systematically eliminated.