3 phút đọc

Hơn 1.500 gói npm có thể bị chiếm mà không cần mật khẩu

Lỗ hổng SlugFest trong tính năng Trusted Publishing của npm cho phép kẻ khác phát hành bản mới của gói người khác chỉ bằng cách giành lại tên repo GitHub đã đổi hoặc đã xóa. npm đã vá, nhưng chủ gói vẫn nên tự kiểm tra.

Trusted Publishing là cách phát hành gói npm được khuyên dùng hiện nay. Bạn không lưu token npm trong GitHub nữa, mà npm tin thẳng vào workflow GitHub Actions của repo bạn. Nghe an toàn hơn, và về cơ bản đúng là an toàn hơn.

Ngày 13/10, nhóm Bloom Security công bố lỗ hổng SlugFest: cấu hình tin cậy đó có thể bị người khác giành lấy, và hơn 1.500 gói npm (tổng hơn 10 triệu lượt tải) đã ở trong tình trạng này.

Mô phỏng lỗi: repo cũ bị đổi tên, hacker tạo repo trùng tên cũ cùng file workflow, npm vẫn tin và cho phát hành bản độc

Lỗi nằm ở đâu

Khi bật Trusted Publishing, bạn khai cho npm biết: “gói này được phát hành từ repo chu/ten-repo, workflow release.yml”.

Token mà GitHub cấp cho workflow có cả mã số cố định của repo và của chủ repo, những con số không bao giờ đổi. Nhưng npm chỉ lưu các mã số này sau lần phát hành thành công đầu tiên. Trước đó, npm tin vào tên repo.

Mà tên thì có thể bị người khác lấy lại:

  1. Chủ gói đổi tên repo, chuyển repo, xóa repo, hoặc đổi tên tài khoản GitHub
  2. Hacker tạo repo trùng tên cũ, kèm file workflow trùng tên
  3. Workflow của hacker xin token GitHub, đem đổi lấy quyền phát hành của npm
  4. Bản độc lên npm, có cả chứng nhận nguồn gốc (provenance) hợp lệ, kèm script tự chạy khi npm install

Hacker không cần lấy cắp mật khẩu hay token nào của nạn nhân.

Tình hình hiện tại

  • Bloom báo cho npm từ tháng 6. GitHub (công ty sở hữu npm) tung bản sửa ngày 2/10: cấu hình chưa từng phát hành thành công giờ tự hết hạn sau 48 giờ, và muốn đổi repo thì phải tạo lại cấu hình.
  • Bloom chỉ thử tấn công trên repo của chính họ. Chưa có vụ chiếm gói nào được xác nhận ngoài thực tế.
  • Bloom không công bố danh sách gói bị ảnh hưởng, và lỗi này không có mã CVE.

Nếu bạn là người phát hành gói npm

  • Chạy npm trust list cho từng gói, kiểm tra mọi repo trong danh sách vẫn đúng là của bạn
  • Đổi tên hay chuyển repo xong thì xóa cấu hình cũ, tạo lại
  • Trước khi xóa repo, gỡ cấu hình Trusted Publishing trước
  • Tạo cấu hình xong thì phát hành ngay một bản, để npm khóa vào mã số cố định của repo
  • Theo dõi email thông báo phát hành, thấy bản nào mình không phát hành thì báo npm ngay

Nếu bạn chỉ là người dùng gói

Huy hiệu provenance không còn là bảo chứng tuyệt đối. Nên xem repo ghi trong provenance có đúng là repo chính chủ của gói không. Bloom kể họ đã chặn AI agent của khách hàng cài một số gói nằm trong diện rủi ro, vì agent cài gói rất nhanh và hầu như không ai kiểm tra.


Bạn có dùng Trusted Publishing chưa? Đã bao giờ đổi tên repo của gói đang phát hành chưa? Kể trong cộng đồng Vibe Code & Bảo Mật nhé.

Nguồn

Chia sẻ lên Facebook

Bình luận

Đang tải bình luận…