pip 26.3 (2/11/2026) chính thức rút lại câu khẳng định quen thuộc “cài đặt wheel không chạy mã”: chính sách bảo mật mới thừa nhận pip không thể đảm bảo việc cài một wheel sẽ không thực thi mã của bên thứ ba. Cùng lúc, bản này biến cảnh báo import bất thường lúc cài đặt thành lỗi cứng và sửa lỗi hash-checking khiến hash đã ghim bị bỏ qua.
Đây không phải một CVE mới — nhưng nó chạm trực tiếp tới thói quen pip install mỗi ngày của mọi lập trình viên Python.
Chính sách bảo mật đổi giọng
Từ bản 26.2 (29/7/2026), tài liệu SECURITY.md của pip viết rõ: “Installing a wheel does not run code from it”. Câu này chỉ sống qua ba bản 26.2–26.2.2, rồi bị gỡ ở 26.3 (PR #14412). Câu thay thế thừa nhận pip không thể đảm bảo việc cài wheel sẽ không thực thi mã bên thứ ba — vì hệ thống import của Python là động. Nhóm bảo trì nói đây chỉ là làm rõ, không phải rút cam kết.
Import bất thường trong lúc cài đặt giờ thành lỗi
Từ pip 26.1, pip chỉ cảnh báo khi một module bất ngờ được import trong lúc cài đặt. Từ 26.3, hành vi này bị chặn thành lỗi (#13842): một wheel có thể đặt file vào module của package khác — kể cả của chính pip — rồi pip vô tình load mã đó.
Đã có tiền lệ cuối năm 2024: một wheel độc hại thay thế module nội bộ của pip và pip chạy luôn mã thay thế (issue #13079, đã vá ở pip 25.0). Câu hỏi “còn cách nào khác không” vẫn mở từ tháng 2/2026 — và 26.3 trả lời bằng cơ chế chặn.
Sửa lỗi hash đã ghim bị bỏ qua
Tùy chọn –no-require-hashes (mới từ pip 26.2) cho phép ghim hash cho vài requirement mà không ép tất cả cũng phải có hash. Nhưng ở 26.2 đến 26.2.2, pip mắc lỗi: nó chấp nhận hash do index cung cấp thay cho –hash đã ghim — tức một file khác vẫn được tải và cài đặt dù hash không khớp. pip 26.3 sửa lỗi này (#14355): hash bạn ghim giờ được tôn trọng.
Điều này có ý nghĩa gì với bạn
Hãy coi pip install như chạy mã của bên thứ ba, không phải chỉ giải nén file. Với môi trường quan trọng, bật –require-hashes để kiểm tra hash mọi package và dùng –only-binary :all: để loại hẳn source distribution — vì sdist chắc chắn chạy mã lúc build. Chính sách mới cũng gợi ý: chạy pip bằng python -P -m pip install (Python 3.11+) hoặc thêm -I ở bản cũ; giữ file thư viện chuẩn không cho tài khoản chạy pip ghi đè; chỉ cài wheel từ nguồn tin cậy. Nâng cấp bằng python -m pip install –upgrade pip. Sau nâng cấp, kiểm tra log CI vì file .pth có thể gây lỗi.
Bài viết liên quan
- PyPI “đóng hai cánh cửa”: khóa upload vào bản cũ quá 14 ngày và đóng băng index HTML
- Python 3.15 ra mắt ngày 1/10: frozendict, lazy import tường minh và JIT nhanh hơn — checklist trước khi nâng cấp
- Lỗ hổng nghiêm trọng trong MCP Python SDK: server độc hại có thể đánh cắp OAuth credentials — hãy cập nhật lên 1.30.0 hoặc 2.2.0
Câu hỏi thường gặp
pip 26.3 có vá CVE nào không?
Không. Đây là thay đổi chính sách, một cơ chế chặn import và một bản sửa lỗi hash — không gắn CVE hay advisory mới nào.
Tôi có cần nâng cấp lên pip 26.3 ngay không?
Nên, nhất là nếu bạn dùng –no-require-hashes hoặc CI cài nhiều package từ index nội bộ. Với máy cá nhân, nâng cấp chỉ là một lệnh.
Wheel có còn an toàn hơn source distribution không?
Vẫn an toàn hơn, vì cài sdist chắc chắn chạy mã build do package tự chọn. Nhưng “an toàn hơn” không còn đồng nghĩa với “không chạy mã” — hãy đối xử với wheel như mã chưa tin cậy.
💬 Tin này ảnh hưởng tới dự án của bạn thế nào? Chia sẻ góc nhìn của bạn trong phần bình luận — mình đọc hết và sẽ tổng hợp những ý hay nhất.
Nguồn tham khảo
- pip documentation — Changelog, pip 26.3 (2026-11-02): https://pip.pypa.io/en/latest/news/
- THEXARIS Labs — pip 26.3 removes “Installing a wheel does not run code from it” from its security policy: https://blog.thexaris-labs.com/en/blog/pip-26-3-wheel-install-can-run-code-security-policy-blocked-imports-2026
- pip documentation — Secure installs: https://pip.pypa.io/en/stable/topics/secure-installs/
