• XSS.stack #1 – первый литературный журнал от юзеров форума

Node.js (Express.js, Next.js, Nuxt.js) - куда копать? (векторы атак)

zdestuta

(L1) cache
Пользователь
Регистрация
04.06.2024
Сообщения
749
Реакции
373
Например, если с PHP всё более-менее понятно, то на Node.js даже если залить умудриться js файл, то он не будет выполняться как PHP скрипт.
Да, возможны SQLi, но как правило в nodejs библиотеках упор сделан на prepared statements, а туда уже SQLi не засунешь... или всё-таки можно?
Был бы очень признателен как идеям "куда копать", так и особенно практическим (кто ломал nodejs based) советам.
Надеюсь тема будет интересна не только мне.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
В ноде могут быть sql иньекций потому что некоторые не юзают орм и прямаком запросы кидают
 
В ноде могут быть sql иньекций потому что некоторые не юзают орм и прямаком запросы кидают
SQLi могут быть, не спорю, но для их предотвраения не обязательно ORM, достаточно prepared statements. А вот конкатенация строк или подстановка параметра в строку (ES6, string interpolation) это прям визитная карточка - здесь SQLi. Но это если код доступен для просмотра, иначе только sqlmap'ом "нащупывать".

Интересно может какие-то специфические векторы атаки могут быть на nodejs (express.js, next.js, nuxt.js фреймворки), может быть типичные ошибки какие-то, информации мало по этому, в сотни раз меньше чем по PHP.
 
Понятное дело, что если CVE нет, то фреймворк сам как правило "неуязвим" ну только разве что 0-day сам найдёшь :)
Но у фреймворков обычно есть плагины всякие и кривые руки разрабов "а вот тут мы сбоку что-то запилим..." типа того - об этом и спрашиваю?
У кого-то был опыт поломки серверного JS стека именно? расскажете? может быть почитать что-то порекомендуете на тему ломки именно nodejs based?
Знаю только что APT группировки спецом внедрять пытаются в NPM'ки свои "закладки" в код. Но это конечно же другой уровень не мой.
 
Копай в сторону prototype pollution (и изучи Embedded JavaScript). Материала у иностранцев много и у меня в планах есть написать статью, но должен нод изучить.
А что даст prototype pollution? Функцию же свою в JSON payload не засунешь увы, а если заменить тот же toString() на невнятное ебобо то обычно это даёт ну ошибку 500, например, разве что инфу собрать если дебаг логи вываливаются обратно не отключены.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А что даст prototype pollution?
Интересно может какие-то специфические векторы атаки могут быть на nodejs
Уязвимости v8 . Самая дырявая платформа из всех существующих.
 
Ответить на этот вопрос не смогу, тк ЯП никакой я не знаю и даже объяснить что такое прототип у меня не выйдет, тут есть список пэйлоадов и некоторых кейсов https://book.hacktricks.xyz/pentesting-web/deserialization/nodejs-proto-prototype-pollution . Относительно моих понятий, если поменять что то в штуке, с ктоого берётся другая штука, то сама другая штука тоже поменяется. Если поменять значение какого то ключа, то мохзно включить некоторые функции, изменить некоторые разрешения (наверное)
Также есть РЦЕшки по ходу: https://github.com/KTH-LangSec/server-side-prototype-pollution
Ну прототип в JS это такая штука для наследования, весь ООП у JS он же основан на функциях (class правда добавили но это "синтаксический сахар", по сути функция в JS является и объектом и может иметь параметры и вложенные функции и наследование имеется) по сути через поле _proto_ , переданного как payload JSON к REST ендпоинту, можно ко всем объектам в памяти в runtime прям добавить что-то, но увы это "что-то" не может быть функцией :-( так как JSON не умеет функции передавать, а только число, строку, bool, объект {} или массив [], поэтому я не понял как можно это эксплуатировать как-то посерьёзнее чем вызвать 500-ю ошибку (причём "навсегда" испортить, ну пока сервер на nodejs не перезагрузят, эдакий DoS получается)
 

Уязвимости v8 . Самая дырявая платформа из всех существующих.
спасибо. кажется понял - на цели может быть шаблонизатор, который может переданные в payload строки рассмотреть в качестве кода (или псевдокода самого шаблонизатора).
а я то всю голову издумал как в JSON передать функцию :)))
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх