22/10/2026 · VietTechies · Biên tập

Khi xây dựng các ứng dụng khách HTTP bảo mật trong Node.js, các nhà phát triển thường sử dụng các trình bao bọc tùy chỉnh để xác thực URL mục tiêu và quản lý chuyển hướng một cách an toàn. Theo một báo cáo kỹ thuật, việc kiểm tra @tak-ps/[email protected] đã phát hiện ra một lỗi tuân thủ chuyển hướng, trong đó các yêu cầu cụ thể không xóa sạch các tiêu đề còn sót lại sau khi xảy ra quá trình chuyển đổi phương thức.
Phát hiện phần tiêu đề sót lại thông qua kiểm thử bằng bộ khung cục bộ
Theo các phát hiện được ghi nhận, bất thường này xuất hiện khi mở rộng việc so sánh ứng dụng khách bên trong ssrf-lab, một bộ khung kiểm thử và kiểm tra sự tuân thủ cục bộ được thiết kế để đánh giá các biện pháp phòng chống Giả mạo Yêu cầu phía Máy chủ (SSRF). Khi thử nghiệm cách các trình bao bọc fetch khác nhau quản lý chuyển hướng với một máy chủ HTTP cục bộ, điểm cuối thử nghiệm sẽ phản hồi chính xác các phương thức, nội dung và tiêu đề mà nó nhận được. Mặc dù cả fetch gốc và trình bao bọc đều hoàn thành thành công yêu cầu POST ban đầu, nhưng một lần chuyển hướng 302 tiếp theo lại khiến điểm đến ghi nhận các tiêu đề nội dung còn sót lại mặc dù phần nội dung yêu cầu đã được loại bỏ thành công. Báo cáo lưu ý rằng hành vi tương tự cũng xảy ra đối với các giao dịch POST qua 301 và PUT qua 303, điều này chứng minh rằng việc đơn giản xác minh mã trạng thái cuối cùng hoặc kết quả của promise là chưa đủ để phát hiện ra các khoảng trống giao thức tinh vi này.
Tài liệu của dự án ssrf-lab nhấn mạnh rằng việc đánh giá tính an toàn của ứng dụng khách đòi hỏi phải kiểm tra những gì thực sự đến được máy chủ đích thay vì chỉ dựa vào các phản hồi thành công hoặc thất bại ở mức cao. Các bộ đếm lượt truy cập độc lập và chuỗi canary giúp cô lập xem một yêu cầu bị chặn bởi một chính sách bảo mật rõ ràng hay gặp phải một sai lệch giao thức không liên quan.
Bản vá thượng nguồn và phạm vi khắc phục
Theo thuật toán chuyển hướng Fetch chuẩn, việc chuyển đổi phương thức sẽ tự động loại bỏ các tiêu đề phần thân yêu cầu cốt lõi, chẳng hạn như mã hóa nội dung, ngôn ngữ, vị trí và kiểu nội dung. Nguồn tin cho biết mặc dù trình bao bọc bị ảnh hưởng đã thực hiện chính xác việc viết lại phương thức và xóa nội dung, nhưng nó lại bỏ sót bước làm sạch tiêu đề tương ứng. Để giải quyết vấn đề này, một yêu cầu kéo thượng nguồn có mã số PR #4 đã được gửi vào giữa tháng 10 năm 2026. Bản vá được đề xuất kết hợp một vòng lặp làm sạch tiêu đề tận dụng API Headers chuẩn để loại bỏ các tiêu đề phần thân yêu cầu này cùng với độ dài nội dung, đảm bảo các chi tiết khung do người gọi cung cấp không bị lưu lại một cách không mong muốn trong kết quả yêu cầu GET.
Bản vá được đề xuất phụ thuộc vào các điều kiện chọn lọc vì các mã trạng thái như 307 và 308 được thiết kế đặc biệt để giữ lại phương thức và nội dung yêu cầu ban đầu. Do đó, việc áp dụng thao tác xóa tiêu đề hàng loạt cho mọi loại chuyển hướng sẽ tạo ra các vấn đề tuân thủ mới, nhấn mạnh sự cần thiết phải có logic chi tiết bên trong các trình bao bọc fetch tùy chỉnh.
Phân tích: Lý do sự tuân thủ giao thức quan trọng đối với các trình bao bọc bảo mật web
Việc đánh giá tính bảo mật của ứng dụng khách HTTP đòi hỏi phải nhìn sâu hơn các phản hồi đạt hoặc không đạt đơn giản, như được nhấn mạnh bởi các thông tin kết hợp từ báo cáo kỹ thuật và tài liệu của bộ khung ssrf-lab. Các môi trường thử nghiệm chứng minh rằng một promise được giải quyết hoặc một yêu cầu có vẻ thất bại không tự động đảm bảo rằng cơ chế phòng thủ nội bộ tuân thủ các thông số kỹ thuật web chuẩn. Khi các nhà phát triển triển khai các trình bao bọc để kiểm tra và lọc lưu lượng truy cập đi so với các đích đến độc hại, những sơ suất tinh tế về tính tuân thủ—chẳng hạn như việc giữ lại các tiêu đề nội dung không khớp sau khi chuyển hướng làm thay đổi yêu cầu—có thể tạo ra các trường hợp ngoại lệ bất ngờ cho các dịch vụ vi mô hạ nguồn, cơ sở hạ tầng ghi nhật ký, hoặc các trình phân tích cú pháp ứng dụng nghiêm ngặt. Cuộc điều tra nhấn mạnh nguyên tắc rằng mã mạng tập trung vào bảo mật phải phản ánh chính xác các hành vi giao thức gốc trên tất cả các bước chuyển hướng, bao gồm cả mã trạng thái 301, 302 và 303. Nếu một trình bao bọc làm thay đổi phương thức yêu cầu mà không làm sạch hoàn toàn siêu dữ liệu tải trọng liên quan, các hệ thống phụ trợ dựa trên việc xác thực tiêu đề nghiêm ngặt có thể gặp phải các ngoại lệ của trình phân tích cú pháp hoặc hiểu sai các mẫu lưu lượng truy cập đến. Hơn nữa, việc duy trì tính chính xác của mã yêu cầu tuân thủ nghiêm ngặt các ngữ nghĩa dành riêng cho phương thức, tránh các giải pháp thay thế chung có thể vô tình làm hỏng các mã trạng thái hợp lệ như 307 hoặc 308. Do đó, các nhà phát triển duy trì các trình bao bọc ứng dụng khách tương tự phải đảm bảo rằng đường ống chuyển hướng của họ xác thực mọi thành phần của chuỗi yêu cầu dựa trên các quan sát đích thực tế, đảm bảo khả năng tương thích mạnh mẽ bên cạnh việc thực thi bảo mật.
Ảnh bìa: minh họa do AI tạo, kèm chữ tiêu đề; không phải ảnh tư liệu.
Nguồn: When POST becomes GET: a redirect bug in a Node.js fetch wrapper · GitHub – roshan-amble/ssrf-lab: A local attack range and conformance checker for SSRF defenses in HTTP clients: 10 probes, 3 clients, verdicts measured with a canary and a hit counter. · GitHub
