Tập lệnh Python Bootstrap cũ tạo ra rủi ro chiếm đoạt tên miền trong gói PyPI

Tác giả T-X, T.M.Một 30, 2025, 12:19:24 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Các nhà nghiên cứu an ninh mạng đã phát hiện ra mã dễ bị tấn công trong các gói Python cũ có khả năng mở đường cho việc xâm phạm chuỗi cung ứng trên Python Package Index (PyPI) thông qua một cuộc tấn công chiếm quyền tên miền.

Công ty bảo mật chuỗi cung ứng phần mềm ReversingLabs cho biết họ đã tìm thấy "lỗ hổng" trong các tệp bootstrap do công cụ tự động hóa xây dựng và triển khai có tên "zc.buildout" cung cấp.


"Các tập lệnh tự động hóa quá trình tải xuống, xây dựng và cài đặt các thư viện và công cụ cần thiết", nhà nghiên cứu bảo mật Vladimir Pezo cho biết. "Cụ thể, khi tập lệnh bootstrap được thực thi, nó sẽ tìm nạp và thực thi một tập lệnh cài đặt cho gói Distribute từ python-distribute[.]org – một tên miền cũ hiện đang được bán với mức giá cao cấp, đồng thời được quản lý để tăng doanh thu quảng cáo."

Các gói PyPI bao gồm tập lệnh khởi động truy cập vào miền đang đề cập bao gồm tornado, pypiserver, slapos.core, roman, xlutils và testfixtures.

Vấn đề cốt lõi nằm ở một tập lệnh bootstrap cũ ("   Đăng nhập để xem liên kết ") được sử dụng cùng với công cụ zc.buildout để khởi tạo môi trường Buildout. Tập lệnh Python này cũng hỗ trợ khả năng cài đặt một tiện ích đóng gói có tên "Distribute", một nhánh tạm thời của dự án Setuptools, vào môi trường cục bộ.

Để đạt được điều này, tập lệnh cài đặt Distribute ("distribute_setup.py") được lấy từ python-distribute[.]org, một tên miền đã được rao bán từ năm 2014. Khi thêm tùy chọn này, ý tưởng là hướng dẫn tập lệnh khởi động tải xuống và cài đặt gói Distribute thay vì gói Setuptools cũ hơn để quản lý các thành phần và phụ thuộc cho bản dựng.

Điều quan trọng cần lưu ý là nhánh Distribute ra đời do thiếu sự phát triển tích cực của Setuptools, công cụ quản lý gói chính được sử dụng vào thời điểm đó. Tuy nhiên, các tính năng từ Distribute đã được tích hợp trở lại vào Setuptools vào năm 2013, khiến Distribute trở nên lỗi thời.

Vấn đề được ReversingLabs xác định liên quan đến việc nhiều gói vẫn tiếp tục gửi tập lệnh bootstrap cố gắng cài đặt Distribute theo mặc định hoặc khi tùy chọn dòng lệnh ("-d" hoặc "--distribute") được chỉ định. Điều này, cùng với việc tên miền đang bị tranh giành, đặt người dùng vào nguy cơ tiềm ẩn vì kẻ tấn công có thể lợi dụng thiết lập này để phát tán mã độc khi tập lệnh bootstrap được chạy vô tình và có khả năng đánh cắp dữ liệu nhạy cảm.

Mặc dù một số gói bị ảnh hưởng đã thực hiện các bước để loại bỏ tập lệnh bootstrap, gói slapos.core vẫn tiếp tục phát tán mã dễ bị tấn công. Gói này cũng được bao gồm trong phiên bản phát triển và bảo trì của Tornado.

Một khía cạnh quan trọng khác cần lưu ý ở đây là tập lệnh bootstrap không được thực thi tự động trong quá trình cài đặt gói và được viết bằng Python 2. Điều này có nghĩa là tập lệnh không thể được thực thi bằng Python 3 mà không cần chỉnh sửa. Tuy nhiên, sự hiện diện của tập lệnh này sẽ tạo ra một "bề mặt tấn công không cần thiết" mà kẻ tấn công có thể khai thác nếu các nhà phát triển bị lừa chạy mã kích hoạt việc thực thi tập lệnh bootstrap.

Mối đe dọa chiếm đoạt tên miền không phải là lý thuyết. Năm 2023, người ta phát hiện ra rằng gói npm fsevents đã bị một kẻ xấu xâm nhập, chiếm quyền kiểm soát một tài nguyên đám mây chưa được xác nhận được lưu trữ tại fsevents-binaries.s3-us-west-2.amazonaws[.]com để đẩy các tệp thực thi độc hại đến người dùng cài đặt một số phiên bản nhất định của gói (CVE-2023-45311, điểm CVSS: 9,8).

"Vấn đề nằm ở mô hình lập trình bao gồm việc truy xuất và thực thi payload từ một miền được mã hóa cứng, một mô hình thường thấy ở các phần mềm độc hại có hành vi tải xuống", Pezo nói. "Việc không chính thức ngừng hoạt động mô-đun Distribute đã khiến các tập lệnh bootstrap dễ bị tấn công tồn tại và khiến một số lượng chưa xác định các dự án có nguy cơ bị tấn công."

Việc tiết lộ này diễn ra khi HelixGuard phát hiện ra một gói phần mềm độc hại trong PyPI có tên là "spellcheckers" được cho là một công cụ kiểm tra lỗi chính tả bằng OpenAI Vision, nhưng lại chứa mã độc được thiết kế để kết nối với máy chủ bên ngoài và tải xuống một tải trọng giai đoạn tiếp theo, sau đó thực thi trojan truy cập từ xa (RAT).

Gói này, được tải lên PyPI lần đầu tiên vào ngày 15 tháng 11 năm 2025, bởi người dùng có tên leo636722, đã được tải xuống 955 lần. Hiện tại, gói này không còn khả dụng để tải xuống nữa.

"RAT này có thể nhận lệnh từ xa và thực thi mã Python do kẻ tấn công kiểm soát thông qua exec(), cho phép điều khiển từ xa toàn bộ máy chủ của nạn nhân", HelixGuard cho biết. "Khi người dùng cài đặt và chạy gói độc hại, cửa hậu sẽ được kích hoạt, cho phép kẻ tấn công điều khiển máy tính của người dùng từ xa."