Lỗ hổng trong OpenSMTPD cho phép truy cập root từ xa và cục bộ

Công ty Qualys tiết lộ một lỗ hổng nghiêm trọng từ xa khác (CVE-2020-8794) trong máy chủ thư MởSMTPD, được phát triển bởi dự án OpenBSD. Giống như cái được xác định vào cuối tháng 1 sự dễ bị tổn thương, một sự cố mới khiến có thể thực thi từ xa các lệnh shell tùy ý trên máy chủ có quyền người dùng root. Tính dễ bị tổn thương loại bỏ trong vấn đề OpenSMTPD 6.6.4p1.

Sự cố xảy ra do lỗi trong mã gửi thư đến máy chủ thư từ xa (không phải lỗi trong mã xử lý các kết nối đến). Cuộc tấn công có thể xảy ra ở cả phía máy khách và phía máy chủ. Về phía máy khách, cuộc tấn công có thể xảy ra trong cấu hình mặc định của OpenSMTPD, trong đó OpenSMTPD chỉ chấp nhận các yêu cầu trên giao diện mạng nội bộ (localhost) và gửi tin nhắn thư đến các máy chủ bên ngoài. Để khai thác lỗ hổng, chỉ cần trong quá trình gửi thư, OpenSMTPD thiết lập một phiên với máy chủ thư do kẻ tấn công kiểm soát hoặc kẻ tấn công có thể xâm nhập vào kết nối máy khách (MITM hoặc chuyển hướng trong các cuộc tấn công qua DNS hoặc BGP) là đủ. ).

Đối với cuộc tấn công phía máy chủ, OpenSMTPD phải được định cấu hình để nhận các yêu cầu mạng bên ngoài từ các máy chủ thư khác hoặc phục vụ các dịch vụ của bên thứ ba cho phép bạn gửi yêu cầu đến một email tùy ý (ví dụ: biểu mẫu xác nhận địa chỉ trên trang web). Ví dụ: kẻ tấn công có thể kết nối với máy chủ OpenSMTPD và gửi một lá thư không chính xác (đến một người dùng không tồn tại), điều này sẽ dẫn đến phản hồi gửi một lá thư có mã lỗi (trả lại) đến máy chủ của kẻ tấn công. Kẻ tấn công có thể khai thác lỗ hổng khi OpenSMTPD kết nối để gửi thông báo đến máy chủ của kẻ tấn công. Các lệnh shell được đưa vào trong cuộc tấn công được đặt trong một tệp được thực thi với quyền root khi OpenSMTPD được khởi động lại, vì vậy kẻ tấn công phải đợi OpenSMTPD khởi động lại hoặc bắt đầu sự cố OpenSMTPD để hoàn thành cuộc tấn công.

Sự cố xảy ra trong hàm mta_io() trong mã phân tích phản hồi nhiều dòng được máy chủ từ xa trả về sau khi kết nối được thiết lập (ví dụ: "250-ENHANCEDSTATUSCODES" và "250 HELP"). OpenSMTPD tính toán rằng dòng đầu tiên bao gồm số có ba chữ số và văn bản được phân tách bằng ký tự “-“ và dòng thứ hai chứa số có ba chữ số và văn bản được phân tách bằng dấu cách. Nếu số có ba chữ số không có khoảng trắng và văn bản ở dòng thứ hai theo sau thì con trỏ được sử dụng để xác định văn bản sẽ được đặt thành byte theo sau ký tự '\0' và cố gắng sao chép dữ liệu ở cuối dòng. của dòng vào bộ đệm.

Theo yêu cầu của dự án OpenBSD, việc công bố thông tin chi tiết về việc khai thác lỗ hổng đã bị trì hoãn đến ngày 26 tháng 2015 để cho phép người dùng cập nhật hệ thống của họ. Vấn đề đã xuất hiện trong cơ sở mã từ tháng 2018 năm 6.6, nhưng việc khai thác trước khi thực thi mã với quyền root đã có thể xảy ra kể từ tháng 5.9 năm 10. Các nhà nghiên cứu đã chuẩn bị một nguyên mẫu hoạt động của lỗ hổng này, nguyên mẫu này đã được thử nghiệm thành công trong các bản dựng OpenSMTPD cho OpenBSD 11, OpenBSD 31, Debian XNUMX, Debian XNUMX (thử nghiệm) và Fedora XNUMX.

Trong OpenSMTPD cũng xác định Một lỗ hổng khác (CVE-2020-8793) cho phép người dùng cục bộ đọc dòng đầu tiên của bất kỳ tệp nào trên hệ thống. Ví dụ: bạn có thể đọc dòng đầu tiên của /etc/master.passwd, dòng này chứa hàm băm mật khẩu của người dùng root. Lỗ hổng này cũng cho phép bạn đọc toàn bộ nội dung của tệp do người dùng khác sở hữu nếu tệp này nằm trong cùng hệ thống tệp với thư mục /var/spool/smtpd/. Sự cố này không thể khai thác được trên nhiều bản phân phối Linux có giá trị của /proc/sys/fs/protected_hardlinks được đặt thành 1.

Vấn đề là hậu quả của việc loại bỏ không đầy đủ vấn đề, được nêu trong cuộc kiểm toán do Qualys thực hiện vào năm 2015. Kẻ tấn công có thể thực thi mã của mình với quyền của nhóm “_smtpq” bằng cách đặt biến “PATH=.”. và đặt một tập lệnh có tên makemap vào thư mục hiện tại (tiện ích smtpctl chạy makemap mà không chỉ định rõ đường dẫn). Bằng cách giành quyền truy cập vào nhóm "_smtpq", kẻ tấn công sau đó có thể gây ra tình trạng tương tranh (tạo một tệp lớn trong thư mục ngoại tuyến và gửi tín hiệu SIGSTOP) và trước khi quá trình xử lý hoàn tất, hãy thay thế tệp trong thư mục ngoại tuyến bằng một phần cứng liên kết tượng trưng trỏ đến tệp đích có nội dung cần đọc.

Đáng chú ý là trong Fedora 31, lỗ hổng này cho phép bạn ngay lập tức giành được các đặc quyền của nhóm gốc, vì quy trình smtpctl được trang bị cờ gốc setgid, thay vì cờ setgid smtpq. Bằng cách giành quyền truy cập vào nhóm gốc, bạn có thể ghi đè nội dung của /var/lib/sss/mc/passwd và có toàn quyền truy cập root vào hệ thống.

Nguồn: opennet.ru

Thêm một lời nhận xét