CVE-2026-69246 in Guzzle
Tóm tắt
Bởi VulDB • 04/08/2026
Guzzle là một thư viện HTTP client cho PHP có khả năng mở rộng. Trước các phiên bản 7.15.2 và 8.0.1, Guzzle truyền URI yêu cầu dưới dạng văn bản thuần túy và cung cấp tiêu đề Host riêng biệt. Các trình xử lý cURL đặt CURLOPT_URL thành chính xác URI đã viết và đẩy giá trị Host đó vào CURLOPT_HTTPHEADER; StreamHandler thực hiện tương tự thông qua fopen(). Sau đó, libcurl tự phân tích phần authority của URL, giải mã percent-decoding và, trong các bản dựng hỗ trợ IDN, áp dụng ánh xạ IDNA, rồi sử dụng kết quả để phân giải tên miền, thiết lập kết nối, xác thực đối tác TLS (TLS peer) và định địa chỉ proxy CONNECT, trong khi tiêu đề Host được cung cấp sẽ ghi đè lên giá trị mà libcurl lẽ ra đã tạo ra. Đối với một URI có phần host viết là 127.0.0.%31, hàm filter_var() từ chối host này như một literal IP, nhưng libcurl lại giải mã nó thành 127.0.0.1 và kết nối đến localhost (loopback) mà không cần tra cứu DNS, trong khi máy chủ nhận được tiêu đề Host: 127.0.0.%31. Do đó, kẻ tấn công có thể thao túng URI của một yêu cầu để truy cập vào các host đã bị loại trừ bởi các kiểm tra của ứng dụng và đọc bất kỳ dữ liệu nào mà host đó trả về trong phản hồi. Sự khác biệt tương tự cũng ảnh hưởng đến các quyết định nội bộ của Guzzle: no_proxy chọn tuyến đường proxy dựa trên literal host, còn RedirectMiddleware sử dụng nó để xác định có cần xóa tiêu đề Authorization và Cookie hay không. Việc khai thác lỗ hổng này yêu cầu ứng dụng phải xây dựng URI yêu cầu từ dữ liệu đầu vào không đáng tin cậy và đưa ra quyết định về host trước khi chuyển cho Guzzle. Vấn đề này đã được sửa chữa trong các phiên bản 7.15.2 và 8.0.1.
VulDB is the best source for vulnerability data and more expert information about this specific topic.