Nâng cao đặc quyền trên máy chủ Linux qua lỗ hổng bảo mật DirtyPipe (CVE 2022-0847)
Giới thiệu
CVE 2022-0847 là một lỗ hổng leo thang đặc quyền được phát hiện bởi Max Kellerman, có trong Linux Kernel, phiên bản 5.8 cho phép ghi đè dữ liệu trong các tệp chỉ đọc tùy ý hoặc nói cách đơn giản hơn, cho phép các quy trình không có đặc quyền chèn mã vào quy trình đặc quyền root dẫn đến leo thang đặc quyền.
Max biết đến lỗ hổng này sau khi anh cố gắng giải quyết lỗi CRC chưa từng có trong nhật ký truy cập. Nhiều người dùng cm4all.com đã báo cáo rằng nhật ký truy cập hàng tháng, mặc dù có thể tải xuống nhưng không thể giải nén được và gây ra lỗi. Max giải thích trong bài đăng của mình cách anh ấy đã sử dụng cơ chế Z_SYNC_FLUSH cùng với việc ghép nối các tệp nhật ký hàng ngày vào kho lưu trữ ZIP hàng tháng có sẵn để tải xuống qua HTTP. Sau khi xem xét kỹ hơn, anh đã chạm đến gốc rễ của vấn đề.
Khai thác
Nếu bạn đã hiểu cách phát hiện và mô phỏng lỗ hổng trong đường ống thì việc khai thác khá dễ dàng. Bạn thấy đấy, cho đến bây giờ chúng ta đã học được cách ghi vào một tệp bằng cách cung cấp đầu vào thông qua đường ống có thể gây ra việc ghi tệp tùy ý. Như vậy việc khai thác được thực hiện như sau:
- Tạo một đường ống
- Điền vào đường ống dữ liệu tùy ý (để đặt cờ PIPE_BUF_FLAG_CAN_MERGE trong tất cả các mục trong vòng)
- Xả đường ống
- Ghép dữ liệu từ tệp đích (được mở ở chế độ ReadOnly) vào đường ống ngay trước phần bù đích.
- Ghi dữ liệu tùy ý vào pipe. Điều này bây giờ sẽ ghi đè Bộ đệm trang khi PIPE_BUF_FLAG_CAN_MERGE được đặt!
Nó hoạt động vì bộ đệm trang luôn có thể được ghi bởi Kernel và việc ghi vào một đường ống không bao giờ kiểm tra bất kỳ quyền nào.
Max đã đưa ra một mã khai thác mẫu trong bản viết ban đầu, mã này hoạt động tốt tuy nhiên chúng tôi sẽ không sử dụng mã đó ở đây.
Ở đây, chúng tôi sẽ trình bày hai phương pháp sẽ chuyển dữ liệu vào tệp “/etc/passwd” và cấp cho chúng tôi quyền sudo. Bạn có thể theo dõi GTFObins để hiểu phương pháp.
Trình diễn: Cách 1
Công cụ của Liam có tên là “kẻ phản bội” hay traitor gần đây đã được cập nhật để bao gồm một cách khai thác CVE 2022-0847. Đầu tiên, hãy xem liệu người dùng của chúng ta có phải là người dùng bình thường hay không.
Hoàn hảo, một người dùng có quyền riêng tư thấp. Để tải xuống tệp thực thi ELF, bạn có thể:
Bây giờ, bạn cần cấp cho nó quyền thực thi và chạy nó để phát hiện xem hệ điều hành hiện tại có dễ bị DirtyPipe hay không. Như bạn có thể thấy, Kernel 5.13 rất dễ bị khai thác!
Để chạy khai thác, chúng ta chỉ cần chạy lệnh này:
Và cứ như thế, chúng ta đã đạt được những đặc quyền được nâng cao! Việc khai thác đã chạy, chèn dữ liệu vào /etc/passwd khiến người dùng hiện tại của tôi phải root, sau đó tự động tạo ra một shell!
Trình diễn: Cách 2
Dựa trên những hướng dẫn tương tự, Arinerron cũng đã tạo ra một lỗ hổng trong C. Nó tạo bản sao lưu của /etc/passwd, chèn dữ liệu rồi khôi phục và sinh ra một shell dưới dạng root!
Để tải xuống, biên dịch và chạy nó, bạn có thể chạy các lệnh như hình sau:
Và cứ như thế, chúng ta đã root được!
Trạng thái bản vá
Lỗ hổng này đã được sửa trong Linux 5.16.11, 5.15.25 và 5.10.102 với các bản vá mới đang được tiến hành.
Phần kết luận
DirtyPipe là một lỗ hổng có mức độ ảnh hưởng cao với phương thức tấn công có độ phức tạp thấp. Các tổ chức phải vá ngay lập tức hệ thống của mình bằng các bản vá Kernel mới nhất ngay khi chúng được triển khai. Hy vọng bạn thích bài viết và cảm ơn vì đã đọc nó.
Khóa học đang khuyến mãi ETHICAL HACKING VỚI METASPLOIT - GCEH 1
Demo từ HackerSploit