Khai thác lỗ hổng leo thang đặc quyền CVE-2022-0847 trong Linux

DDos

VIP Members
22/10/2013
524
2.191 bài viết
Khai thác lỗ hổng leo thang đặc quyền CVE-2022-0847 trong Linux
Vào tháng 3 năm nay, nhà nghiên cứu an ninh mạng Max Kellerman đã công bố chi tiết về lỗ hổng trong Linux kernel cho phép hacker ghi đè dữ liệu trong các tệp read-only tùy ý, dẫn đến các tiến trình không có đặc quyền đưa mã vào tiến trình có đặc quyền cao hoặc đặc quyền root và do đó, dẫn đến việc leo thang đặc quyền. Kẻ tấn công chiếm được quyền root có toàn quyền kiểm soát hệ thống mục tiêu và có thể tận dụng quyền kiểm soát đó để tiếp cận các hệ thống khác.

audit_Pentest.png

Lỗ hổng có mã định danh CVE-2022-0847, CVSS 7.8. Kellermann giải thích rằng lỗi ảnh hưởng đến Linux Kernel 5.8 và cách thức khai khác cực kỳ dễ dàng. Trong bài viết này, mình sẽ hướng dẫn các bạn cách khai thác lỗ hổng này để dành quyền root trong hệ thống.

Phân tích lỗ hổng

Max Kellerman khi phân tích nhật ký truy cập của các tệp zip đã để ý đến giá trị hex dump của các tệp:

1.jpg
Trong đó:
Tuy nhiên, giá trị hex dump của tệp bị hỏng là:

2.jpg
Trong đó:
  • 50 4b 01 02: Giá trị CRC của tệp zip đã bị thay đổi. 50 4b tương đương với các ký tự la-tinh là P và K trong bảng mã ASCII. 01 02 là mã cho tiêu đề tệp thư mục trung tâm (central directory file header).
  • 1e 03 14 00: Độ lớn của tệp theo số thập phân 1.3Mb (Thay đổi so với 19191 bytes ban đầu)
Giá trị CRC thay đổi để biểu thị các chữ cái “PK” là tiêu đề của tệp *.zip và tiêu đề tệp thư mục trung tâm. 1e 03 bằng 30 (UNIX v3.0) và 14 00 là phiên bản cần để giải nén (dịch sang ASCII 20 hoặc v2.0). Max nhận thấy rằng header đã bị cắt bớt sau 8 byte. Lỗi này bắt nguồn từ quá trình pipe (dùng để chuyển hướng trên hệ điều hành Linux, nó cho phép người dùng sử dụng hai hoặc nhiều lệnh sao cho đầu ra của một lệnh đóng vai trò trực tiếp làm đầu vào của lệnh tiếp theo.)

Điều làm Max ngạc nhiên là các lỗi xảy ra nhiều nhất vào ngày cuối cùng của mỗi tháng.
  • 2021-11-21 xảy ra 2 lỗi
  • 2021-11-30 xảy ra 7 lỗi
  • 2021-12-31 xảy ra 6 lỗi
  • 2022-01-31 xả ra 4 lỗi
Sau khi phân tích, nhà nghiên cứu phát hiện vấn đề nằm trong quá trình ghép nối nhật ký của các ngày khác nhau. Lỗi pipe bắt nguồn từ quá trình ghi đè CRC với tiêu đề của tệp ZIP.

Max mô phỏng quá trình các dữ liệu không mong muốn bị ghi đè vào tệp zip như sau:
  1. Mở tệp “foo” và ghi “AAAAA” vào tệp.
    3.jpg
  2. Tiếp tục chuyển dữ liệu từ tệp này sang pipe cách sử dụng splice() và sau đó ghi chuỗi “BBBBB” vào pipe

4.jpg
Chuỗi “BBBBB” được ghi vào foo tệp mặc dù quy trình thứ hai không có quyền ghi vào foo tệp. Hàm PIPE_BUF_FLAG_CAN_MERGE có lỗi trong quá trình khởi tạo. Trong kernel 5.8, bằng cách chèn PIPE_BUF_FLAG_CAN_MERGE vào tham chiếu bộ đệm trang, có thể ghi đè dữ liệu trong bộ đệm trang bằng cách ghi dữ liệu mới vào pipe được chế tạo đặc biệt.

Quá trình khai thác lỗ hổng trải qua 4 bước:
  1. Tạo pipe
  2. Nhập vào pipe với dữ liệu tùy ý với mục đích thiết lập PIPE_BUF_FLAG_CAN_MERGE flag tới tất cả các ring (Linux có tất cả 4 ring bao gồm Ring0, Ring1, Ring2, Ring3)
  3. Tác động vào lệnh pipe
  4. Nối dữ liệu từ tệp đích (được mở ở chế độ ReadOnly) vào pipe ngay trước offset mục tiêu.
  5. Ghi dữ liệu tùy ý vào pipe. Thao tác này sẽ ghi đè bộ đệm trang khi PIPE_BUF_FLAG_CAN_MERGE được thiết lập
Lỗ hổng tồn tại vì bộ nhớ cache của trang luôn luôn được ghi bởi kernel và việc ghi vào pipe không kiểm tra bất kỳ quyền nào.

Khai thác lỗ hổng

traitor là một công cụ cho phép khai thác nhiều lỗ hổng đã được tiết lộ để nâng cao đặc quyền trong hệ thống Linux. Công cụ này tích hợp nhiều công nghệ và lỗ hổng khác nhau để giành quyền root bao gồm:
  • Nearly all of GTFOBins
  • Writeable docker.sock
  • CVE-2022-0847 (Dirty pipe)
  • CVE-2021-4034 (pwnkit)
  • CVE-2021-3560
  1. Tải công cụ: wget https://github.com/liamg/traitor/releases/download/v0.0.14/traitor-amd64
  2. Kiểm tra đặc quyền hiện tại
    5.jpg
  3. Chạy công cụ để xem, hệ thống có bị ảnh hưởng bởi lỗ hổng CVE-2022-0847 hay không

    6.jpg


    Như bạn có thể thấy, hệ thống bị ảnh hưởng bởi lỗi này
  4. Chạy khai thác và giành quyền root

    7.jpg
    8.jpg

Lời khuyên

Các nhà phát triển và duy trì Linux kernel đã phát hành các bản sửa lỗi (5.16.11, 5.15.25, 5.10.102) vào ngày 23/2 và Google đã hợp nhất bản sửa lỗi của Kellermann vào nhân Android vào ngày 24/2. Với việc chi tiết kỹ thuật và mã khai thác được công khai, người dùng nên cập nhật các bản phân phối của Linux lên kernel mới nhất để tránh gặp rủi ro.
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
cve 2022-0847 linux kernel
Bên trên