Bereksperimenlah dengan membuat paket NPM yang bergantung pada semua paket di repositori

Salah satu pengembang paket JavaScript bereksperimen dengan membuat dan menempatkan paket "semuanya" di repositori NPM, yang mencakup semua paket yang ada di repositori dengan dependensi. Untuk mengimplementasikan fitur ini, paket “semuanya” ditautkan melalui ketergantungan langsung ke lima paket “@everything-registry/chunk-N”, yang pada gilirannya dihubungkan oleh ketergantungan ke lebih dari 3000 paket “sub-chunk-N”, masing-masing yang mengikat 800 paket yang ada di repositori.

Menempatkan "segalanya" di NPM memiliki dua efek menarik. Pertama, paket "semuanya" telah menjadi semacam alat untuk melakukan serangan DoS, karena upaya untuk menginstalnya menyebabkan pengunduhan jutaan paket yang dihosting di NPM dan menghabiskan ruang disk yang tersedia atau menghentikan pelaksanaan proses pembangunan. Menurut statistik NPM, paket tersebut diunduh sekitar 250 kali, tetapi tidak ada yang mau menambahkannya sebagai ketergantungan ke paket lain setelah akun pengembang diretas untuk melakukan sabotase. Selain itu, beberapa layanan dan alat yang memantau dan memeriksa paket baru yang dihosting oleh NPM tanpa disadari terkena serangan.

Kedua, penerbitan paket “semuanya” secara efektif memblokir kemampuan untuk menghapus paket apa pun di NPM yang masuk dalam daftar dependensinya. Sebuah paket dari NPM dapat dihapus oleh pembuatnya hanya jika paket tersebut belum digunakan dalam dependensi paket lain, tetapi setelah "semuanya" dipublikasikan, semua paket dalam repositori tercakup dalam dependensi. Patut dicatat bahwa penghapusan paket "semuanya" itu sendiri juga diblokir, sejak 9 tahun yang lalu paket pengujian "semuanya" diposting di repositori, yang menyertakan string "semuanya" dalam daftar dependensi. Jadi, setelah dipublikasikan, paket “semuanya” akhirnya bergantung pada paket lain.

Sumber: opennet.ru

Tambah komentar