Lỗ hổng từ xa trong lớp Shim cho phép bạn vượt qua UEFI Secure Boot

Lớp Shim, được sử dụng trong hầu hết các bản phân phối Linux để khởi động được xác minh ở chế độ Khởi động an toàn UEFI, có một lỗ hổng (CVE-2023-40547) có thể dẫn đến việc thực thi mã từ xa và bỏ qua cơ chế khởi động được xác minh của UEFI Secure Boot. Kẻ tấn công kiểm soát máy chủ HTTP mà Shim truy cập có thể trả về một phản hồi được tạo ra đặc biệt dẫn đến việc ghi có kiểm soát vào bộ đệm ngoài giới hạn để cho phép thực thi mã sớm trong giai đoạn tải.

Lỗ hổng này xảy ra do lỗi trong mã tải xuống tệp qua HTTP, lỗi này biểu hiện khi xử lý các phản hồi không chính xác được trả về bởi máy chủ HTTP được shim truy cập. Chế độ HTTPBoot trong Shim đã được hỗ trợ từ năm 2016 và cho phép bạn tổ chức tải xuống qua mạng bằng giao thức HTTP để truy xuất tệp bằng trình tải được gọi trong bước tiếp theo. Shim, khi tải xuống tệp qua HTTP, sẽ phân bổ bộ đệm cho dữ liệu đã nhận, không tính đến kích thước thực của dữ liệu mà là kích thước được chỉ định trong tiêu đề "Độ dài nội dung" HTTP. Theo đó, bằng cách trả về giá trị nhỏ hơn trong tiêu đề Độ dài nội dung, bạn có thể đảm bảo rằng phần đuôi của yêu cầu được ghi vào bộ nhớ bên ngoài ranh giới bộ đệm.

Shim được Microsoft ký điện tử và xác minh GRUB2 bằng chứng chỉ riêng của mình, điều này cho phép các nhà phát triển phân phối tránh phải có mọi bản cập nhật kernel và GRUB được Microsoft chứng nhận. Lỗ hổng trong Shim khiến nó có thể xâm nhập vào chuỗi tin cậy khi chế độ Khởi động an toàn đang hoạt động và giành toàn quyền kiểm soát quá trình khởi động tiếp theo, chẳng hạn như tải một hệ điều hành khác, sửa đổi các thành phần hệ điều hành và bỏ qua tính năng bảo vệ Lockdown.

Lỗ hổng đã được khắc phục trong bản phát hành Shim 15.8, nhưng để ngăn chặn hoàn toàn cuộc tấn công thông qua Shim, phiên bản mới phải được Microsoft chứng nhận và triển khai trong bộ công cụ phân phối. Tình trạng sửa lỗ hổng trong các bản phân phối có thể được đánh giá trên các trang này: Debian, Ubuntu, SUSE, RHEL, Fedora. Vấn đề là nếu không thu hồi chữ ký của phiên bản cũ thì việc sửa lỗi là vô nghĩa, vì kẻ tấn công có thể sử dụng phương tiện có khả năng khởi động với bản phát hành Shim dễ bị tấn công để xâm phạm UEFI Secure Boot. Nhưng việc thu hồi chữ ký sẽ khiến các bản phân phối tiếp tục sử dụng bản phát hành Shim cũ không thể được xác minh để khởi động.

Để chặn lỗ hổng mà không thu hồi chữ ký số, các bản phân phối có thể sử dụng cơ chế SBAT (UEFI Secure Boot Advanced Targeting), cơ chế được hỗ trợ cho GRUB2, shim và fwupd trong hầu hết các bản phân phối Linux phổ biến. SBAT được phát triển cùng với Microsoft và liên quan đến việc thêm siêu dữ liệu bổ sung vào các tệp thực thi của các thành phần UEFI, bao gồm thông tin về nhà sản xuất, sản phẩm, thành phần và phiên bản. Siêu dữ liệu được chỉ định được chứng nhận bằng chữ ký số và có thể được đưa riêng vào danh sách các thành phần được phép hoặc bị cấm đối với Khởi động an toàn UEFI.

SBAT cho phép bạn chặn việc sử dụng chữ ký số cho số phiên bản thành phần riêng lẻ mà không cần phải thu hồi khóa cho Secure Boot. Việc chặn lỗ hổng thông qua SBAT không yêu cầu sử dụng danh sách thu hồi chứng chỉ UEFI (dbx), nhưng được thực hiện ở cấp độ thay thế khóa nội bộ để tạo chữ ký và cập nhật GRUB2, shim và các tạo phẩm khởi động khác do các bản phân phối cung cấp.

Ngoài lỗ hổng được thảo luận ở trên, Shim 15.8 còn khắc phục một số vấn đề ít nguy hiểm hơn được khai thác cục bộ:

  • CVE-2023-40548 Lỗi tràn số nguyên trong hàm verify_sbat_section dẫn đến tràn bộ đệm trên hệ thống 32 bit.
  • CVE-2023-40546 Xảy ra việc đọc bộ nhớ ngoài giới hạn khi báo cáo lỗi thông qua hàm LogError().
  • CVE-2023-40549 Lỗi đọc ngoài bộ đệm xảy ra khi xử lý tệp PE được tạo đặc biệt trong hàm verify_buffer_authenticcode().
  • CVE-2023-40550 Bộ nhớ ngoài bộ đệm được đọc trong hàm verify_buffer_sbat().
  • CVE-2023-40551 Việc đọc bộ nhớ ngoài giới hạn xảy ra khi phân tích cú pháp các tệp MZ.

Nguồn: opennet.ru

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