FlawOpen

flawopen.com/Prototype pollution/lodash.merge()

क्या lodash.merge() prototype pollution से सुरक्षित है?

CWE-1321: Prototype Pollutionसंदर्भ मार्गदर्शिका
Short answer

गहरे merge को ऐसे समझें जैसे किसी और की फ़ाइलों के लेबल अपने ऐप के मुख्य रिकॉर्ड में कॉपी करना। पुराने Lodash paths विशेष property names को साझा prototype state तक पहुँचने के निर्देश मान सकते थे। नए सुधार ज्ञात paths रोकते हैं, लेकिन request के सभी fields कॉपी करना अब भी mass-assignment जोखिम है। ऐप जिन fields को स्वीकार करता है, उन्हें validate करें।

असुरक्षित — प्रभावित Lodash versions
const _ = require("lodash");

const settings = {};
const input = request.body;

_.merge(settings, input);
_.set(settings, request.query.path, request.query.value);
सुधारा हुआ — upgrade करें और ज्ञात आकार बनाएँ
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",
};

वulnerability का रास्ता कैसे बनता है

प्रभावित release में अविश्वसनीय JSON या caller-controlled path, Lodash के कमजोर helper तक पहुँचता है। Recursive merge या path operation किसी विशेष path component को गलत संभालकर built-in prototype की property बदल या हटा सकता है। दूसरा code बाद में उस inherited property को पढ़ सकता है; असर property और ऐप में उपलब्ध gadget पर निर्भर है। Prototype pollution अकेले remote code execution सिद्ध नहीं करता।

npm lodash advisories के दायरे अलग हैं: CVE-2018-16487 ने 4.17.11 से पहले defaultsDeep, merge, mergeWith को प्रभावित किया; CVE-2019-10744 ने 4.17.12 से पहले defaultsDeep को; CVE-2020-8203 ने 4.17.19 से पहले pick, set, setWith, update, updateWith, zipObjectDeep को। CVE-2025-13465 ने 4.17.22 तक unset और omit को प्रभावित किया; 4.17.23 में सुधार हुआ। फिर CVE-2026-2950 ने 4.17.23 के इन्हीं तरीकों को प्रभावित किया; 4.18.0 में सुधार हुआ। इस गाइड के लिए जाँचा गया नवीनतम संस्करण 4.18.1 है। ये सीमाएँ package-specific हैं: lodash-es, modular packages और OS builds के advisories अलग से जाँचें।

Dependency की जाँच और सुधार

npm install lodash@^4.18.1 npm ls lodash npm audit npm explain lodash

Direct और transitive copies upgrade करें, updated lockfile दर्ज करें और vendored या bundled copies भी जाँचें। Request data को सीधे deep-merge या path APIs में न दें; validated और allowlisted fields से नया object बनाएँ। यह उदाहरण attacker-chosen keys और paths से बचता है। 2026-10-05 को जाँचा गया नवीनतम Lodash 4.18.1 है; आगे के सुरक्षा सुधार advisories में देखें।

अक्सर पूछे जाने वाले प्रश्न

क्या नवीनतम संस्करण में lodash.merge() सुरक्षित है?

जाँचे गए npm lodash advisories संबंधित सुधार बाद के संस्करणों में दिखाते हैं; यहाँ जाँचा नवीनतम 4.18.1 है। इसे अद्यतन रखें, सभी installed copies जाँचें और पूरे request body को merge न करें क्योंकि इससे mass assignment हो सकता है।

क्या prototype pollution हमेशा remote code execution कराता है?

नहीं। यह inherited properties को बदलता या हटाता है। असर इस पर निर्भर है कि ऐप आगे क्या पढ़ता या चलाता है और कोई reachable gadget है या नहीं। RCE मानकर न चलें; प्रमाणित असर बताएँ।

क्या lodash-es और lodash.* packages पर वही version ranges लागू हैं?

ज़रूरी नहीं। हर package के लिए प्रभावित और सुधारे गए versions अलग हो सकते हैं। सटीक package name, lockfile और advisory जाँचें; lodash की सीमा सभी distributions पर लागू न मानें।

संदर्भ

यह भी देखें JavaScript प्रोटोटाइप प्रदूषण: कारण और बचाव Object.assign() और Prototype Pollution: क्या सुरक्षित है? क्या JSON.parse() प्रोटोटाइप प्रदूषण करता है? क्या JSON.parse(), eval() से सुरक्षित है?