The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Атака на Node.js через манипуляции с прототипами объектов JavaScript

27.07.2022 15:44

Исследователи Центра Гельмгольца по информационной безопасности (CISPA) и Королевского технологического института (Швеция) проанализировали применимость техники засорения прототипа объектов JavaScript ("prototype pollution") для создания атак на платформу Node.js и популярные приложения на её основе, приводящих к выполнению кода.

Метод засорения прототипа использует особенность языка JavaScript, позволяющую добавить новые свойства в корневой прототип любого объекта. В приложениях могут встречаться блоки кода (гаджеты), на работу которых влияет подставленное свойство, например, в коде может быть конструкция вида 'const cmd = options.cmd || "/bin/sh"', логика работы которой будет изменена, если атакующий сумеет подставить свойство "cmd" в корневой прототип.

Для успешного совершения атаки требуется, чтобы в приложении поступающие извне данные могли использоваться для создания нового свойства в корневом прототипе объекта, а также чтобы в ходе выполнения встречался гаджет, зависящий от изменённого свойства. Изменение прототипа осуществляется благодаря обработке в Node.js служебных свойств "__proto__" и "constructor". Свойство "__proto__" возвращает прототип класса объекта, а свойство "constructor" возвращает функцию, используемую для создания объекта.

Если в коде приложения встречается присвоение "obj[a][b] = value" и значения выставляются из внешних данных, атакующий может выставить "a" в значение "__proto__" и добиться установки своего свойства с именем "b" и значением "value" в корневом прототипе объекта (obj.__proto__.b = value;), при этом выставленное в прототипе свойство будет видно во всех объектах. Аналогично если в коде встречаются выражения вида "obj[a][b][c] = value", выставив "a" в значение "constructor", а "b" в "prototype" во всех существующих объектах можно определить новое свойство с именем "c" и значением "value".

Пример изменения прототипа:


   const o1 = {};
   const o2 = new Object () ;
   o1.__proto__.x = 42; // создаём в корневом прототипе свойство "x" 
   console.log (o2.x);  // обращаемся к свойству "x" из другого объекта
   // на выходе получим 42, так как через объект o1 был изменён корневой прототип, используемый в том числе и в объекте o2

Пример уязвимого кода:


   function entryPoint (arg1, arg2, arg3){
      const obj = {};
      const p = obj[arg1];
      p[arg2] = arg3;
      return p; 
   }

Если аргументы функции entryPoint формируются из входных данных, то атакующий может передать в arg1 значение "__proto__" и создать в корневом прототипе свойство с любым именем. Если передать в arg2 значение "toString", а в arg3 - 1, можно определить свойство "toString" (Object.prototype.toString=1) и добиться краха приложения во время вызова функции toString().

В качестве примера ситуаций, которые могут привести к выполнению кода атакующего, приводится создание свойств "main", "shell", "exports", "contextExtensions" и "env". Например, атакующий может создать в корневом прототипе объекта свойство "main", записав в него путь к своему скрипту (Object.prototype.main = "./../../pwned.js") и данное свойство будет вызвано в момент выполнения в коде конструкции require("my-package"), если подключаемый пакет явно не определяет в package.json свойство "main" (если свойство не определено, оно будет получено из корневого прототипа). Аналогично могут быть подставлены свойства "shell", "exports" и "env":


   let rootProto = Object.prototype;
   rootProto["exports"] = {".":"./changelog.js"};
   rootProto["1"] = "/path/to/npm/scripts/";
   // trigger call
   require ("./target.js");

   Object.prototype.main = "/path/to/npm/scripts/changelog.js";
   Object.prototype.shell = "node";
   Object.prototype.env = {};
   Object.prototype.env.NODE_OPTIONS = "--inspect-brk=0.0.0.0:1337";
   // trigger call
   require ("bytes");

Исследователи проанализировали 10 тысяч NPM-пакетов, имеющих наибольшее число зависимостей, и выявили, что 1958 из них не имеют свойства main в package.json, 4420 используют относительные пути в выражении require, а 355 напрямую используют API для подстановки команд.

В качестве работающего примера можно привести эксплоит для атаки на бэкенд Parse Server, переопределяющий свойство evalFunctions. Для упрощения выявления подобных уязвимостей разработан инструментарий, комбинирующий методы статического и динамического анализа. В ходе тестирования Node.js было выявлено 11 гаджетов, которые можно использовать для организации атак, приводящих к выполнению кода атакующего. Помимо Parse Server, две эксплуатируемые уязвимости также были выявлены в NPM CLI.

  1. Главная ссылка к новости (https://www.theregister.com/20...)
  2. OpenNews: Атака по извлечению данных из кэша CPU, реализуемая в web-браузере без JavaScript
  3. OpenNews: Использование JavaScript для атаки через манипуляцию с содержимым буфера обмена
  4. OpenNews: Разработан метод атаки на уязвимость в DRAM-памяти с использованием JavaScript
  5. OpenNews: Атака через JavaScript по определению содержимого L3-кэша CPU
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/57562-javascript
Ключевые слова: javascript, node.js, prototype, pollution
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (118) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, истина в последней инстанции (?), 16:21, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +16 +/
    Это не тот который тут вчера панельку создал для kde на этом г?

    Обезьянки такие обезьянки.

     
     
  • 2.2, ананоша (?), 16:25, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • –4 +/
    У него на божественном typescript, а тут дырявый javascript
     
     
  • 3.4, Аноним (4), 16:28, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Аксиома Эскобара..
     
     
  • 4.48, Аноним (48), 18:53, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +7 +/
    ШОК! Если атакующий может выполнить код, чтобы изменить прототип, то он может не только изменить прототип, но и выполнить код!
     
     
  • 5.88, Аноним (88), 11:01, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Говорят, в архитектуре фон Неймана код ничем не отличается от данных (передаваемых через http-запрос).
     
     
  • 6.106, Аноним (-), 20:03, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Говорят, лекции по CS прогуливать не надо... хотя сельпошному кодеру и так сойдет.
     
     
  • 7.109, Аноним (109), 20:19, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Скрипт на (ba)sh, lua, js, sql, postscript, и т.д., в том числе на Тьюринг-полном css - это код или данные?
     
  • 3.7, Аноним (-), 16:34, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А на тайпскрипте что-то такое не прокатит?
     
  • 3.9, th3m3 (ok), 16:36, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +9 +/
    >божественном typescript

    Вот ещё почему typesciprt - зло. Человек начинает думать, что его код безопасен, а это может быть совсем не так.

     
     
  • 4.40, истина в последней инстанции (?), 18:27, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Человек начинает думать, что его код безопасен, а это может быть совсем не так.

    Это не только в typescript, ещё и rust туда-же

     
     
  • 5.114, Аноним (114), 11:22, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Только бездарные дилетанты и дешевые бросуны сравнивают TS и Rust Если понимать... большой текст свёрнут, показать
     
  • 5.120, burjui (ok), 14:07, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А ещё в JavaScript и C++, и вообще в любом ЯП. И?
     
  • 4.119, burjui (ok), 14:06, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А, может, это человек, который не читает документацию и безопасность спихивает на язык - зло?
     
  • 3.35, Аноним (35), 17:50, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Выше вы прочитали переписку людей без чувства юмора.
     
     
  • 4.65, Аноним (65), 22:03, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Или пример закона По.
     
     
  • 5.68, Аноним (68), 22:52, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это вряд ли, не тот сайт. Ты тут напиши, что консоль DOS лучше консоли Linux потому что экономно расходует память - увидишь как радостно поведутся на троллинг в ветке на сотню комментариев.
     
     
  • 6.78, мевин (?), 08:53, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Всегда радует как люди без фантазии изящно называют свой неприкрытый дебилизм "троллинг". Маркетологи хорошо постарались, втянув 80% смотреть интернет-рекламу.
     
     
  • 7.84, Аноним (68), 09:25, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не, это не только отсутствие ч. ю., но еще и чрезмерная серьезность. Ядреная комбинация.
     
  • 3.52, Владимир (??), 19:22, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Знаменитая Фракталова дырень ...
     
  • 2.17, Аноним (17), 16:54, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    То ли дело remote дырень в ядре линукса на православной сишечке! Там вообще root получают, но так, по-доброму!
    И да, разумеется это другое))
     
     
  • 3.20, Аноним (20), 16:59, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    ну перепиши linux kernel на JS, посмотрим какие там будут уязвимости. И переписать надо так, чтоб запускался на голом железе и можно было в нем запустить эту твою нодужыэс
     
     
  • 4.27, Аноним (27), 17:22, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • –8 +/
    Ну перепиши web приложение на C, посмотрим какие там будут уязвимости и сколько 😂😂😂

    Слабо? Хейтеры JavaScript только языком чесать умеют?

    Где все ваши тысячи классных приложений на С и С++?

     
     
  • 5.28, Аноним (-), 17:28, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Как где? У тебя, баклан. Ты бы без сишечки сюда на опеннетик вообще пискнуть не смог. А вот JS здесь таки наглухо опционален, у меня он тут зарублен вообще совсем.
     
     
  • 6.36, Аноним (27), 18:10, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Я спросил где твой софт на нём?

    То, что умные американские дяди написали и ядро, и браузер, и ОС когда и в помине JS не было, это я в курсе.

    Но при чём тут ты, хейтерок?

     
     
  • 7.46, YetAnotherOnanym (ok), 18:39, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Мой - у меня и организаций, в которых я работал. Немножечко на гитхабе - то, что я счёл полезным для людей и нашёл время причесать. Ссылку не дам, извини, я там под своим реальным именем.
     
  • 7.104, Аноним (-), 19:57, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Я спросил где твой софт на нём?

    Например в микроконтроллерах. А если по мелочи то я патчей довольно много куда закидывал так то.

    > Но при чём тут ты, хейтерок?

    При том что я с этими дядями совместно работаю над некоторыми вещами при случае? А что до хейта, ты начал безблаголатный понт с синдромом утенка сам, какое к тебе отношение после этого должно быть?

     
  • 5.43, истина в последней инстанции (?), 18:30, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не поверишь. Вагон. И качество куда получше.
     
  • 5.47, Аноним (20), 18:40, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Где все ваши тысячи классных приложений на С и С++?

    они все в закрытой репе у Intel в виде патчей для yocto linux.

     
  • 5.51, мимо (?), 19:03, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Ну перепиши web приложение на C
    >Где все ваши тысячи классных приложений на С и С++?

    Норм такая подмена понятия. Сначала вебприложения, потом просто приложения.

     
  • 5.53, Без аргументов (?), 19:23, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    буквально пару мес назад вебманки нахимичили в сайте ПР так, что мне показывались разные чужие посылки при каждом обновлении страницы.
     
     
  • 6.54, Без аргументов (?), 19:24, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    а когда глянул в json-чики, там и имейлы других пользователей спалили с другими их данными
     
     
  • 7.57, qwe (??), 20:11, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Где-то с год назад на довольно популярном в России сайте изучения английского яз... большой текст свёрнут, показать
     
  • 7.105, Аноним (-), 20:01, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А я вообще уронил вон тому вебмакакеру его чудо-код первым же реквестом. Пора йогой заняться - двойного фэйспалма уже недостаточно!!!
     
  • 5.79, мевин (?), 08:58, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Накинулись на мальчонку лол.
    Малыш, ты будешь немного удивлен, узнав чуть получше о жизненном цикле своих прекрасных дам файликов.
     
  • 4.50, Аноним (50), 18:59, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >ну перепиши linux kernel на JS, посмотрим, кто этим тормознутым жрущим говном пользоваться сможет

    Пофиксил.

     
  • 3.23, Аноним II Великолепный (?), 17:03, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А что за дырень? Посвяти на нее,  может ссылка есть?
     
  • 3.25, Аноним (25), 17:05, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тут нет никакой дырени, если приложение разрешает менять свой код то это проблема конкретного приложения, просто ребята из Центра Гельмгольца набивают себе индекс цитирования для грантов или ещё для чего.
     
  • 3.41, истина в последней инстанции (?), 18:28, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Толи дело раст. Ни одного проекта законченного так и не появилось. Мертвячина.
     
     
  • 4.55, Анонн (?), 19:27, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Один аноним при упоминании Си не смог не стригерится и не написать про раст.
    И у него отвалились жoпа :(
     
     
  • 5.61, истина в последней инстанции (?), 21:30, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Другое дело растоман с враждённым растоманским ДЦП. И без жопы (перманентное недержание) и без мозгов (вытекли до того как запустился)
     
     
  • 6.116, НяшМяш (ok), 13:37, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Другое дело растоман с враждённым растоманским ДЦП.

    Всем бы дцпшникам такого дцп. Всяко лучше жсной микроцефалии.

     
  • 5.86, Аноним (86), 10:40, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Параноики, что сказать.
     
  • 4.102, Аноним (102), 17:44, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Казалось бы какое дело до rust, анонимным opennet экспертам, они ни на Раст не пишут, ни на js, ни на java, ни на Си, но в каждой новости наваливают целые кучи своего ценного мнения
     
  • 2.87, Аноним (102), 10:49, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Что ещё ждать от так называемых программистов.
    Сколько бы на опеннетные эксперты не объясняли им, что они просто "Обезьянки", они все равно продолжают писать свои так называемые программы, на так называемых языках программирования
     

  • 1.3, Аноним (3), 16:28, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Прекратите кибербулить мой любым JavaScript!!!

    // b.

     
     
  • 2.12, Аноникалипсатор7 (?), 16:39, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    дни жабыскрипта сочтены,  такой удар еще не переживал ни один язык погроммирования
     
  • 2.56, Аноним (56), 19:28, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Пиши сразу на webassembly. Или не асилил?
     
     
  • 3.76, Аноним (76), 08:23, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Его и не надо осиливать, если надо выдавать результат (относительно) быстро при худо-бедно приемлемом качестве. Ты же на ассемблере большой и сложный проект писать не будешь (а если и будешь то ты или фрик или хобби у тебя такое). Так и тут, выбирай свой любимый язычок, в котором есть поддержка компиляции в вебассембли и соответствующий фреймворк - "и вперьод!". Ну например возьмешь какой-нибудь Blazor от мелкомягких или раст :) с одним из пары-тройки растовских веб-фреймворков.
     
     
  • 4.80, мевин (?), 09:01, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты предложил язык от мелко мягких и фрейм от мразософт. А ты хитрый:)
    Мелкосовт проиграл войну браузеров и решил зайти в веб с черного хода.
     
     
  • 5.85, Аноним (76), 09:56, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    я же сразу предложил в ассортименте (опережая твою следующую ремарку - не г.вна!), сказал же:  "...или раст :) с одним из пары-тройки растовских веб-фреймворков". Выбирай на вкус или ищи/пиши веб-фреймворк для своего любимого язычка с "канпелятором в LLVM" чтобы в вебассембли было проще перегонять.
     

  • 1.5, Аноникалипсатор5 (?), 16:31, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ужас,  как все запущено,  надо срочно переписывать ноду на раст
     
     
  • 2.10, Quarck (?), 16:39, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Так уже. Называется deno.
     
     
  • 3.29, Аноним (-), 17:30, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это какое-то DeNo! Надо было и интерпретировать синтакс хруста :). Кстати до чего-то наподобие даже кто-то вроде додумался.
     
  • 2.13, Ф1 (?), 16:40, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    уже давно переписали https://deno.land/
     
     
  • 3.14, Аноникалипсатор7 (?), 16:43, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    тогда надо переписать еще раз,  дважды
     
     
  • 4.60, Bun.sh (?), 21:10, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Так уже https://bun.sh
     
  • 3.15, НяшМяш (ok), 16:50, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Там ещё V8 на мерзких крестах, его теперь надо переписать /s
     
     
  • 4.83, Аноним (83), 09:15, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Так уже https://bun.sh/
     
     
  • 5.89, Вы забыли заполнить поле Name (?), 11:32, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > extending JavaScriptCore, the engine

    Эмм. JavaScriptCore на чем написан, Карл?

     

  • 1.6, Анна Нист (?), 16:34, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Говорят за этим языком все операционные системы будущего.
    Ах.. да, забыл.. уже! 99,9% пользователей пк используют браузеры
     
     
  • 2.8, Аноним (-), 16:35, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Все операционные системы ботнетов будущего 8)
     
     
  • 3.11, pork chop suey (?), 16:39, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    если всё будет ботнет, то смысл тогда в ботнете как таковом?
     
     
  • 4.30, Ботнет (?), 17:30, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    После узнаете.
     
  • 4.77, Аноним (76), 08:27, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Майнить крипту на каждом утюге планеты. Больше узлов - больше сатошиков.
     
  • 2.33, Аноним (33), 17:33, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Анна Нист : "забыл" или "забыла"?
     
     
  • 3.64, Sw00p aka Jerom (?), 21:39, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    какая разница и те и те дрочат:)
     
  • 2.81, мевин (?), 09:02, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > говорят

    Врут безбожно

     
     
  • 3.111, Аноним (109), 20:33, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Врут безбожно

    Оскорбление чувств верующих в отсутствие (единственного) бога.

     

  • 1.16, olegz (ok), 16:53, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это ведь нельзя выполнить с клиента, правильно? в частности require ("bytes");
     
     
  • 2.38, Бывалый смузихлёб (?), 18:20, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Выполнить то много что можно но суть в выполнении именно на стороне сервака
     
     
  • 3.99, olegz (ok), 16:17, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    если только на сервере, то не вижу большой проблемы. Просто надо следить за зависимостями проекта
     
     
  • 4.118, Аноним (118), 03:34, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Просто надо следить за зависимостями проекта

    Ты же сейчас пошутил? В среднем проекте от 1000 - 4000 зависимостей.
    Ты или создаешь свою вселенную с нуля или просто нет смысла использовать NodeJS.

     

  • 1.18, Аноним (18), 16:55, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Да ладно, говно можно сотворить на любом языке. В сях есть #define true false, в расте процедурные макросы вообще во время компиляции могут в сеть сходить и биткойны помайнить. Всегда есть к чему докапаться.
     
     
  • 2.34, Аноним (-), 17:34, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ух, да, только ты в рантайм #define true false не передашь при всем желании, ибо нет там никакого препроцессора уже. А вот яваскрипт в этом плане позволяет неиллюзорно поприкалываться.

    Я так понимаю некоторые штуки типа umatrix на этом по сути половину своей работы строят, делая невероятный оверлоад большей части браузерных кишок и .. ... .. вот враждебная вебня уже получает вообще совсем не то что оно там себе думало :). И хотя в данном случае это даже как бы фича, но так и в обратную сторону по идее можно, для создания хреновой кучи нежданчиков воооон тому коду с менее мирными целями. О чем вроде бы сабж и есть.

     
     
  • 3.39, Бывалый смузихлёб (?), 18:25, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А теперь шаг 2 ( вообще-то с него и стоило начать ) - попробуй добиться исполнения нужного кода на стороне сервера
    Ладно ещё кто-то в какой-то пакет «паленый» что-то понатолкал и кто-то что-то подхватил при его запуске

    А вот как добиться исполнения этого на совершенно конкретном серваке, вот тут и начинаются вопросы
    Ведь если уже можешь исполнить код на стороне сервера( чего и требует «уязвимость» ), то в принципе многое сильно проще. А если нет - то это не поможет

     
     
  • 4.58, qwe (??), 20:43, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Речь как я понял речь тут о том, что при определенной комбинации кода (пакетов) на сервере, клиент может менять код на сервере посредством передачи специально оформленных входных данных. Причем именно не поведение кода, а сам код. Конечно, такое можно провернуть и на других платформах (привет глобальным переменным PHP и функциям типа eval), но JS тут всех переплюнул: он дает возможность поменять поведение всех экземпляров уязвимого класса, а не только того, которому "повезло" обработать данные с инъекцией.
     
     
  • 5.71, Аноним (71), 05:07, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ровно точно так же, как в комплируемых языках, если код одного из модулей может посредством удаленных команд читать и писать из указанных удаленно адресов памяти, можно, при некоторой осторожности, точно так же крутить и вертеть всем приложением и делать все что угодно.
     
     
  • 6.92, qwe (??), 13:37, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Что, вот прям так, через манипуляцию свойством объекта можно изменить код всего класса, причем вполне легитимными для языка методами? Переполнения буфера, стека и т.д. я знаю, но это немного другое, скорее управление неопределенным поведением программы, а не "все нормально, так и должно быть". По мне так когда я пишу такое:
    let a = {}; a[b] = c;
    при этом не слежу ни за 'b' ни за 'c', и получаю уязвимость - это нормально, это стандартный механизм языка, сам дурак. А вот когда результат моего головотяпства выходит за пределы *локальной* переменной 'a' и это считается нормальным, стандартным механизмом языка, то сие начинает немного напрягать: как так, теперь нужно следить не только за глобальными и локальными переменными в коде но и за всем ядром языка. Но зато гибко и порой удобно. Да и вообще, чего переживать, ведь весь код мой и все это не выходит за пределы браузера пользователя... Подождите, что? Это теперь на серверах? Какой еще NPM?!
     
     
  • 7.93, qwe (??), 13:39, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Блин, там весь мой чудо-код сломался. Сорри.
     
     
  • 8.97, Аноним (18), 14:49, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Точно так же, как можно в любом одном месте сделать int offset get_offset_from... текст свёрнут, показать
     
  • 4.107, Аноним (-), 20:11, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > А теперь шаг 2 ( вообще-то с него и стоило начать ) - попробуй добиться
    > исполнения нужного кода на стороне сервера

    Оно как бы да, но вон там все же забавный фокус придумали. Сколько еще таких нежданчиков в JS зарыто - вопрос интересный.

     
  • 3.42, Аноним (42), 18:30, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > враждебная вебня

    Так не ходи во враждебную вебню. Ходи в гофер.

     
     
  • 4.108, Аноним (-), 20:16, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Так не ходи во враждебную вебню. Ходи в гофер.

    А я им даже пользуюсь. Поприятене вебни так то - делает то что заявлено, без потуг майнить коины и шпионить для полпланеты, мегалибы на 2 метра для валидации пары полей в форме не грузит, все дела.

    Вебню реально использовать только с очень кастомными настройками браузера, жестким адблокером и веб-файрволом. Без всего этого - оно столь же круто и безопасно как иметь портовую б-дь без презика. Потом заманаешься лечить последствия.

     
  • 3.82, мевин (?), 09:06, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > так понимаю

    Неверно понимаешь. Матрикс блочит

     

  • 1.19, Аноним II Великолепный (?), 16:59, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Браузерное поделие пустили в сервера, что теперь делать? как жить? как спать? как спать теперь?
     
  • 1.21, Аноним (25), 17:01, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Для успешного совершения атаки требуется, чтобы в приложении поступающие извне данные могли использоваться для создания нового свойства в корневом прототипе объекта

    Очередной цирк безопасности.

     
  • 1.24, Аноним (24), 17:03, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Prototype-based programming, кушайте :3
     
     
  • 2.26, Аноним (25), 17:07, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вообще не в тему.
     

  • 1.31, Аноним (31), 17:32, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Они последние 10 лет под камнем пролежали?
    Атака на прототип это ж классика…
     
     
  • 2.32, Аноним (31), 17:33, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=prototype+pollution
     
  • 2.37, Аноним (25), 18:11, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Гранты сами себя не выдадут, надо статьи клепать и постить на arxiv.org
     
     
  • 3.44, Аноним (42), 18:31, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А чего сам не написал статью? Получил бы грант, пожил бы с размахом.
     

  • 1.45, Аноним (45), 18:35, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Эммм. Доброе утро.
     
  • 1.49, Аноним (50), 18:56, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >Если в коде приложения встречается присвоение "obj[a][b] = value"

    Уж сколько раз твердили миру: new Map().

     
     
  • 2.62, истина в последней инстанции (?), 21:32, 27/07/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Уж сколько раз твердили миру: new std::map().

    поправил, не благодари.

     
     
  • 3.94, Вы забыли заполнить поле Name (?), 14:09, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >> Уж сколько раз твердили миру: new std::map().
    > поправил, не благодари.

    Зачем тебе new с std::map? Он сам внутри память выделяет, а его обычно выделяют на стеке (как и std::vector и прочие контейнеры).

     
  • 2.73, Аноним (73), 07:12, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Object.create(null) хватит всем.
     
     
  • 3.98, Аноним (102), 15:56, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Только json.parse возвращает объекты с  __proto__
     
  • 2.95, Вы забыли заполнить поле Name (?), 14:12, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>Если в коде приложения встречается присвоение "obj[a][b] = value"
    > Уж сколько раз твердили миру: new Map().

    Просто JSON parse возвращает объект, а не Map. Плюс вложенные ключи не сохранить, optional chaining нельзя использовать. То есть да, Map правильно, но также поощрают использовать обычные объекты.

     

  • 1.63, Аноним (63), 21:39, 27/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Победили Flash
     
  • 1.70, Аноним (102), 00:00, 28/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Придется __proto__ фильтровать во всем что пришло от пользователя.
    Уязвимость уровня php phar
     
  • 1.90, Вы забыли заполнить поле Name (?), 11:35, 28/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Желтый заголовок какой-то. Причем тут сам Node.js? То есть есть модули, которые не проверяют ввод пользователя и если их использовать то можно получить уязвимость? Ок. Вообще сама уязвимость стара как мир. Еще на CTF 18 года ее юзал.
     
     
  • 2.96, Аноним (96), 14:26, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Проблема не в отсутствии проверки данных от пользователя. Не должен разраб знать и фильтровать все эти служебные слова с подчёркиваниями __ __
     

  • 1.91, Вы забыли заполнить поле Name (?), 12:06, 28/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Насколько я помню свойство __proto__ вообще deprecated было https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objec Но его все же в стандарт добавили, чтобы не ломать сильно интернет. Вообщем как обычно: сделали глупость, глупость заиспользовали макаки, глупость добавили в стандарт (facepalm)
     
     
  • 2.101, Аноним (65), 16:32, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Чего ж ты не влез в комитет и не показал всем, как надо?
     
     
  • 3.112, Вы забыли заполнить поле Name (?), 09:33, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Чего ж ты не влез в комитет и не показал всем, как
    > надо?

    Мне не интересен js. А надо ввести версионирование js по аналогии со стандартами в с++. В старых версиях убрать все упячки.

     
     
  • 4.115, НяшМяш (ok), 13:33, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Мне не интересен js. А надо ввести версионирование js по аналогии со
    > стандартами в с++. В старых версиях убрать все упячки.

    Так хотели сделать в ECMAScript 4 ещё сто лет назад - но хомяки пролоббировали оставить все упячки.

     

  • 1.100, Аноним (65), 16:27, 28/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    С каких это пор "блоки кода" стали называться "гаджетами"?
    Хоть бы дали точное определение, что имели в виду, а то гугол выдаёт всякую хрень
     
     
  • 2.110, Аноним (-), 20:19, 28/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Так не ходи во враждебную вебню. Ходи в гофер.

    Примерно вечность. Просто этот сленг практикуется в немного другой тусовочке нежели вебмакаки.

     
  • 2.117, Аноним (117), 20:55, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это такие блоки кода, которые можно использовать в своих целях как отдельный элемент.
    Слово гаджет в русском языке засижено маркетологами и означает то же, что смартфон или ещё какая-нибудь техника, но в английском это более общее понятие. В словарях все есть.
     

  • 1.103, fuggy (ok), 17:53, 28/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Прототипное наследование хорошо говорили они. Только забыли что все объекты наследуются от object клоаки. И то есть получается, что через класс Dog я могу поменять класс Cat — отлично.
     
     
  • 2.113, Вы забыли заполнить поле Name (?), 10:57, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Прототипное наследование хорошо говорили они. Только забыли что все объекты наследуются
    > от object клоаки. И то есть получается, что через класс Dog
    > я могу поменять класс Cat — отлично.

    Прототипное наследование тут не при чем. В питоне точно также можно этого добиться.

     
     
  • 3.121, Че769 (?), 09:06, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Сперва добейся
     
     
  • 4.122, Вы забыли заполнить поле Name (?), 17:13, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Сперва добейся

    class A:    
        x = 1    
        
    class B(A): pass    
        
    class C(A):    
        def __init__(self):    
            self.__class__.__bases__[0].x = 2    
                                                                                                        
    b = B()    
    assert b.x == 1    
    c = C()    
    assert b.x == 2

     
  • 2.127, Аноним (127), 02:06, 03/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    лол, то, что ты можешь сделать теж же сях на уровне доступа к памяти ни в какое сравнение не идет с этим
     

  • 1.124, мяя (?), 23:49, 02/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    https://github.com/nodejs/node/issues/31951
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру