Logic tái tạo URL của Starlette tạo ra sự không khớp nguy hiểm giữa đường dẫn được định tuyến và đường dẫn được ủy quyền. Khi một yêu cầu HTTP đến, bộ định tuyến xác định chính xác endpoint đích từ dòng yêu cầu thô. Tuy nhiên, khi ứng dụng sau đó kiểm tra request.url để quyết định xem người dùng có được ủy quyền hay không, Starlette xây dựng lại URL đó bằng cách nối tiêu đề Host với đường dẫn yêu cầu và phân tích cú pháp lại kết quả .
Kẻ tấn công có thể khai thác điều này bằng cách gửi một yêu cầu đến endpoint được bảo vệ như /admin/secure với tiêu đề Host bị nhiễm độc một cách tinh vi, ví dụ:
Host: legitimate.com/health?x=
Bộ định tuyến điều hướng yêu cầu một cách chính xác đến trình xử lý /admin/secure—nhưng khi middleware ủy quyền kiểm tra request.url.path, nó lại thấy /health. Nếu middleware sử dụng danh sách trắng (allowlist) tin tưởng /health là một endpoint kiểm tra sức khỏe công khai, kẻ tấn công sẽ lọt qua dễ dàng. Kiểm tra ủy quyền bị vượt qua một cách âm thầm; không cần token, mật khẩu hay bất kỳ tương tác nào từ người dùng .
Cố vấn từ X41 D-Sec xác nhận sự đơn giản đáng kinh ngạc: "Chỉ cần chèn một ký tự duy nhất vào tiêu đề HTTP Host là đủ để đánh lừa máy chủ" . Các ký tự cụ thể gây ra sự nhầm lẫn bao gồm dấu gạch chéo lên (
/), dấu hỏi chấm (?) và ký hiệu thăng (#)—những dấu phân cách URL tiêu chuẩn mà Starlette chưa bao giờ xác thực .
Phạm vi ảnh hưởng của lỗ hổng là đáng kinh ngạc. Starlette là động cơ ẩn đằng sau hầu hết các công cụ điều phối và phục vụ AI dựa trên Python, được tải xuống khoảng 325 triệu lần mỗi tuần . Tất cả các dự án sử dụng Starlette phiên bản trước 1.0.1 đều bị ảnh hưởng:
Các phiên bản bị ảnh hưởng đã được xác nhận trải dài từ Starlette >= 0.8.3 đến < 1.0.1, có nghĩa là các hệ thống đang chạy các bản phát hành ổn định trong nhiều năm đều có nguy cơ bị tấn công .
Mức độ nghiêm trọng chính thức của CVE-2026-48710 đã gây ra nhiều bất đồng đáng kể trong cộng đồng bảo mật:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N coi tác động về tính bảo mật và tính toàn vẹn là "Thấp", giới hạn phạm vi ở mức "Không thay đổi" và báo cáo không có tác động đến tính sẵn sàng CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:NBa yếu tố củng cố lập luận của các nhà nghiên cứu rằng điểm 6.5 là thấp một cách nguy hiểm:
SC:H/SI:H của CVSS v4.0 cuối cùng đã nắm bắt được Starlette phiên bản 1.0.1, được phát hành vào ngày 22 tháng 5 năm 2026, chứa bản vá dứt điểm. Bản sửa lỗi được theo dõi trong Tư vấn Bảo mật GitHub GHSA-86qp-5c8j-p5mr và tư vấn X41-2026-002 từ X41 .
Bản vá triển khai hai biện pháp bảo vệ cốt lõi:
Host hiện được xác thực dựa trên ngữ pháp được chỉ định trong RFC 9112 §3.2 và RFC 3986 §3.2.2 trước khi được sử dụng để tạo request.url scope["server"]—bộ thông tin kết nối máy chủ thực tế—thay vì giá trị do kẻ tấn công cung cấp. Nhờ đó, request.url.path luôn phản ánh đúng đường dẫn đã được định tuyến Dự án FastAPI đã xác nhận bản sửa lỗi có hiệu quả và khuyến nghị nâng cấp starlette lên >=1.0.1 ngay lập tức .
Nâng cấp gói Starlette là bước đầu tiên thiết yếu, nhưng một chiến lược phòng thủ toàn diện đòi hỏi nhiều lớp bảo vệ:
Vá lỗi ngay lập tức. Trong mọi môi trường ảo, image container và pipeline triển khai đang chạy hạ tầng AI, hãy thực thi:
pip install --upgrade starlette
Khởi động lại tất cả các dịch vụ bị ảnh hưởng. Điều này áp dụng cho cả các cài đặt Starlette trực tiếp cũng như các phiên bản FastAPI, vLLM, LiteLLM và máy chủ MCP .
Kiểm tra và ghim các phụ thuộc. FastAPI và các framework khác có thể không tự động áp đặt phiên bản Starlette tối thiểu. Hãy yêu cầu rõ ràng starlette>=1.0.1 trong requirements.txt, pyproject.toml, poetry.lock, hoặc các tệp khóa tương đương. Chạy pip list | grep starlette.
Quét mọi thành phần trong stack AI. Bất kỳ dịch vụ Python nào phục vụ HTTP—các ứng dụng FastAPI tùy chỉnh, endpoint suy luận LLM, mặt phẳng điều phối tác nhân, bảng đánh giá mô hình và proxy tương thích OpenAI—đều có thể chứa phiên bản Starlette dễ bị tấn công. Tiến hành kiểm tra toàn bộ hạ tầng .
Tăng cường proxy ngược và WAF. Cấu hình nginx, Envoy, HAProxy, Cloudflare hoặc AWS ALB để từ chối hoặc làm sạch các tiêu đề Host không đúng định dạng trước khi chuyển tiếp lưu lượng đến các ứng dụng Python. Điều này cung cấp khả năng phòng thủ theo chiều sâu, chặn đứng việc khai thác ngay cả khi việc vá ứng dụng bị trì hoãn .
Viết lại các kiểm tra an toàn đường dẫn để không dùng request.url.path. Nguyên nhân gốc rễ là sự không khớp giữa đường dẫn định tuyến và request.url.path. Bất cứ khi nào có thể, hãy chuyển middleware ủy quyền sang sử dụng request.scope["path"], được lấy từ phạm vi ASGI thô và không thể bị đầu độc bởi tiêu đề Host . X41 D-Sec khuyến nghị tránh hoàn toàn ủy quyền dựa trên đường dẫn mà thay vào đó là các cơ chế xác thực nội tại của endpoint
.
Kiểm tra khả năng bị lộ. Một công cụ quét trực tuyến đã được phát hành để giúp các tổ chức xác minh xem máy chủ của họ có dễ bị tấn công hay không . Kết hợp với kiểm tra thâm nhập kỹ lưỡng dựa trên các ranh giới xác thực, điều này có thể tiết lộ các bề mặt tấn công bị bỏ sót.
Đối với các triển khai dựa trên Debian, CVE-2026-48710 được theo dõi trong Debian Security Tracker với mức độ nghiêm trọng là "quan trọng" (important), và các bản phát hành điểm starlette đã được vá tương ứng có sẵn cho các phiên bản bị ảnh hưởng . Hãy áp dụng giao dịch
apt khắc phục từ kho bullseye-security hoặc tương đương, và tải lại các tệp systemd unit bị ảnh hưởng .
Comments
0 comments