Các lỗ hổng trong swhkd, trình quản lý lối tắt cho Wayland

Một loạt lỗ hổng đã được xác định trong swhkd (Simple Wayland HotKey Daemon) do hoạt động không chính xác với các tệp tạm thời, tham số dòng lệnh và ổ cắm Unix. Chương trình được viết bằng Rust và xử lý việc nhấn phím nóng trong các môi trường dựa trên giao thức Wayland (một dạng tương tự tương thích với tệp cấu hình của quy trình sxhkd được sử dụng trong môi trường dựa trên X11).

Gói này bao gồm quy trình swhks không có đặc quyền thực hiện các hành động phím nóng và quy trình swhkd nền chạy dưới quyền root và tương tác với các thiết bị đầu vào ở cấp API uinput. Ổ cắm Unix được sử dụng để tổ chức tương tác giữa swhks và swhkd. Bằng cách sử dụng quy tắc Polkit, bất kỳ người dùng cục bộ nào cũng có thể chạy quy trình /usr/bin/swhkd với quyền root và truyền các tham số tùy ý cho nó.

Các lỗ hổng được xác định:

  • CVE-2022-27815 – Lưu PID quy trình vào một tệp có tên có thể dự đoán được và trong một thư mục mà người dùng khác có thể ghi (/tmp/swhkd.pid). Bất kỳ người dùng nào cũng có thể tạo một tệp /tmp/swhkd.pid và đặt pid của một quy trình hiện có vào đó, điều này sẽ khiến swhkd không thể khởi động. Nếu không có biện pháp bảo vệ chống lại việc tạo liên kết tượng trưng trong /tmp, lỗ hổng này có thể được sử dụng để tạo hoặc ghi đè các tệp trong bất kỳ thư mục hệ thống nào (PID được ghi vào tệp) hoặc xác định nội dung của bất kỳ tệp nào trên hệ thống (swhkd in toàn bộ nội dung của tệp PID vào thiết bị xuất chuẩn). Đáng chú ý là trong bản sửa lỗi được phát hành, tệp PID không được di chuyển vào thư mục /run mà vào thư mục /etc/swhkd/runtime/swhkd_{uid}.pid), nơi nó cũng không thuộc về.
  • CVE-2022-27814 – Bằng cách thao tác tùy chọn dòng lệnh “-c” được sử dụng để chỉ định tệp cấu hình, có thể xác định sự tồn tại của bất kỳ tệp nào trên hệ thống. Ví dụ: để kiểm tra /root/.somefile bạn có thể chạy “pkexec /usr/bin/swhkd -d -c /root/.somefile” và nếu thiếu tệp thì lỗi “/root/.somefile không tồn tại " sẽ được hiển thị. Như trong trường hợp lỗ hổng đầu tiên, việc khắc phục sự cố là điều khó hiểu - việc khắc phục sự cố bắt nguồn từ thực tế là tiện ích bên ngoài “cat” ('Command::new(“/bin/cat”)).arg(path) hiện được khởi chạy để đọc tệp cấu hình.output()').
  • CVE-2022-27819 – Sự cố cũng liên quan đến việc sử dụng tùy chọn “-c”, khiến toàn bộ tệp cấu hình được tải và phân tích cú pháp mà không kiểm tra kích thước và loại tệp. Ví dụ: để gây ra sự từ chối dịch vụ bằng cách hết bộ nhớ trống và tạo I/O giả, bạn có thể chỉ định một thiết bị khối khi khởi động ("pkexec /usr/bin/swhkd -d -c /dev/sda") hoặc một thiết bị ký tự tạo ra luồng dữ liệu vô hạn. Sự cố đã được giải quyết bằng cách đặt lại các đặc quyền trước khi mở tệp, nhưng việc khắc phục chưa hoàn tất, vì chỉ có ID người dùng (UID) được đặt lại nhưng ID nhóm (GID) vẫn giữ nguyên.
  • CVE-2022-27818 – Ổ cắm Unix được tạo bằng tệp /tmp/swhkd.sock được tạo trong thư mục có thể ghi, dẫn đến các vấn đề tương tự như lỗ hổng đầu tiên (bất kỳ người dùng nào cũng có thể tạo /tmp/swhkd.sock và tạo hoặc chặn sự kiện nhấn phím).
  • CVE-2022-27817 - Sự kiện đầu vào được chấp nhận từ tất cả thiết bị và trong tất cả các phiên, tức là. người dùng từ một phiên Wayland khác hoặc từ bảng điều khiển có thể chặn các sự kiện khi người dùng khác nhấn phím nóng.
  • CVE-2022-27816 Quá trình swhks, giống như swhkd, sử dụng tệp PID /tmp/swhks.pid trong thư mục /tmp có thể ghi. Vấn đề tương tự như lỗ hổng đầu tiên, nhưng không nguy hiểm bằng vì swhks đang chạy dưới quyền của người dùng không có đặc quyền.

Nguồn: opennet.ru

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