Lỗ hổng nghiêm trọng trong việc triển khai chức năng memcpy cho ARMv7 từ Glibc

Các nhà nghiên cứu bảo mật của Cisco không che đậy chi tiết lỗ hổng (CVE-2020-6096) trong quá trình triển khai hàm memcpy() do Glibc cung cấp cho nền tảng ARMv32 7 bit. Sự cố xảy ra do xử lý không chính xác các giá trị âm của tham số xác định kích thước của vùng được sao chép, do sử dụng tối ưu hóa tập hợp để thao tác các số nguyên 32 bit đã ký. Việc gọi memcpy() trên hệ thống ARMv7 có kích thước âm dẫn đến việc so sánh các giá trị không chính xác và ghi vào một khu vực bên ngoài giới hạn của bộ đệm được chỉ định.

Lỗ hổng này có thể bị khai thác để thực thi mã trong trường hợp kẻ tấn công có thể tổ chức việc hình thành giá trị âm của biến mà qua đó kích thước của dữ liệu sao chép được truyền đi (ví dụ: nó sẽ chuyển sang giá trị âm khi truyền hơn 2 GB dữ liệu). data, nhưng trong quá trình tấn công, để vượt quá giới hạn bộ đệm, bạn cần truyền ít nhất 4GB). Hàm memcpy() được sử dụng rộng rãi trong các ứng dụng và bộ xử lý ARMv7 phổ biến trong các hệ thống ô tô, thiết bị di động, công nghiệp, tiêu dùng, truyền thông và thiết bị nhúng, có khả năng bị tấn công bằng Bluetooth, HD Radio/DAB, USB, CAN bus, Wi-Fi Fi và các nguồn dữ liệu bên ngoài khác (ví dụ: các dịch vụ và ứng dụng có thể truy cập qua mạng chấp nhận dữ liệu đầu vào mà không bị giới hạn kích thước có thể bị tấn công).

Một ví dụ là việc tạo ra một phương thức khai thác đang hoạt động để tấn công máy chủ HTTP được tích hợp trong hệ thống thông tin ô tô, có thể truy cập qua mạng Wi-Fi ô tô. Kẻ tấn công bên ngoài có thể khai thác lỗ hổng memcpy trên máy chủ này bằng cách gửi yêu cầu GET rất lớn và giành quyền truy cập root vào hệ thống.

Lỗ hổng nghiêm trọng trong việc triển khai chức năng memcpy cho ARMv7 từ Glibc

Trên các hệ thống x32 86 bit, sự cố không xuất hiện vì việc triển khai memcpy cho kiến ​​trúc này diễn giải chính xác biến kích thước là giá trị số nguyên không dấu của loại size_t (trong hợp ngữ thực hiện đối với ARMv7, nó được coi là số nguyên có dấu thay vì size_t). Bản sửa lỗi hiện có sẵn dưới dạng , sẽ được đưa vào bản cập nhật Glibc 2.32 tháng XNUMX.
Bản sửa lỗi tập trung vào việc thay thế việc sử dụng các hướng dẫn lắp ráp hoạt động trên các toán hạng có dấu (bge và blt) bằng các đối tượng không dấu (blo và bhs).

Vấn đề vẫn chưa được giải quyết Debian 9 và 10 (không hiển thị trong Debian 8), Fedora, Ubuntu, OpenEmbedded, Tizen (được glibc sử dụng). RHEL и SUSE Sự cố không bị ảnh hưởng vì chúng không hỗ trợ hệ thống ARMv32 7-bit. Android không bị ảnh hưởng bởi lỗ hổng này vì nó sử dụng triển khai libc (Bionic) của riêng mình. TRONG OpenWRT Theo mặc định, hầu hết các bản dựng đều sử dụng Musl, nhưng glibc cũng có sẵn trong kho lưu trữ.

Nguồn: opennet.ru

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