flawopen.com/Referensi/Dependency Confusion
Dependency Confusion: cara kekeliruan sumber paket terjadi
Bayangkan tim Anda memesan komponen dari katalog pemasok, tetapi dua pemasok memakai nama produk yang sama. Jika aturan tidak menentukan pemasok tepercaya, build dapat menerima komponen yang tidak diharapkan. Dependency Confusion adalah kegagalan pemilihan sumber paket: build mengambil paket dari registry atau namespace yang tidak dimaksudkan untuk dipercaya organisasi.
Cara Dependency Confusion terjadi
Perilaku bergantung pada package manager dan konfigurasinya. Dokumentasi pip memperingatkan bahwa menggabungkan --index-url privat dengan --extra-index-url publik dapat membuat paket publik bernama sama terpilih. npm memilih registry berdasarkan scope paket atau konfigurasi default; npm tidak selalu memilih versi yang lebih tinggi dari beberapa sumber. Akar masalahnya adalah kebijakan sumber yang ambigu. Skrip yang diizinkan berjalan dengan hak tugas build.
[global]
index-url = https://packages.example.internal/simple
extra-index-url = https://pypi.org/simple
corp-auth-utils
@corp:registry=https://packages.example.internal/repository/npm/
{
"dependencies": {
"@corp/billing-engine": "1.2.0"
}
}
Jalur kegagalan Dependency Confusion
- 1Nama paket internal atau namespace diketahui pihak di luar organisasi.
- 2Registry publik memiliki paket tanpa scope dengan nama sama, atau kebijakan mengizinkan registry tersebut memenuhi permintaan.
- 3Resolver memilih sumber yang tidak dimaksudkan; lockfile yang hilang, dibuat ulang, atau diterima tanpa pemeriksaan dapat luput mendeteksi penggantian.
- 4Jika skrip instalasi atau build aktif, kode paket berjalan dengan hak tugas build. Dampak bergantung pada kredensial, jaringan, dan isolasi; eksekusi sebagai root bukan syaratnya.
Kontrol rekayasa defensif
- ✓Tegaskan kebijakan sumber: gunakan scope atau namespace milik organisasi, arahkan ke registry yang dimaksud, dan cegah fallback publik untuk nama privat. Untuk paket privat Python, hindari indeks privat bersama
--extra-index-url; gunakan proxy terkendali atau satu indeks otoritatif. - ✓Kendalikan kepemilikan namespace: reservasi nama organisasi bila didukung, tetapi jangan jadikan reservasi sebagai pengganti kebijakan resolver. Inventarisasi nama internal dan pantau benturan publik.
- ✓Tinjau dan wajibkan lockfile: simpan lockfile dan gunakan mode instalasi CI terkunci (npm memakai
npm ci). Tinjau perubahan nama, URL registry, versi, dan nilai integritas. Lockfile meningkatkan keterulangan, tetapi tidak membuktikan sumbernya penerbit yang dimaksud. - ✓Batasi eksekusi build: nonaktifkan skrip dependensi bila proyek dapat berfungsi tanpanya dan tinjau pengecualian. Gunakan kredensial singkat dengan hak minimum, pisahkan build dari rahasia produksi, dan batasi koneksi keluar.