Đã phát tán các phiên bản độc hại của Nx và một số plugin hỗ trợ
(github.com/nrwl)- Các phiên bản độc hại của gói Nx và plugin đã được phát tán lên npm, quét hệ thống tệp, thu thập thông tin xác thực, rồi gửi chúng đến kho lưu trữ trên tài khoản Github của người dùng
- Để kiểm tra có bị ảnh hưởng hay không, cần xác nhận xem kho lưu trữ s1ngularity-repository có được tạo trong tài khoản Github hay không
- Nếu đã bị nhiễm, bắt buộc phải thay token và mật khẩu, xóa kho lưu trữ độc hại, kiểm tra các tệp cấu hình shell
- Các phiên bản độc hại tác động đến hệ thống bằng script postinstall; đặc biệt khi dùng plugin VSCode Nx Console, rủi ro bị thực thi ngoài ý muốn tăng cao
- Phía Nx đã triển khai biện pháp ngăn tái diễn và các biện pháp bảo mật bổ sung, đồng thời các phiên bản liên quan đã bị gỡ khỏi npm
Tổng quan và tóm tắt
- Cảnh báo bảo mật lần này là một cuộc tấn công chuỗi cung ứng nghiêm trọng nhắm vào gói Nx và một số plugin liên quan, với mã độc được phát tán qua npm
- Các phiên bản độc hại này quét hệ thống tệp của người dùng để thu thập thông tin xác thực, đường dẫn, v.v., rồi tải chúng lên kho Github
s1ngularity-repository - Script
postinstallđộc hại cũng sửa các tệp cấu hình shell của người dùng (.zshrc,.bashrc) để thêm lệnh tắt hệ thống - Bài viết trình bày chi tiết vector tấn công, diễn tiến của cuộc tấn công, các phiên bản bị ảnh hưởng, hành động khẩn cấp người dùng cần thực hiện và các biện pháp ngăn tái diễn
Cách xử lý khẩn cấp
Những điều mọi người đều phải kiểm tra
- Kiểm tra trong danh sách kho lưu trữ của tài khoản Github xem có
s1ngularity-repositoryđược tạo hay không - Tải xuống các tệp trong kho đó để lưu giữ hồ sơ
- Xóa kho lưu trữ đó khỏi Github
- Gửi email đến
security@nrwl.iođể được hướng dẫn cách giải mã thông tin bị lộ - Ngay lập tức thay toàn bộ thông tin xác thực và token của tất cả tài khoản
Cách thay Github token
- Truy cập https://github.com/settings/connections/…
- Thu hồi quyền truy cập của ứng dụng đã kết nối để vô hiệu hóa token cũ
- Nếu dùng
ghCLI, hãy xác thực lại để tạo token mới - Nếu không xử lý, token cũ có nguy cơ bị lạm dụng
Ngừng dùng và dọn dẹp các phiên bản Nx độc hại
- Kiểm tra phiên bản Nx đang dùng có phải phiên bản độc hại hay không bằng lệnh
npm ls nx - Nếu là phiên bản bị nhiễm, cập nhật bằng
npm uninstall nx && npm install nx@latest - Dọn cache bằng
npm cache clean --force
Người dùng đã bị nhiễm
- Thay token npm và Github
- Đặt lại toàn bộ mật khẩu và thông tin xác thực của Github cùng các dịch vụ liên quan
- Kiểm tra trong các tệp
.zshrc,.bashrcxem có lệnh lạ bị chèn vào hay không, rồi xóa chúng
Đối với quản trị viên kho lưu trữ gói nội bộ
- Cần xóa ngay các phiên bản độc hại khỏi proxy trong registry nội bộ để chặn lây lan thêm
Thông tin các phiên bản bị ảnh hưởng
Gói Nx
- 21.5.0, 20.9.0, 20.10.0, 21.6.0, 20.11.0, 21.7.0, 21.8.0, 20.12.0
- Đã được gỡ khỏi npm tính đến 10:44 PM EDT
@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud
- Đã được gỡ khỏi npm tính đến 10:44 PM, 6:20 AM EDT
Chi tiết vector tấn công
Nguyên nhân workflow dễ bị khai thác
- Một lỗ hổng cho phép thực thi mã tùy ý đã được đưa vào workflow Github Actions
- Nếu chèn mã bash cụ thể vào tiêu đề PR, workflow sẽ thực thi lệnh hệ thống, tức lỗ hổng Bash Injection
- Do dùng trigger
pull_request_target, workflow có quyền nâng cao (GITHUB_TOKENv.v.) nên bị lợi dụng - Trước khi bị xóa, workflow dễ bị tấn công vẫn tồn tại trên các nhánh cũ không phải
main, cho phép kẻ tấn công chạy workflow bằng PR độc hại và đánh cắp secret
Quá trình đánh cắp npm token
- Kẻ tấn công khiến
publish.ymlđược thực thi thông qua workflow dễ bị tấn công publish.ymllưu npm token trong Github Secrets, và trong quá trình đó token bị gửi tới webhook bên ngoài- Cuối cùng, kẻ tấn công dùng token này để tải lên npm các phiên bản độc hại của Nx và các gói hỗ trợ
Hành vi của gói độc hại
Thu thập thông tin, bao gồm thông tin xác thực, và đăng lên kho Github
- Khi script
postinstallcủa gói Nx bị nhiễm chạy, nó thu thập vị trí của nhiều tệp văn bản và thông tin xác thực - Dữ liệu được mã hóa
base64và tải lên kho Github có têns1ngularity-repository - Ngay cả khi kho thực tế đã bị xóa, vẫn cần tính đến khả năng rò rỉ thông tin vì trước đó nó từng ở trạng thái công khai
Can thiệp vào hồ sơ shell (.zshrc, .bashrc)
postinstallchèn lệnhsudo shutdown -h 0, có thể khiến hệ thống tắt khi mở terminal và làm lộ mật khẩu
Nhiều kịch bản khác nhau có thể kích hoạt postinstall
-
Không chỉ khi chạy trực tiếp
npm install/yarn/pnpm install, mà còn có thể chạy trong nhiều tình huống như phụ thuộc bắc cầu, tiện ích mở rộng editor, thực thi script -
Đặc biệt, tiện ích Nx Console cho VSCode (phiên bản 18.6.30 ~ 18.65.1) có thể tự động cài
nx@latestkhi khởi động editor, từ đó kích hoạtpostinstall -
Cần lưu ý rằng việc cài mô-đun NPM có thể diễn ra ở nhiều nơi ngay cả khi không chủ ý
-
Từ Nx Console (18.66.0), quy trình cài
latest nxđã bị loại bỏ
Dòng thời gian tấn công và ứng phó
Ngày 21 tháng 8
- 4:31 PM: PR chứa lỗ hổng Bash Injection được merge
- 10:48 PM: Bài đăng chỉ ra lỗ hổng được đăng trên X (trước đây là Twitter)
Ngày 22 tháng 8
- Buổi chiều: điều tra nội bộ, rollback workflow dễ bị tấn công (chưa hoàn chỉnh)
- Áp dụng CodeQL để phát hiện các lỗ hổng tương tự trong PR về sau
Ngày 24 tháng 8
- Có commit trong fork của kẻ tấn công cho thấy dấu hiệu làm lộ npm token
- PR độc hại được tạo rồi xóa, và
publish.ymlđã được thực thi bởi PR này
Ngày 26 ~ 27 tháng 8 (phát tán phiên bản độc hại, ứng phó)
- Nhiều phiên bản độc hại của Nx và plugin lần lượt được phát tán lên npm
- Cộng đồng Github/NPM đã báo cáo sự cố
- 10:44 PM: phía NPM đã xử lý, bao gồm gỡ toàn bộ các phiên bản liên quan
- 11:57 PM: vô hiệu hóa toàn bộ token dùng để phát hành các gói liên quan đến Nx
- Ngày 27 tháng 8: vá Nx Console, bật 2FA, chuyển sang cơ chế Trusted Publisher và các biện pháp bổ sung khác
Biện pháp phòng ngừa trước và ứng phó sau đó
- Bắt buộc 2FA với mọi maintainer trong tổ chức
nrwl - Áp dụng cơ chế Trusted Publisher. Cấm phát hành dựa trên npm token
- Các gói sau này sẽ chỉ được phát hành sau khi vượt qua xác minh dựa trên 2FA và độ tin cậy
- Tiếp tục áp dụng theo từng bước các biện pháp như phát hiện rủi ro bổ sung, phê duyệt PR, bảo vệ nhánh
Bài học và kế hoạch sắp tới
- Một lần nữa nhấn mạnh tầm quan trọng trong và ngoài nước của bảo mật chuỗi cung ứng, pipeline CI/CD và nguyên tắc tối thiểu hóa quyền trong workflow
- Sau khi rà soát lại nội bộ, nhóm dự định chia sẻ các bài học rút ra với cộng đồng
Liên hệ
- Có thể liên hệ qua
security@nrwl.io
Tham khảo và phụ lục
- Các issue chính trên Github, timeline và bài viết liên quan
- Cung cấp ví dụ về script
telemetry.jstrong gói bị nhiễm - Script này thu thập đường dẫn các tệp văn bản quan trọng trong hệ thống tệp nhằm tạo inventory
Tóm tắt kết luận
- Việc cập nhật lên bản mới nhất và áp dụng bản vá cho Nx cùng các plugin liên quan là rất quan trọng
- Khuyến nghị thay ngay các thông tin xác thực chính như npm, Github
- Đây là sự cố cho thấy những thiếu sót trong bảo mật chuỗi cung ứng và quản lý quyền workflow có thể dẫn đến tai nạn quy mô lớn
Chưa có bình luận nào.