Một lỗ hổng trong io_uring cho phép người dùng không có quyền trở thành root ngay cả trong vùng chứa

Gần đây thông tin về lỗ hổng được tiết lộ (CVE-2022-29582) trong việc triển khai giao diện I / O không đồng bộ io_uring, có trong nhân Linux kể từ phiên bản 5.1, cho phép người dùng không có đặc quyền trở thành root trên hệ thống, ngay cả khi thực hiện khai thác vùng chứa.

điều đáng nói là cho biết lỗ hổng bảo mật đã được báo cáo chỉ hơn 3 tháng trước (khoảng đầu tháng XNUMX năm nay), nhưng thông tin và tiết lộ đầy đủ chỉ mới được công bố gần đây.

Về tính dễ bị tổn thương, nó được đề cập rằng điều này xảy ra khi truy cập một khối bộ nhớ đã được giải phóng, hiển thị trong nhân Linux bắt đầu với nhánh 5.10.

Giới thiệu về lỗ hổng CVE-2022-29582

Lỗ hổng này cho phép truy cập vào bộ nhớ đã giải phóng do điều kiện chạy đua khi xử lý thời gian chờ trong hàm io_flush_timeouts (),e xóa mục thời gian chờ khỏi danh sách và hủy nó mà không cần xác minh việc tạo và xóa thời gian chờ tại thời điểm đó.

Một mô tả chung cập nhật về io_uring đã được những người khác cung cấp. Họ giải thích nó tốt hơn gấp ngàn lần so với chúng tôi, vì vậy chúng tôi sẽ chỉ đề cập đến hệ thống con một cách rộng rãi hơn (xem bài viết Grapl Security và bài viết Flatt Security này để có phần giới thiệu tuyệt vời).

Điều gì là quan trọng hơn, trường opcode xác định loại thao tác sẽ thực hiện. Đối với mỗi "opcode" yêu cầu nó, trường fd chỉ định bộ mô tả tệp để thực hiện I / O được yêu cầu. Hầu như tất cả các cuộc gọi hệ thống I / O thông thường (đọc, gửi, v.v.) đều có mã quang không đồng bộ tương đương. Mỗi lĩnh vực có thể đảm nhận các vai trò khác nhau tùy thuộc vào hoạt động.

Sau khi được truy xuất từ ​​SQ, một SQE được chuyển đổi thành một biểu diễn bên trong được mô tả bởi struct io_kiocb (gọi lại đầu vào / đầu ra của hạt nhân). Những đối tượng này thường được gọi là yêu cầu.

struct io_kiocb được sử dụng tương đương với SQE "sẵn sàng để khởi chạy" mà nó dựa trên, theo đó bất kỳ trình mô tả tệp nào được phân giải thành tệp struct * s, thông tin đăng nhập của người dùng được đính kèm, nhân cách được đính kèm (trong đó lõi sẽ chạy), vân vân.

Sau khi hoạt động được yêu cầu hoàn tất, nó được ghi vào hàng đợi hoàn thành (CQ) một mục nhập tương ứng với SQE. Một mục nhập như vậy được gọi là mục nhập hàng đợi hoàn thành (CQE) và chứa các trường như mã lỗi và giá trị kết quả. Ứng dụng không gian người dùng có thể thăm dò CQ cho các mục nhập mới để xác định xem các SQE được gửi đã hoàn tất quá trình xử lý chưa và kết quả của chúng là gì.

Nó được đề cập rằng có một số tình huống trong đó có thể dễ dàng thay thế một đối tượng về tiến độ. Nhưng có hai hạn chế:

  • LT 'phải được gán và khởi tạo trong cửa sổ cuộc đua. Có nghĩa là, sau khi LT được phát hành nhưng trước khi đạt đến một điểm trong LT không còn được truy cập nữa.
  • LT 'chỉ có thể là một đối tượng struct io_kiocb khác. Do cách ly đống, nơi các đối tượng trong đống được phân tách theo loại của chúng, quá khó để gán lại chúng thành một loại đối tượng khác trong cửa sổ chủng tộc.

Các nhà nghiên cứu đã chuẩn bị một khai thác chức năng không yêu cầu bao gồm không gian tên định danh người dùng (không gian tên người dùng) cho hoạt động của nó và có thể cung cấp quyền truy cập root vào máy chủ lưu trữ khi người dùng không có đặc quyền khởi chạy khai thác trong một vùng chứa cô lập.

Khai thác của chúng tôi nhắm mục tiêu vào phiên bản hạt nhân 5.10.90, phiên bản mà Google đang chạy từ xa vào thời điểm đó. Chúng tôi đã phải điều chỉnh khai thác của mình theo các thông số kỹ thuật cụ thể của máy chủ (4 lõi Skylake Xeon @ 2.80Ghz, RAM 16GiB), nhưng với một số điều chỉnh, bất kỳ máy nào chạy hạt nhân dễ bị tấn công đều có thể khai thác được.

Khai thác cũng hoạt động trong môi trường nsjail được phân lập trên Google COS (Hệ điều hành tối ưu hóa vùng chứa) dựa trên Chromium OS và được sử dụng trên Google Cloud Platform trên máy ảo Compute Engine. Khai thác được thiết kế để hoạt động với các nhánh hạt nhân từ 5.10 đến 5.12. Cuối cùng, điều đáng nói là sự cố đã được khắc phục vào tháng 5.10.111 trong các bản cập nhật 5.15.34, 5.17.3 và XNUMX.

Cuối cùng, nếu bạn muốn biết thêm về lỗ hổng bảo mật, bạn có thể tham khảo ấn phẩm được thực hiện Trong liên kết sau đây.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: AB Internet Networks 2008 SL
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.