
Một nghiên cứu gần đây đã tiết lộ về bốn biến thể mới của kỹ thuật tấn công HTTP request smuggling. Chúng được sử dụng để nhắm tới các máy chủ web và máy chủ proxy HTTP thương mại.
Amit Klein, Phó Giám đốc bộ phận Nghiên cứu Bảo mật tại SafeBreach, người đã trình bày những phát hiện này tại hội nghị bảo mật Black Hat vừa qua, nói rằng các biến thể này đã cho thấy máy chủ web và máy chủ proxy HTTP vẫn dễ bị ảnh hưởng bởi HTTP request smuggling mặc dù nó đã được phát hiện lần đầu tiên vào 15 năm trước.
HTTP Request Smuggling là gì?
HTTP request smuggling (hay HTTP Desyncing – Bất đồng bộ HTTP) là một kỹ thuật được sử dụng để can thiệp vào quá trình trang web xử lý các chuỗi HTTP request nhận được từ một hay nhiều người dùng.
Các lỗ hổng liên quan đến HTTP request smuggling thường xuất hiện khi front-end (một bộ cân bằng tải hoặc proxy) và các máy chủ back-end có bất đồng trong việc xử lý boundary của một HTTP request, từ đó cho phép kẻ tấn công gửi (hay “tạo lén”) một request không xác định và ghép nó vào phần đầu request của người dùng hợp pháp tiếp theo.
Việc bất đồng bộ các request có thể bị khai thác để đánh cắp thông tin đăng nhập, trả các response sai cho người dùng, và thậm chí là lấy cắp dữ liệu từ request của nạn nhân, sau đó truyền những dữ liệu này đến một máy chủ do kẻ tấn công kiểm soát.
Kỹ thuật này được trình bày lần đầu tiên vào năm 2005 bởi một nhóm các nhà nghiên cứu từ Watchfire, gồm Klein, Chaim Linhart, Ronen Heled và Steve Orrin. Tuy nhiên, trong 5 năm qua, những kẻ tấn công đã sáng tạo và bổ sung thêm một số cải tiến mới, khiến phương pháp này mở rộng đáng kể phạm vi tấn công. Nó có thể ghép các request lại với nhau và “chiếm được quyền truy cập tối đa vào API nội bộ”, nhiễm độc web cache và xâm nhập vào trang đăng nhập của các ứng dụng phổ biến.
Có gì mới?
Các biến thể mới được Klein tiết lộ kết hợp sử dụng nhiều proxy-server khác nhau, bao gồm Abyss của Aprelium, Microsoft IIS, Apache và Tomcat trong chế độ web-server và Nginx, Squid, HAProxy, Caddy và Traefik trong chế độ HTTP proxy.
Dưới đây là danh sách tất cả bốn biến thể mới được phát hiện, bao gồm một biến thể cũ mà Klein đã khai thác thành công trong các thí nghiệm của mình.
- Variant 1: “Header SP/CR junk: …”
- Variant 2 – “Wait for It”
- Variant 3 – HTTP/1.2 to bypass mod_security-like defense
- Variant 4 – a plain solution
- Variant 5 – “CR header”
Khi xử lý các HTTP request chứa hai trường tiêu đề Content-Length, thì Abyss đã được phát hiện chỉ chấp nhận header thứ hai là hợp lệ, trong khi Squid sử dụng header đầu tiên, do đó dẫn đến việc hai máy chủ xử lý các request khác nhau và làm xuất hiện request smuggling.
Trong trường hợp Abyss nhận được một HTTP request với phần thân (body) có độ dài nhỏ hơn giá trị Content-Length được chỉ định, nó sẽ đợi 30 giây để thực hiện request, nhưng không bỏ qua phần thân còn lại của yêu cầu. Klein thấy rằng điều này cũng dẫn đến sự khác biệt giữa Squid và Abyss, bởi các phần xử lý sau của một outbound HTTP request sẽ được ghép như một request thứ hai.
Biến thể thứ ba của phương pháp này sử dụng HTTP/1.2 để tránh né hệ thống phòng thủ của tường lửa web (WAF). Trong Bộ quy tắc cốt lõi (CRS) của OWASP ModSecurity, tường lửa này được định rõ là dùng để ngăn chặn việc các cuộc tấn công HTTP request smuggling tạo ra payload và thực hiện các hành vi độc hại.
Cuối cùng, Klein phát hiện ra rằng sử dụng trường tiêu đề “Content-Type: text/plain” cũng đủ để vượt qua khâu kiểm tra paranoia level 1và 2 được chỉ định trong CRS và làm xuất hiện một lỗ hổng HTTP Request Smuggling.
Những biện pháp bảo vệ khả thi
Sau khi phát hiện này được tiết lộ cho Aprelium, Squid và OWASP CRS, các lỗ hổng đã được khắc phục trong Abyss X1 phiên bản 2.14, Squid phiên bản 4.12, 5.0.3 và CRS phiên bản 3.3.0.
Klein kêu gọi tiêu chuẩn hóa các outbound HTTP Request gửi đi từ các máy chủ proxy, và nhấn mạnh sự cần thiết của một giải pháp tường lửa website mạnh, open-source, có khả năng xử lý các cuộc tấn công HTTP Request Smuggling.
“ModSecurity (kết hợp với CRS) quả thực là một dự án open-source, nhưng nếu xét về độ mạnh và tính tổng quát, thì mod_security còn tồn tại một số nhược điểm. Nó không thể bảo vệ hệ thống hoàn toàn trước các cuộc tấn công HTTP Request Smuggling, và nó chỉ khả dụng cho Apache, IIS và nginx,” Klein lưu ý.
Để giải quyết vấn đề này, Klein đã cho công bố một library dựa trên C ++ trên GitHub. Library này giúp đảm bảo tất cả các HTTP request gửi đến là hoàn toàn hợp lệ và được xác định rõ ràng bằng cách yêu cầu nó phải tuân thủ nghiêm ngặt các quy tắc về định dạng HTTP header và định dạng request line.
Theo The Hacker News