Lỗ hổng root sudo ảnh hưởng đến Linux Mint và Elementary OS

Trong tiện ích sudo, được sử dụng để tổ chức thực hiện các lệnh thay mặt cho người dùng khác, xác định tính dễ bị tổn thương (CVE-2019-18634), cho phép bạn tăng đặc quyền của mình trong hệ thống cho người dùng root. Sự cố chỉ xuất hiện kể từ khi phát hành sudo 1.7.1 khi sử dụng tùy chọn “pwfeedback” trong tệp /etc/sudoers, tùy chọn này bị tắt theo mặc định nhưng được bật trên một số bản phân phối như Linux Mint và Elementary OS. Đã khắc phục sự cố trong bản phát hành sudo 1.8.31, được xuất bản cách đây vài giờ. Lỗ hổng vẫn chưa được sửa trong bộ công cụ phân phối.

Tùy chọn “pwfeedback” cho phép hiển thị ký tự “*” sau mỗi ký tự được nhập khi nhập mật khẩu. Bởi vì Lỗi Khi triển khai hàm getln(), được xác định trong tệp tgetpass.c, một chuỗi mật khẩu quá lớn được truyền qua luồng đầu vào tiêu chuẩn (stdin) trong một số điều kiện nhất định có thể không vừa với bộ đệm được phân bổ và ghi đè lên dữ liệu khác trên ngăn xếp. Lỗi tràn xảy ra khi chạy mã sudo với quyền root.

Bản chất của vấn đề là khi sử dụng ký tự đặc biệt ^U (xóa dòng) trong khi nhập và nếu thao tác ghi không thành công, mã chịu trách nhiệm xóa các ký tự “*” đầu ra sẽ đặt lại dữ liệu trên kích thước bộ đệm có sẵn, nhưng không đưa con trỏ về vị trí hiện tại có giá trị ban đầu trong bộ đệm. Một yếu tố khác góp phần vào việc khai thác là thiếu tính năng tự động tắt chế độ “pwfeedback” khi dữ liệu đến không phải từ thiết bị đầu cuối mà thông qua luồng đầu vào (lỗ hổng này cho phép tạo điều kiện xảy ra lỗi ghi, chẳng hạn như trên các hệ thống có một chiều kênh không tên xảy ra lỗi khi cố gắng ghi vào cuối kênh đọc).

Vì kẻ tấn công có toàn quyền kiểm soát việc ghi đè dữ liệu trên ngăn xếp nên không khó để tạo ra một cách khai thác cho phép kẻ tấn công leo thang đặc quyền của mình để root. Bất kỳ người dùng nào cũng có thể khai thác vấn đề này, bất kể quyền sudo hay cài đặt dành riêng cho người dùng trong sudoers. Để ngăn chặn sự cố, bạn nên đảm bảo rằng không có cài đặt “pwfeedback” trong /etc/sudoers và nếu cần, hãy tắt nó (“Mặc định !pwfeedback”). Để kiểm tra xem có vấn đề gì không, bạn có thể chạy mã:

$ Perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Mật khẩu: Lỗi phân đoạn

Nguồn: opennet.ru

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