Kẻ tấn công đã đầu độc 84 phiên bản TanStack npm trên 42 gói, đánh cắp mã thông báo GitHub OIDC và khóa đám mây trong khi cài đặt một công tắc chết người để phá hủy hệ thống của bạn.
Thời điểm của kẻ tấn công là cụ thể. Một nhánh rẽ, một cam kết ẩn, một yêu cầu kéo không khác biệt và sau đó không hiển thị gì trong gần tám giờ.
Vào ngày 11 tháng 5, trong khoảng thời gian từ 19:20 đến 19:26 UTC, 84 phiên bản độc hại trải rộng trên 42 gói @tanstack npm chính thức đã được đăng ký. Theo @IntCyberDigest trên X, riêng @tanstack/react-router đã thu hút hơn 12 triệu lượt tải xuống hàng tuần. Đó là lý do khiến nó trở thành mục tiêu phù hợp.
Quét thông tin xác thực mà không ai thấy sắp tới
Tải trọng, một tệp bị mã hóa khoảng 2,3 MB có tên là router_init.js, chạy vào thời điểm nhà phát triển hoặc quy trình CI thực thi cài đặt npm. AWS IMDS, siêu dữ liệu GCP, mã thông báo tài khoản dịch vụ Kubernetes, mã thông báo Vault, khóa riêng SSH. Nó đã đi qua tất cả chúng.
Người bảo trì TanStack Tanner Linsley xác nhận toàn bộ nhóm đã kích hoạt 2FA. Theo kết quả khám nghiệm tử thi được công bố vào ngày tanstack.com, không có gì quan trọng. Chuỗi tấn công hoàn toàn không cần thông tin xác thực npm.
Quá trình lọc xảy ra thông qua mạng nhắn tin Session/Oxen, cụ thể là filev2.getsession.org và Seed1 thông qua Seed3.getsession.org. Mã hóa đầu cuối. Không có máy chủ chỉ huy và kiểm soát nào do kẻ tấn công kiểm soát để chặn bằng IP. các sâu npm đánh cắp khóa mật mãplaybook, điều chỉnh và nâng cấp.
PR không khác biệt đã đầu độc toàn bộ quy trình phát hành như thế nào
Quá trình thiết lập đã bắt đầu sớm hơn một ngày. Một nhánh của TanStack/router, được đổi tên thành github.com/zblgg/configuration để né tránh các tìm kiếm trong danh sách nhánh, đã nhận được một cam kết độc hại vào ngày 10 tháng 5 lúc 23:29 UTC. Danh tính giả: claude@users.noreply.github.com. Không phải sản phẩm của Anthropic. Một email giả tạo.
PR #7378 mở cửa vào sáng hôm sau. Trình kích hoạt quy trình làm việc pull_request_target, một mẫu nguy hiểm được ghi chép dài, đã chạy các công việc chuẩn bằng cách sử dụng mã của fork. Thế là đủ rồi.
Bộ đệm lưu trữ pnpm bị nhiễm độc đã được lưu dưới khóa chính xác là bản phát hành.yml sẽ tìm kiếm sau. Kẻ tấn công sau đó đã đẩy PR trở lại trạng thái no-file no-op và đóng nó lại. Bộ nhớ đệm vẫn tồn tại. Nhà nghiên cứu Adnan Khan đã ghi lại kiểu tấn công này vào năm 2024. Kẻ tấn công đã sử dụng kỹ thuật này gần như nguyên văn, bao gồm cả bình luận ghi công.
Sau đó, khi người bảo trì Manuel hợp nhất một PR không liên quan, đẩy một bản sửa lỗi CSS.supports lên chính, quy trình phát hành đã kích hoạt và khôi phục bộ nhớ đệm bị nhiễm độc. Thông tin đăng nhập GitHub được thu thập thông qua cùng một Phương thức đánh cắp thông tin xác thực dựa trên GitHubđã thấy trong các chiến dịch trước đó.
Công tắc của người chết
Nhà nghiên cứu Carlini, đăng trên Vấn đề GitHub #7383, đã gắn cờ thứ gì đó khác bên trong tải trọng. Một tập lệnh được cài đặt dưới dạng dịch vụ systemd trên Linux và LaunchAgent trên macOS, thăm dò api.github.com cứ sau 60 giây bằng mã thông báo bị đánh cắp. Nếu mã thông báo đó bị thu hồi, tập lệnh sẽ chạy rm -rf. Thư mục nhà của bạn, đã biến mất.
“Hãy cẩn thận khi thu hồi token,” carlini viết trong chủ đề. Để nó ở đó.
Nhà nghiên cứu bảo mật ahmadnassri lưu ý về vấn đề theo dõi rằng ổ cắm.devđã theo dõi 84 PURL @tanstack riêng lẻ cộng với sâu lây lan tới 200 gói khác trở lên.
Thủ thuật OIDC khiến mọi thứ trông sạch sẽ
Các phiên bản bị nhiễm độc mang nguồn gốc mật mã hợp lệ. Việc xuất bản được thực hiện thông qua liên kết nhà xuất bản đáng tin cậy OIDC của GitHub Actions đối với quy trình phát hành của TanStack/bộ định tuyến. Đến npm, các gói hàng trông giống hệt bất cứ thứ gì Linsley tự mình vận chuyển.
Đây chính là phần khiến các hậu vệ phải chấn động. Tải trọng không cần mã thông báo npm của bất kỳ ai. Nó đã tạo ra mã thông báo OIDC có khả năng xuất bản bằng cách đọc trực tiếp bộ nhớ của người chạy, định vị quy trình GitHub Actions Runner.Worker thông qua các mục /proc và loại bỏ nó. Tập lệnh Python tương tự được sử dụng trong vụ xâm phạm tj-actions/changed-files vào tháng 3 năm 2025.
@IntCyberDigest đã mô tả nó trên Xlà chuyến vận chuyển sâu npm được ghi lại đầu tiên có chứng chỉ xác thực hợp lệ, có chữ ký.
Sự phát hiện đến từ bên ngoài. Nhà nghiên cứu Ashishkurmi, làm việc cho StepSecurity, đã gắn cờ nó một cách công khai trong vòng 20 phút kể từ khi xuất bản độc hại. Carlini đã gửi báo cáo trực tiếp tới npm ngay trước khi vấn đề GitHub xảy ra.
Các gói được xác nhận là sạch: @tanstack/query, @tanstack/table, @tanstack/form, @tanstack/virtual, @tanstack/store. Mọi người đã cài đặt gói bị ảnh hưởng vào ngày 11 tháng 5 phải thay đổi thông tin xác thực AWS, GCP, Kubernetes, Vault, GitHub, npm và SSH ngay lập tức.
Kể từ đó, nhóm đã ngừng sử dụng tất cả 84 phiên bản và sử dụng bảo mật npm để lấy tarball khỏi sổ đăng ký.
Nguồn: Live Bitcoin News





Để lại một bình luận