Найти в Дзене

Prototype Pollution

Всем привет! Сегодня мы разберём такую web-уязвимость как Prototype Pollution или "Прототипное загрязнение". Это уязвимость в языке JavaScript, которая позволяет атакующему «загрязнить» поле глобального объекта, которое может наследоваться пользовательскими объектами и создавать угрозу для безопасности приложения. Короче, в JavaScript одни объекты наследуют свойства других, и если мы сможем изменить какой-то родительский объект, то изменятся и другие, этим мы сейчас и займёмся! Допустим у вас есть сайт, на котором есть форма json. Для начала зарегаемся на сайте, а дальше берём нашу форму, и просто пишем туда такой вот json-запрос: {"__proto__":{"isAdmin":true}} Всё, админка наша:) Как защититься? Для начала посмотрим на уязвимый код: А теперь на защищённый: Вы видите то, что вижу я? Да, в первом варианте мы используем прототипирование, а во втором мы создаём полностью новый объект. Использование Object.create(null) гарантирует, что объект не имеет прототипа, а значит, никакое прото

Всем привет! Сегодня мы разберём такую web-уязвимость как Prototype Pollution или "Прототипное загрязнение".

Это уязвимость в языке JavaScript, которая позволяет атакующему «загрязнить» поле глобального объекта, которое может наследоваться пользовательскими объектами и создавать угрозу для безопасности приложения.

Короче, в JavaScript одни объекты наследуют свойства других, и если мы сможем изменить какой-то родительский объект, то изменятся и другие, этим мы сейчас и займёмся!

Допустим у вас есть сайт, на котором есть форма json. Для начала зарегаемся на сайте, а дальше берём нашу форму, и просто пишем туда такой вот json-запрос: {"__proto__":{"isAdmin":true}} Всё, админка наша:)

Как защититься? Для начала посмотрим на уязвимый код:

А теперь на защищённый:

-2

Вы видите то, что вижу я? Да, в первом варианте мы используем прототипирование, а во втором мы создаём полностью новый объект. Использование Object.create(null) гарантирует, что объект не имеет прототипа, а значит, никакое прототипное загрязнение не повлияет на его свойства. Вот так вот можно защититься от прототипирования. На этом всё, до встречи!