Một dòng mới thừa có thể phá vỡ TLS sau CONNECT
Kiểm tra cách đóng khung tiêu đề HTTP khi một trình kết nối proxy viết tay mở đường hầm và ngay lập tức tạo ra lỗi giải mã TLS.
Khi CONNECT trả về 200 và TLS ngay lập tức không giải mã được, hãy kiểm tra các byte ranh giới trong trình kết nối trước khi thay đổi chứng chỉ hoặc mã hóa.
Một giá trị ủy quyền được tạo có thể đã kết thúc bằng một dòng mới. Thêm một kết thúc dòng nữa có thể kết thúc tiêu đề HTTP quá sớm, để lại một trường Host dự định hoặc văn bản thuần khác phía sau yêu cầu.
Một yêu cầu HTTP/1.1 CONNECT tối thiểu dùng CRLF giữa các dòng và một dòng trống ở cuối:
b"CONNECT example.com:443 HTTP/1.1\r\nHost: example.com:443\r\n\r\n"Đặt bất kỳ trường ủy quyền nào trước dòng trống cuối cùng đó, không có ngắt dòng nhúng. Trong Python, "\n" đại diện cho một dòng mới; chuỗi thô chứa dấu gạch chéo ngược và chữ n thì không. Kiểm tra trình trợ giúp mã hóa tạo ra byte nào trước khi cố gắng loại bỏ chúng—các trình trợ giúp cũ có thể thêm ngắt dòng.
Sau khi CONNECT thành công, những byte còn lại thuộc về giao thức đường hầm. Văn bản thuần đi lạc có thể đến một đối tác đang chờ TLS. Trạng thái thành công không thể sửa chữa các byte đã xếp hàng sau một yêu cầu sai định dạng.
Cũng kiểm tra ranh giới nhận. Đọc toàn bộ phản hồi proxy trước khi chuyển socket cho TLS, xử lý các lần đọc một phần và giữ lại mọi thứ đọc được ngoài tiêu đề. Một lần đọc socket không nhất thiết phải chứa một thông điệp trọn vẹn.
Nếu trình phân tích này là của bạn, hãy so sánh biểu diễn byte đã biên tập với ngữ pháp đường truyền; giữ độ dài và ranh giới dòng hiển thị trong khi ẩn mật khẩu. Đối với ứng dụng chỉ cần kết nối proxy, một trình kết nối được duy trì giúp tránh phải sở hữu mã đóng khung này.