3 điểm bởi GN⁺ 2025-08-29 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • 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

  1. 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
  2. Tải xuống các tệp trong kho đó để lưu giữ hồ sơ
  3. Xóa kho lưu trữ đó khỏi Github
  4. Gửi email đến security@nrwl.io để được hướng dẫn cách giải mã thông tin bị lộ
  5. 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 gh CLI, 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, .bashrc xem 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_TOKEN v.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.yml lư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 postinstall củ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 base64 và tải lên kho Github có tên s1ngularity-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)

  • postinstall chèn lệnh sudo 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@latest khi khởi động editor, từ đó kích hoạt postinstall

  • 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.js trong 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.

Chưa có bình luận nào.