Lỗ hổng trong Python cho phép gọi các lệnh hệ thống từ các tập lệnh hộp cát

Một phương pháp đã được xuất bản để vượt qua các hệ thống thực thi mã bị cô lập trong Python, dựa trên việc sử dụng một lỗi đã biết từ lâu xuất hiện trong Python 2.7, được xác định vào năm 2012 và chưa được sửa trong Python 3. Lỗi này cho phép sử dụng các liên kết đặc biệt Mã Python để bắt đầu truy cập vào bộ nhớ đã được giải phóng (Sử dụng sau khi miễn phí) trong Python. Ban đầu, người ta cho rằng lỗi không gây ra mối đe dọa bảo mật và chỉ trong những trường hợp rất hiếm, thường được tạo ra một cách giả tạo, mới có thể dẫn đến việc chấm dứt tập lệnh một cách bất thường.

Một nhà nghiên cứu bảo mật có bút danh kn32 đã quan tâm đến vấn đề này và đã cố gắng chuẩn bị một cách khai thác có thể gọi bất kỳ lệnh hệ thống nào mà không cần truy cập trực tiếp vào các phương thức như os.system. Việc khai thác được triển khai bằng Python thuần túy và hoạt động mà không cần nhập các thư viện bên ngoài cũng như không cần cài đặt trình xử lý “code.__new__”. Trong số các hook, chỉ sử dụng “buildin.__id__”, thường không bị cấm. Về mặt thực tế, mã được đề xuất có thể được sử dụng để bỏ qua các cơ chế cách ly trong các dịch vụ và môi trường khác nhau (ví dụ: trong môi trường học tập, hệ vỏ trực tuyến, trình xử lý tích hợp, v.v.), cho phép thực thi mã Python nhưng hạn chế các cuộc gọi khả dụng và không cho phép các phương thức gọi như os.system.

Mã được đề xuất tương tự lệnh gọi os.system, hoạt động bằng cách khai thác lỗ hổng trong CPython. Lỗ hổng này hoạt động với tất cả các phiên bản Python 3 trên hệ thống có kiến ​​trúc x86-64 và thể hiện hoạt động ổn định trên Ubuntu 22.04, ngay cả khi bật chế độ bảo vệ PIE, RELRO và CET. Công việc bao gồm việc lấy thông tin từ mã Python về địa chỉ của một trong các hàm trong mã CPython thực thi được. Dựa trên địa chỉ này, địa chỉ cơ sở của CPython trong bộ nhớ và địa chỉ của hàm system() trong phiên bản libc được tải trong bộ nhớ sẽ được tính toán. Cuối cùng, quá trình chuyển đổi trực tiếp đến một địa chỉ hệ thống cụ thể được bắt đầu bằng việc thay thế con trỏ của đối số đầu tiên thành dòng “/bin/sh”.

Lỗ hổng trong Python cho phép gọi các lệnh hệ thống từ các tập lệnh hộp cát


Nguồn: opennet.ru

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