modelcontextprotocol / modelcontextprotocol/python-sdk
check_resource_allowed treats /api/../admin as under /api
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 24.3k
- Fork
- 4k
- Merge trung bình
- 1 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 31
Mô tả
What happened
check_resource_allowed pads trailing slashes and then does requested_path.startswith(configured_path). It does not collapse . / ...
On main @ 08a3bc8 these return True:
- requested
https://example.com/api/../adminvs configuredhttps://example.com/api - requested
https://example.com/mcp/..vs configuredhttps://example.com/mcp - requested
https://example.com/api/%2e%2e/adminvs configuredhttps://example.com/api
tests/shared/test_auth_utils.py already rejects /api123 vs /api (path-boundary). Dot-segments are not covered.
What I expected
A requested path that walks out of the configured prefix should not match. /api/foo/../v1 vs /api can still match after normalisation, because it stays under /api.
How to reproduce
from mcp.shared.auth_utils import check_resource_allowed
check_resource_allowed("https://example.com/api/../admin", "https://example.com/api")
# True today. I expected False.
I can send a PR that percent-decodes once, runs posixpath.normpath, then keeps the existing trailing-slash prefix rule. Happy to do that if you want it.
Written with AI assistance. I read auth_utils.py next to the path-boundary tests and reproduced it locally.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu trong auth_utils.py tại check_resource_allowed và xem lại các trường hợp ranh giới đường dẫn hiện có trong tests/shared/test_auth_utils.py. Bổ sung phạm vi kiểm thử cho các phân đoạn dấu chấm, các phân đoạn dấu chấm được mã hóa phần trăm và các đường dẫn vẫn nằm dưới tiền tố đã cấu hình, sau đó chạy các bài kiểm thử tiện ích auth liên quan. Công việc được xem là hoàn tất khi các đường dẫn thoát khỏi tiền tố đã cấu hình không khớp, còn các đường dẫn đã chuẩn hóa vẫn nằm dưới tiền tố đó thì tiếp tục khớp.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- api, security
- Loại issue
- Lỗi
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 82/100