
GitHub Vô hiệu hóa Mặc định Script Cài đặt npm để Ngăn chặn Tấn công Chuỗi Cung ứng
"GitHub announced breaking changes in npm 12 that will disable dependency install scripts by default to reduce supply chain attack risk. The update also blocks Git dependencies and remote URL dependencies unless explicitly allowed, and GitHub recommends upgrading to npm 11.16.0+, reviewing warnings, and approving trusted scripts before moving to npm 12."
Giảm đáng kể rủi ro tấn công chuỗi cung ứng và thực thi mã độc thông qua các script cài đặt npm.
Yêu cầu điều chỉnh quy trình phát triển và CI/CD; có thể gây gián đoạn hoạt động nếu không cập nhật kịp thời các script và dependency.
GitHub đã công bố những thay đổi quan trọng sắp tới trong npm phiên bản 12, dự kiến phát hành vào tháng tới. Theo đó, các script cài đặt (install scripts) sẽ bị vô hiệu hóa theo mặc định nhằm tăng cường bảo mật và giảm thiểu rủi ro từ các cuộc tấn công chuỗi cung ứng phần mềm.
Thay đổi này nhắm vào các kỹ thuật tấn công lạm dụng lệnh "npm install" để kích hoạt thực thi mã độc thông qua các npm lifecycle hooks. Hiện tại, lệnh "npm install" chạy script từ mọi dependency, bao gồm cả các dependency bắc cầu, cho phép một gói bị xâm nhập thực thi mã tùy ý trên máy của nhà phát triển hoặc trình chạy CI.
Các thay đổi chính trong npm 12 bao gồm:
* Các script preinstall, install, hoặc postinstall từ các dependency sẽ không được thực thi trừ khi được cho phép rõ ràng.
* Các Git dependencies và dependency từ URL từ xa (ví dụ: tarball HTTPS) sẽ không được phân giải trừ khi được phép rõ ràng thông qua cờ --allow-git và --allow-remote.
* Điều này cũng áp dụng cho các bản dựng node-gyp và prepare scripts từ các dependency dạng git, file, link.
GitHub khuyến nghị các nhà phát triển nên chuẩn bị bằng cách nâng cấp lên npm 11.16.0 hoặc phiên bản mới hơn, chạy cài đặt thông thường và xem xét các cảnh báo. Sau đó, sử dụng lệnh npm approve-scripts --allow-scripts-pending để phê duyệt các script đáng tin cậy và cập nhật tệp package.json. Chỉ những script đã được phê duyệt mới tiếp tục chạy sau khi nâng cấp lên npm 12.