Sau khi phát hiện ra lỗ hổng cho phép kết nối root mà không cần xác minh mật khẩu vào cuối tháng Giêng, một số kỹ thuật leo thang đặc quyền đã được phát hiện trong máy chủ telnetd thuộc bộ GNU InetUtils, xuất phát từ một bản vá chưa hoàn chỉnh của lỗ hổng năm 1999 (CVE-1999-0073).
Các lỗ hổng này xuất phát từ khả năng của telnetd trong việc truyền các biến môi trường đến máy chủ thông qua tùy chọn ENVIRON. Các biến môi trường này được thiết lập và xử lý trong ngữ cảnh của tiến trình telnetd và được truyền đến các tiến trình con do nó khởi chạy, bao gồm cả tiến trình /bin/login được khởi chạy với quyền root. Lỗ hổng CVE-1999-0073 cho phép máy khách telnet truyền biến môi trường LD_LIBRARY_PATH, khi được thiết lập, sẽ khiến một thư viện chia sẻ do người dùng chỉ định được tải khi tiến trình đăng nhập bắt đầu. Với khả năng tải lên các tệp vào một hệ thống hỗ trợ kết nối telnet, kẻ tấn công có thể tải lên một thư viện được tạo đặc biệt và khiến nó được tải với quyền root.
Trong telnetd thuộc bộ công cụ GNU InetUtils, một lỗ hổng đã được khắc phục bằng cách vô hiệu hóa các biến môi trường nguy hiểm thông qua việc lọc bằng các mặt nạ "LD_," "LIBPATH," "ENV," "IFS," và "_RLD_." Tuy nhiên, biến môi trường "CREDENTIALS_DIRECTORY," được xử lý trong quá trình khởi động /usr/bin/login, đã được bỏ chặn. Sử dụng biến môi trường này, người dùng có thể thay đổi thư mục chứa thông tin đăng nhập và đặt một tệp login.noauth trong thư mục mới với giá trị "yes," cho phép đăng nhập không cần mật khẩu (tương tự như việc truyền cờ "-f" cho tiến trình đăng nhập). Cài đặt này áp dụng cho tất cả người dùng, bao gồm cả người dùng root.
Cuộc tấn công bao gồm việc một người dùng không có đặc quyền tạo một thư mục con trong thư mục chính của họ, tải tệp login.noauth lên đó và cố gắng đăng nhập bằng cách thiết lập biến môi trường "CREDENTIALS_DIRECTORY=thư mục đã tạo" và truyền biến môi trường "USER=root" (Telnet có chế độ kết nối tự động trong đó tên người dùng không được lấy từ dòng lệnh mà được truyền qua biến môi trường "USER"). Ví dụ về một lỗ hổng khai thác.
Một phương pháp khác để giành quyền truy cập root thông qua telnetd đã được phát hiện. Phương pháp này liên quan đến việc thao tác các biến môi trường OUTPUT_CHARSET và LANGUAGE được xử lý bởi thư viện GNU gettext, và biến môi trường GCONV_PATH được sử dụng trong glibc. Bằng cách thiết lập các biến môi trường OUTPUT_CHARSET và LANGUAGE, kẻ tấn công có thể kích hoạt chức năng chuyển đổi mã hóa ký tự trong gettext, chức năng này gọi hàm iconv_open(). Khi thực thi hàm iconv_open() trong khi tải tệp cấu hình gconv-modules, đường dẫn được tính toán bằng cách sử dụng biến môi trường GCONV_PATH. Bằng cách thay thế tệp gconv-modules, có thể tải một thư viện chia sẻ tùy chỉnh trong khi quá trình đăng nhập đang xuất ra một chuỗi được bản địa hóa.
Mã định danh CVE chưa được gán cho các lỗ hổng đã được xác định. Phương pháp giảm thiểu được đề xuất là sử dụng danh sách trắng các giá trị chấp nhận được ("TERM," "DISPLAY," "USER," "LOGNAME," và "POSIXLY_CORRECT") trong khi chặn tất cả các biến môi trường khác, tương tự như cách OpenSSH quản lý các biến môi trường. Các lỗ hổng đã được xác nhận trong gói GNU InetUtils, được triển khai. người phục vụ Telnetd là phiên bản được cung cấp bởi Debian, Ubuntu và các bản phân phối dựa trên Debian. Các bản vá lỗi cho GNU InetUtils hiện chưa có sẵn. Rocky Linux 9 đi kèm với một phiên bản telnetd đã được sửa đổi, không còn dễ bị tấn công và sử dụng kiểm tra danh sách trắng thay vì lọc các biến môi trường nguy hiểm. Chức năng lọc danh sách trắng cũng được triển khai trong telnetd từ FreeBSD. Telnetd đã bị loại bỏ khỏi OpenBSD vào năm 2005.
Nguồn: opennet.ru
