Thử nghiệm tạo gói NPM phụ thuộc vào tất cả các gói trong kho lưu trữ

Một trong những nhà phát triển gói JavaScript đã thử nghiệm tạo và đặt vào kho lưu trữ NPM gói “mọi thứ”, bao gồm tất cả các gói hiện có trong kho lưu trữ có phần phụ thuộc. Để triển khai tính năng này, gói “mọi thứ” có các phần phụ thuộc trực tiếp với năm gói “@everything-registry/chunk-N”, do đó các gói này có phần phụ thuộc vào hơn 3000 gói “sub-chunk-N”, mỗi gói liên kết với 800 gói hiện có trong kho.

Đặt "mọi thứ" vào NPM có hai tác dụng thú vị. Đầu tiên, gói “mọi thứ” đã trở thành một loại công cụ để thực hiện các cuộc tấn công DoS, vì nỗ lực cài đặt nó sẽ dẫn đến việc tải xuống hàng triệu gói được lưu trữ trong NPM và làm cạn kiệt dung lượng đĩa trống hoặc ngừng thực thi các quá trình xây dựng. Theo thống kê của NPM, gói này đã được tải xuống khoảng 250 lần, nhưng không ai buồn thêm nó làm phụ thuộc vào gói khác sau khi tài khoản của nhà phát triển bị hack để phá hoại. Ngoài ra, một số dịch vụ và công cụ giám sát và kiểm tra các gói mới do NPM lưu trữ đã vô tình bị tấn công.

Thứ hai, việc xuất bản gói “mọi thứ” đã chặn khả năng xóa bất kỳ gói nào trong NPM nằm trong danh sách phụ thuộc của nó một cách hiệu quả. Tác giả chỉ có thể xóa một gói khỏi NPM nếu nó chưa được sử dụng trong các gói phụ thuộc của các gói khác, nhưng sau khi xuất bản “mọi thứ”, các gói phụ thuộc hóa ra bao gồm tất cả các gói trong kho. Đáng chú ý là việc loại bỏ gói “mọi thứ” cũng bị chặn, vì 9 năm trước, gói thử nghiệm “mọi thứ khác” đã được đăng trong kho lưu trữ, bao gồm chuỗi “mọi thứ” trong danh sách phụ thuộc. Vì vậy, sau khi xuất bản, gói “mọi thứ” cuối cùng lại bị phụ thuộc vào gói khác.

Nguồn: opennet.ru

Thêm một lời nhận xét