NoSQL Injection. MongoDB не спасает от взлома
Введение:
В этой статье мы узнаем об уязвимости типа NoSQL Injection. Разбираемся:
NoSQL - класс баз данных работающих без SQL запросов, самым популярным способом работы баз является ключ-значение, одна из популярнейших баз такого типа - MongoDB
Что собой представляет уязвимость NoSQL Injection?:
NoSQL инъекция очень похожа на SQL инъекцию, атакующий вставляет свою команду в запрос и заставляет базу работать по его правилам, по сути отличается лишь синтаксис пейлоадов
Основное:
Представим себе стандартную форму входа на сайт:
var regexpPwd = new RegExp("^" + password, "i"); var loginParam = { login: login, password: regexpPwd };
Как можно увидеть логин юзера проходит через запрос, который указывает регулярное выражение в качестве пароля. Переменная же password никак не фильтруется, это дает простор для уязвимостей!. Возможно указать пользователя root и регулярное выражение вместо пароля, например [\s\S]*. В результате MongoDB получит такой запрос запрос: «db.users.findOne({login: 'root', password: /^[\s\S]*/i})», и мы войдем под рутированным пользователем! (это схоже с SQL-инъекцией «1' or 1=1 --»).
Вывод:
Как мы убедились, не только SQL базы позволяет атакующему перехватить контроль над данными, что означает потребность в фильтрации всего пользовательского ввода используемого в запросах даже к NoSQL базам как MongoDB!
Внимание! Вся информация строго в ознакомительно-познавательных целях. Автор данной статьи, а также ресурс на котором он размещает данную статью, не несут ответственности за любые последствия от ее прочтения, а также за ваше плохое самочувствие, детей - двоечников и долги по ипотеке.