Mô tả
HTTP parser chấp nhận mọi method không xác định, cho phép TRACE (XST), PROPFIND, hoặc method chứa ký tự điều khiển.
Vị trí
- `libs/http/http_parser.cpp:160-162` (`parseMethod`)
Nguyên nhân
```cpp
} else {
m_request.m_method.assign(p_start, len); // ⚠️ nhận BẤT KỲ method nào
}
```
Sau khi match whitelist (GET/POST/PUT/DELETE/HEAD/OPTIONS/PATCH), nhánh `else` gán thẳng mọi method còn lại mà không validate.
Rủi ro:
- TRACE / XST (Cross-Site Tracing): reflect header Authorization/Cookie qua method TRACE.
- Method chứa `\r\n` hoặc ký tự điều khiển → request smuggling/log injection.
- Method rất dài → memory.
Fix đề xuất
- Whitelist các method chuẩn (RFC 9110), reject phần còn lại với `400 Bad Request`.
- Kiểm tra mọi byte trong method là token char (RFC 9110 §5.6.2: `!#$%&'*+-.^_` + alnum).
- Cap độ dài method (vd. 8 byte).
Mức độ: 🟡 Medium
Mô tả
HTTP parser chấp nhận mọi method không xác định, cho phép TRACE (XST), PROPFIND, hoặc method chứa ký tự điều khiển.
Vị trí
Nguyên nhân
```cpp⚠️ nhận BẤT KỲ method nào
} else {
m_request.m_method.assign(p_start, len); //
}
```
Sau khi match whitelist (GET/POST/PUT/DELETE/HEAD/OPTIONS/PATCH), nhánh `else` gán thẳng mọi method còn lại mà không validate.
Rủi ro:
Fix đề xuất
Mức độ: 🟡 Medium