Lỗ hổng nghiêm trọng trong thư viện Python PLY cho phép thực thi mã từ xa

WhiteHat Team

Administrators
Thành viên BQT
09/04/2020
124
1.540 bài viết
Lỗ hổng nghiêm trọng trong thư viện Python PLY cho phép thực thi mã từ xa
Một lỗ hổng nghiêm trọng vừa được phát hiện trong thư viện Python PLY (Python Lex-Yacc), cho phép kẻ tấn công thực thi mã từ xa thông qua một tính năng không được công bố trong phiên bản 3.11 phát hành trên PyPI. Lỗ hổng này được định danh là CVE-2025-56005 và do nhà nghiên cứu bảo mật Ahmed Abd phát hiện.
python.png

Theo phân tích kỹ thuật, CVE-2025-56005 thuộc nhóm lỗ hổng thực thi mã tùy ý, liên quan trực tiếp đến việc giải tuần tự dữ liệu không tin cậy, tương ứng với CWE-502. Nguyên nhân xuất phát từ một tham số ẩn có tên picklefile trong hàm ply.yacc.yacc(). Khi được sử dụng, tham số này khiến PLY nạp các bảng parser từ một tệp .pkl bằng cách gọi trực tiếp pickle.load() của Python mà không có bất kỳ cơ chế xác thực hay kiểm tra an toàn nào.

Việc sử dụng pickle trong Python vốn tiềm ẩn rủi ro cao, bởi quá trình deserialization có thể kích hoạt việc thực thi mã tùy ý thông qua các phương thức như reduce(). Điều này đồng nghĩa với việc nếu kẻ tấn công có thể kiểm soát hoặc can thiệp vào tệp .pkl được truyền cho yacc(picklefile=...), mã độc sẽ được thực thi ngay trong giai đoạn khởi tạo parser, trước cả khi ứng dụng bắt đầu xử lý dữ liệu đầu vào.

Đáng chú ý, tham số picklefile không hề được đề cập trong tài liệu chính thức của PLY cũng như trên kho GitHub của dự án, nhưng lại tồn tại và hoạt động trong bản phát hành trên PyPI. Việc một cơ chế nhạy cảm như vậy không được công bố khiến nhiều hệ thống sử dụng PLY có thể vô tình mở ra bề mặt tấn công nghiêm trọng mà không hề hay biết.

Trong trường hợp bị khai thác, nếu kẻ tấn công có khả năng đặt hoặc chỉnh sửa tệp pickle mà ứng dụng sử dụng để tải bảng parser, chúng có thể thực thi mã tùy ý trên hệ thống, kích hoạt mã độc ngay trong giai đoạn khởi động ứng dụng hoặc cài cắm cơ chế tồn tại âm thầm thông qua các bảng parser đã bị đầu độc. Nguy cơ này gia tăng đáng kể trong các môi trường nơi bảng parser được lưu cache trên đĩa, đặt trong thư mục dùng chung, tái sử dụng trong pipeline CI/CD hoặc được nạp từ các đường dẫn có thể cấu hình và ghi được.

Bằng chứng khai thác cho thấy việc tấn công có thể được thực hiện với mức độ tối giản, thông qua việc tạo bảng parser được tuần tự hóa bằng pickle. Payload độc hại có thể lợi dụng cơ chế deserialization của Python để thực thi lệnh hệ điều hành ngay trong quá trình nạp bảng parser. Khi yacc(picklefile=...) được gọi, mã độc sẽ được kích hoạt trong giai đoạn khởi tạo parser, trước khi ứng dụng xử lý bất kỳ dữ liệu đầu vào nào.

Trong khi chưa có bản vá chính thức, người dùng PLY được khuyến nghị áp dụng các biện pháp giảm thiểu sau:​
  • Tránh sử dụng tham số picklefile, đặc biệt với các tệp đến từ nguồn không tin cậy hoặc nằm ở vị trí có thể bị ghi.​
  • Coi mọi tệp pickle là dữ liệu không an toàn, kể cả khi chúng chỉ được sử dụng như cache nội bộ.​
  • Ưu tiên tái sinh bảng parser khi khởi động ứng dụng thay vì nạp từ đĩa.​
  • Siết chặt quyền truy cập và kiểm soát chặt chẽ các đường dẫn lưu trữ bảng parser.​
Ngoài ra, cần thực hiện các bước rà soát và kiểm tra sau:​
  • Rà soát mã nguồn để phát hiện việc sử dụng yacc(picklefile=...).​
  • Kiểm tra lại các pipeline CI/CD nhằm loại bỏ nguy cơ chèn tệp .pkl độc hại trong quá trình build hoặc triển khai.​
  • Đánh giá các hệ thống lưu trữ dùng chung nơi các tệp .pkl có thể tồn tại.​
  • Theo dõi sát các thông báo cập nhật liên quan đến CVE-2025-56005 để kịp thời có biện pháp ứng phó.​
Theo Cyber Press​
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
cve-2025-56005 python ply rce
Bên trên