د جاواسکریپټ اعتراض پروټوټایپونو د مینځلو له لارې په Node.js برید

د معلوماتي امنیت لپاره د هیلم هولټز مرکز (CISPA) او د ټیکنالوژۍ شاهي انسټیټیوټ (سویډن) څیړونکو د جاواسکریپټ پروټوټایپ ککړتیا تخنیک پلي کولو تحلیل کړی ترڅو د Node.js پلیټ فارم او د هغې پراساس مشهور غوښتنلیکونه بریدونه رامینځته کړي ، چې د کوډ اجرا کیدو لامل کیږي.

د پروټوټایپ ککړتیا میتود د جاواسکریپټ ژبې ځانګړتیا کاروي چې تاسو ته اجازه درکوي د هر څیز ریټ پروټوټایپ کې نوي ملکیتونه اضافه کړئ. غوښتنلیکونه ممکن د کوډ بلاکونه (ګاجټونه) ولري چې عملیات یې د ځای پرځای شوي ملکیت لخوا اغیزمن شوي؛ د مثال په توګه، کوډ ممکن یو ساختمان ولري لکه 'const cmd = options.cmd || "/bin/sh"'، د کوم منطق به بدل شي که چیرې برید کوونکی اداره کړي چې د "cmd" ملکیت په روټ پروټوټایپ کې ځای په ځای کړي.

یو بریالي برید ته اړتیا ده چې غوښتنلیک کولی شي د اعتراض په ریښه پروټوټایپ کې د نوي ملکیت رامینځته کولو لپاره بهرني ډیټا وکاروي ، او دا اجرا کول د ګیجټ سره مخ کیږي چې په ترمیم شوي ملکیت پورې اړه لري. د پروټوټایپ بدلول په Node.js کې د "__proto__" او "جوړونکي" خدماتو ملکیتونو پروسس کولو سره ترسره کیږي. د "__proto__" ملکیت د څیز د ټولګي پروټوټایپ بیرته راګرځوي، او د "جوړونکي" ملکیت هغه فعالیت بیرته راولي چې د اعتراض د جوړولو لپاره کارول کیږي.

که چیرې د غوښتنلیک کوډ د "obj[a][b] = ارزښت" دنده ولري او ارزښتونه د بهرني ډیټا څخه تنظیم شوي وي، برید کوونکی کولی شي "a" ارزښت "__proto__" ته وټاکي او د خپل ملکیت نصب ترلاسه کړي. د "b" نوم او د ارزښت "ارزښت" سره د اعتراض په ریښه پروټوټایپ کې (obj.__proto__.b = value؛)، او په پروټوټایپ کې ټاکل شوي ملکیت به په ټولو شیانو کې څرګند شي. په ورته ډول، که کوډ د "obj[a][b][c] = value" په څیر څرګندونې ولري، په ټولو موجودو شیانو کې د "جوړونکي" ارزښت ته "a" او "ب" ته "پروټوټایپ" په ټاکلو سره، تاسو کولی شئ یو نوی ملکیت د "c" نوم او ارزښت "ارزښت" سره تعریف کړئ.

د پروټوټایپ د بدلولو بېلګه: const o1 = {}; const o2 = نوی څیز(); o1.__proto__.x = 42; // د روټ پروټوټایپ console.log (o2.x) کې ملکیت "x" جوړ کړئ؛ // د بل څیز څخه "x" ملکیت ته لاسرسی // محصول به 42 وي ، ځکه چې د ریښې پروټوټایپ د اعتراض o1 له لارې بدل شوی ، کوم چې په O2 کې هم کارول کیږي

د زیان منونکي کوډ بیلګه: د فنکشن entryPoint (arg1, arg2, arg3){ const obj = {}; const p = obj[arg1]؛ p[arg2] = arg3; بیرته راستنیدنه }

که د entryPoint فنکشن دلیلونه د ان پټ ډیټا څخه جوړ شوي وي، نو برید کوونکی کولی شي "__proto__" ارزښت arg1 ته انتقال کړي او د روټ پروټوټایپ کې د هر نوم سره ملکیت رامینځته کړي. که تاسو د "toString" ارزښت arg2 او د 3 ارزښت arg1 تېر کړئ، تاسو کولی شئ د "toString" ملکیت تعریف کړئ (Object.prototype.toString=1) او toString() ته د زنګ وهلو پرمهال غوښتنلیک خراب کړئ.

د حالتونو مثالونه چې د برید کونکي کوډ اجرا کولو لامل کیدی شي د "مین" ، "شیل" ، "صادراتو" ، "حالاتو توسیع" او "env" ملکیتونو رامینځته کول شامل دي. د مثال په توګه، یو برید کوونکی کولی شي د یو څیز په ریښه پروټوټایپ کې "اصلي" ملکیت رامینځته کړي، په هغې کې د هغه سکریپټ ته لاره ولیکئ (Object.prototype.main = "./../../pwned.js") او دا ملکیت به د جوړونې په کوډ کې د اجرا کولو په وخت کې ویل کیږي ("my-package")، که چیرې شامل بسته په package.json کې "اصلي" ملکیت په واضح ډول نه تعریفوي (که ملکیت نه وي تعریف شوی، دا به د ریښې پروټوټایپ څخه ترلاسه شي). "شیل"، "صادرات" او "env" ملکیتونه په ورته ډول بدلیدلی شي: اجازه راکړئ rootProto = Object.prototype؛ rootProto["exports"] = {".":"./changelog.js"}; rootProto["1"] = "/path/to/npm/scripts/"; // ټریګر کال ته اړتیا (."/target.js")؛ Object.prototype.main = "/path/to/npm/scripts/changelog.js"; Object.prototype.shell = "نوډ"; Object.prototype.env = {}; Object.prototype.env.NODE_OPTIONS = "—inspect-brk=0.0.0.0:1337"; // ټریګر کال ته اړتیا ("بایټ")؛

څیړونکو د 10 NPM کڅوړې د خورا لوی شمیر انحصارونو سره تحلیل کړي او وموندله چې له دوی څخه 1958 په package.json کې اصلي ملکیت نلري ، 4420 د دوی اړتیاو بیاناتو کې اړونده لارې کاروي ، او 355 مستقیم د کمانډ بدیل API کاروي.

کاري مثال د پارس سرور بیکینډ برید کولو لپاره استحصال دی چې د evalFunctions ملکیت له پامه غورځوي. د دې ډول زیانونو د پیژندنې ساده کولو لپاره، یو اوزار کټ رامینځته شوی چې د جامد او متحرک تحلیل میتودونه سره یوځای کوي. د Node.js ازموینې په جریان کې، 11 ګیجټونه وپیژندل شول چې د بریدونو تنظیم کولو لپاره کارول کیدی شي چې د برید کونکي کوډ اجرا کولو لامل کیږي. د پارس سرور سربیره، په NPM CLI کې دوه د ګټې اخیستنې زیانمنونکي هم پیژندل شوي.

سرچینه: opennet.ru

Add a comment