Lỗ hổng SMTP Smuggling phơi bày lỗi bảo mật Pipelining tồn tại hàng thập kỷ

Nhóm Cộng đồng BigGo
Lỗ hổng SMTP Smuggling phơi bày lỗi bảo mật Pipelining tồn tại hàng thập kỷ

Một lỗ hổng bảo mật mới được phát hiện có tên gọi SMTP smuggling đã thu hút sự chú ý trở lại về những rủi ro bảo mật lâu dài của kỹ thuật pipelining trong giao thức email. Phương thức tấn công này khai thác những lỗ hổng cơ bản trong cách các máy chủ email xử lý nhiều lệnh được gửi liên tiếp nhanh chóng, có thể cho phép kẻ tấn công giả mạo địa chỉ email và vượt qua các biện pháp bảo mật.

Lỗ hổng này có nguồn gốc từ các quyết định triển khai được thực hiện hàng thập kỷ trước trong các máy chủ email phổ biến như Sendmail , Postfix và Exim . Những máy chủ này cho phép các ký tự kết thúc dòng không chuẩn để duy trì khả năng tương thích, tạo ra một lỗ hổng mà kẻ tấn công hiện có thể khai thác thông qua các kỹ thuật pipelining tinh vi.

Các máy chủ email bị ảnh hưởng:

  • Sendmail (nguồn gốc lỗ hổng ban đầu)
  • Postfix
  • Exim
  • Các máy chủ khác triển khai hành vi tương thích với Sendmail

Nguyên nhân gốc rễ của các vấn đề Pipelining

Vấn đề cốt lõi xuất phát từ cách các máy chủ email đời đầu được thiết kế để xử lý kết nối mạng. Nhiều triển khai dựa vào các máy trạng thái đơn giản giả định rằng các lệnh sẽ đến từng cái một, theo mô hình yêu cầu-phản hồi truyền thống. Khi nhiều lệnh được gửi nhanh chóng thông qua pipelining, những máy chủ này có thể bị nhầm lẫn về việc phản hồi nào thuộc về lệnh nào.

Vấn đề trở nên đặc biệt nguy hiểm khi các máy chủ sử dụng theo dõi trạng thái ngầm định thay vì quản lý trạng thái kết nối rõ ràng. Nếu một máy chủ giả định rằng mỗi sự kiện mạng tương ứng với một lệnh duy nhất, nó có thể xử lý các lệnh không theo thứ tự hoặc liên kết phản hồi với các yêu cầu sai. Điều này có thể dẫn đến việc chấp nhận các địa chỉ email không hợp lệ hoặc từ chối những địa chỉ hợp lệ.

Máy trạng thái: Một khái niệm lập trình trong đó một hệ thống có thể ở một trong nhiều trạng thái được định nghĩa và chuyển đổi giữa chúng dựa trên đầu vào hoặc sự kiện.

Thách thức quản lý Buffer

Một yếu tố quan trọng khác góp phần vào những lỗ hổng này liên quan đến việc quản lý buffer đọc không đầy đủ trong các triển khai máy chủ đời đầu. Khi các máy chủ đọc dữ liệu từ kết nối mạng mà không có quản lý buffer phù hợp, chúng có thể chỉ xử lý các lệnh một phần hoặc trộn lẫn nhiều lệnh với nhau một cách không chính xác.

Hàm đọc lệnh SMTP chỉ đọc bất cứ thứ gì nó có thể lấy từ kernel. Nếu kết nối là half-duplex như mong đợi (theo mô hình một lệnh, một phản hồi), sẽ chỉ có một lệnh SMTP trong buffer sau khi việc đọc hoàn thành.

Vấn đề buffering này trở nên quan trọng khi kết hợp với các thực hành cũ như sử dụng các thao tác fork/exec với các luồng đầu vào/đầu ra tiêu chuẩn. Dữ liệu có thể bị mất hoặc bị hỏng khi các tiến trình chuyển giao quyền điều khiển cho các chương trình trợ giúp, dẫn đến hành vi máy chủ không thể dự đoán.

Chi tiết lỗ hổng chính:

  • Phương thức tấn công: SMTP Smuggling
  • Nguyên nhân gốc rễ: Ký tự kết thúc dòng LF không chuẩn so với chuẩn CR+LF
  • Dòng thời gian: Lỗ hổng đã tồn tại hàng thập kỷ trước khi được phát hiện
  • Tác động: Tiềm năng giả mạo email và vượt qua bảo mật

Các giải pháp hiện đại và biện pháp phòng ngừa

Các phương pháp lập trình đương đại cung cấp những giải pháp tốt hơn cho những thách thức pipelining này. Các mô hình virtual threading, trong đó mỗi kết nối có thread riêng chuyên dụng, có thể loại bỏ nhiều điều kiện race gây ra sự hỏng hóc máy trạng thái. Những thread này có thể an toàn chờ đợi các thao tác như truy vấn DNS mà không ảnh hưởng đến các kết nối khác.

Các hệ thống quản lý trạng thái tiên tiến cũng cung cấp các cơ chế để xếp hàng và hoãn các sự kiện cho đến khi máy chủ đạt đến trạng thái phù hợp để xử lý chúng. Điều này ngăn chặn các lệnh được xử lý không theo thứ tự, ngay cả khi chúng đến liên tiếp nhanh chóng.

Việc phát hiện SMTP smuggling đóng vai trò như một lời nhắc nhở rằng các lỗ hổng cấp giao thức có thể tồn tại hàng thập kỷ trước khi được phát hiện và khai thác. Các quản trị viên email nên đảm bảo máy chủ của họ được cập nhật với các bản vá bảo mật mới nhất và cân nhắc vô hiệu hóa hỗ trợ pipelining nếu nó không cần thiết cho hoạt động của họ.

Tham khảo: pipelined state machine corruption