Lỗ hổng trong Python khi xử lý các số phân số không được xác thực trong ctypes

Đã có bản phát hành sửa lỗi của ngôn ngữ lập trình Python 3.7.10 và 3.6.13, giúp khắc phục lỗ hổng (CVE-2021-3177) có thể dẫn đến việc thực thi mã khi xử lý các số dấu phẩy động không được xác thực trong trình xử lý gọi hàm C bằng cơ chế ctypes . Sự cố này cũng ảnh hưởng đến nhánh Python 3.8 và 3.9, nhưng các bản cập nhật cho chúng vẫn ở trạng thái dự kiến ​​phát hành (dự kiến ​​phát hành vào ngày 1 tháng XNUMX).

Sự cố xảy ra do tràn bộ đệm trong hàm ctypes PyCArg_repr(), xảy ra do sử dụng sprintf không an toàn. Cụ thể, để xử lý kết quả của phép biến đổi 'sprintf(buffer, " ", self->tag, self->value.b)' đã phân bổ bộ đệm tĩnh 256 byte ("bộ đệm char [256]"), trong khi kết quả có thể vượt quá giá trị này. Để kiểm tra tính dễ bị tổn thương của các ứng dụng đối với lỗ hổng bảo mật, bạn có thể thử chuyển giá trị “1e300”, giá trị này khi được xử lý bằng phương thức c_double.from_param sẽ dẫn đến sự cố vì số kết quả chứa 308 ký tự và không vừa với một Bộ đệm 256 byte. Ví dụ về mã có vấn đề: import ctypes; x = ctypes.c_double.from_param(1e300); đại diện (x)

Sự cố vẫn chưa được khắc phục trong Debian, Ubuntu và FreeBSD nhưng đã được khắc phục trong Arch Linux, Fedora, SUSE. Trong RHEL, lỗ hổng bảo mật không xảy ra do việc lắp ráp gói ở chế độ FORTIFY_SOURCE, chế độ này chặn tình trạng tràn bộ đệm như vậy trong các hàm chuỗi.

Nguồn: opennet.ru

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