В jQuery закрыта уязвимость, которая позволяет провести DoS-атаку или получить права администратора веб-приложения, использующего эту JavaScript-библиотеку на стороне клиента. Эксперт по кибербезопасности Лиран Тал (Liran Tal) из Snyk обнаружил брешь 26 марта; пропатченная версия jQuery — 3.4.0 — появилась 10 апреля.

jQuery — популярная библиотека, которая фокусируется на взаимодействии JavaScript и HTML. Согласно статистике W3Techs, в настоящее время ее использует около 74% сайтов. Уязвимость, относящаяся к классу prototype pollution («загрязнение» прототипа объекта JavaScript), могла затронуть сотни миллионов сайтов, сообщает ZDNet.

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

Чтобы продемонстрировать серьезность найденной уязвимости, Тал и команда Snyk атаковали веб-приложение, использующее jQuery, и смогли получить права администратора.

Несмотря на чрезвычайно широкий охват, уязвимости типа prototype pollution трудно эксплуатировать массово: каждый отдельный случай требует от хакера хорошего понимания особенностей атакуемой архитектуры. При успешном изменении свойств прототипа (т. н. «загрязнении») меняется вся логика обработки данных приложением. Это может привести к нескольким последствиям:

  • Отказ в обслуживании (DoS)  — наиболее вероятный сценарий. Обратившись к атрибутам прототипа, атакующий может присвоить им необрабатываемые значения — к примеру, задать целочисленный тип для Object.prototype.toString. Таким образом, исполнение кода становится невозможным после любого вызова метода someobject.toString().
  • Удаленное выполнение кода возможно только в случае использования функции eval(). Она позволяет выполнить код, переданный ей в виде строки. В этом случае атакующий может подменить аргумент, передаваемый в eval(), путем изменения атрибутов прототипа.
  • Внедрение свойств (property injection) — именно этот способ атаки использовал эксперт, чтобы получить права администратора. Для этого достаточно изменить значение Object.prototype.isAdmin на true, и свойства всех объектов, использующих данный прототип, меняются автоматически.

Последний раз jQuery сталкивалась с проблемами безопасности три года назад. Однако в октябре 2018-го стало известно об уязвимости плагина jQuery File Upload, допускающей выполнение стороннего кода. Как оказалось, злоумышленники ее знают и используют с 2015 года, а разработчик виджета внес соответствующие исправления в код только по получении отчета от эксперта.

Категории: Главное, Уязвимости