Skip to content

[Security] Parser chấp nhận HTTP method tùy ý (TRACE/XST, ký tự điều khiển) #12

Description

@JkarVN

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

Metadata

Metadata

Assignees

Labels

mediumPriority: mediumsecuritySecurity vulnerability

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions