flawopen.com/Prototype pollution/lodash.merge()
Apakah lodash.merge() aman dari prototype pollution?
Bayangkan deep merge seperti menyalin label dari lemari arsip orang lain ke catatan utama aplikasi. Pada versi lama, jalur tertentu di Lodash dapat memperlakukan nama properti khusus sebagai petunjuk menuju state prototype bersama. Perbaikan baru memblokir jalur yang diketahui, tetapi menyalin semua field permintaan tetap berisiko menyebabkan mass assignment. Validasi field yang diterima aplikasi.
const _ = require("lodash");
const settings = {};
const input = request.body;
_.merge(settings, input);
_.set(settings, request.query.path, request.query.value);
const allowedLocales = new Set(["en", "fr"]);
const input = request.body;
const settings = {
theme: input.theme === "dark" ? "dark" : "light",
locale: allowedLocales.has(input.locale)
? input.locale
: "en",
};
Cara kerja jalur kerentanan
Pada rilis yang terdampak, JSON tak tepercaya atau path yang dikendalikan pemanggil mencapai helper Lodash yang rentan. Merge rekursif atau operasi path salah menangani komponen khusus lalu mengubah atau menghapus properti pada prototype bawaan. Kode lain kemudian dapat membaca properti warisan itu; dampaknya bergantung pada properti dan gadget yang dapat dijangkau dalam aplikasi. Prototype pollution saja tidak membuktikan eksekusi kode jarak jauh.
Advisory npm lodash memiliki cakupan berbeda: CVE-2018-16487 berdampak pada defaultsDeep, merge, dan mergeWith sebelum 4.17.11; CVE-2019-10744 pada defaultsDeep sebelum 4.17.12; CVE-2020-8203 pada pick, set, setWith, update, updateWith, dan zipObjectDeep sebelum 4.17.19. CVE-2025-13465 berdampak pada unset dan omit hingga 4.17.22, diperbaiki di 4.17.23. CVE-2026-2950 kemudian berdampak pada dua metode itu di 4.17.23, diperbaiki di 4.18.0. Versi terbaru yang diperiksa untuk panduan ini adalah 4.18.1. Rentang ini khusus paket: periksa advisory lodash-es, paket modular, dan build distribusi OS secara terpisah.
Cara memeriksa dan memperbaiki dependensi
npm install lodash@^4.18.1
npm ls lodash
npm audit
npm explain lodash
Perbarui salinan langsung dan transitif, simpan lockfile terbaru, dan periksa salinan vendor atau bundle. Jangan teruskan data permintaan langsung ke deep merge atau API path; buat objek baru dari field yang divalidasi dan diizinkan. Contoh ini menghindari kunci dan path yang dipilih penyerang. Per 2026-10-05, Lodash 4.18.1 adalah rilis terbaru; ikuti advisory untuk perbaikan berikutnya.
Pertanyaan umum
Advisory yang diperiksa untuk paket npm lodash mencantumkan perbaikan terkait di rilis berikutnya; versi terbaru yang diperiksa di sini adalah 4.18.1. Selalu perbarui, periksa semua salinan terpasang, dan hindari merge seluruh body permintaan karena dapat menyebabkan mass assignment.
Tidak. Dampaknya mengubah atau menghapus properti warisan. Efek lanjut bergantung pada apa yang dibaca atau dipanggil kode aplikasi dan apakah ada gadget yang dapat dijangkau. Jelaskan dampak yang terbukti, jangan mengasumsikan RCE.
Belum tentu. Advisory dapat menetapkan versi terdampak dan versi perbaikan berbeda untuk setiap paket. Periksa nama paket, entri lockfile, dan advisory secara tepat; jangan menerapkan rentang lodash pada semua distribusi.