CVE-2020-11023
JQuery JQuery
2025-01-23
JQuery contains a persistent cross-site scripting (XSS) vulnerability. When passing maliciously formed, untrusted input enclosed in HTML tags, JQuery's DOM manipulators can execute untrusted code in the context of the user's browser.
Технический анализ и план устранения
Суть уязвимости
CVE-2020-11023 — это уязвимость типа Cross-Site Scripting (XSS), возникающая при обработке HTML-кода методами манипуляции DOM в библиотеке jQuery (например, .html(), .append(), .prepend()).
Проблема заключается в том, что jQuery до версии 3.5.0 использовала регулярное выражение для «очистки» и автоматического закрытия тегов. Злоумышленник может передать специально сформированный HTML-код (часто использующий теги <option> внутри других элементов), который обходит эти фильтры. В результате браузер интерпретирует вредоносный скрипт, что приводит к выполнению произвольного JavaScript-кода в контексте сессии пользователя.
Как исправить
Основным и наиболее надежным способом устранения уязвимости является обновление библиотеки jQuery до версии 3.5.0 или выше.
Обновление через npm:
npm install jquery@3.5.0
Обновление через yarn:
yarn upgrade jquery@3.5.0
Обновление в HTML (CDN): Замените старую ссылку на актуальную версию:
<script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
После обновления необходимо провести регрессионное тестирование фронтенд-части приложения, так как в версии 3.5.0 была изменена логика парсинга HTML, что в редких случаях может повлиять на отображение специфической верстки.
Временные меры
Если немедленное обновление библиотеки невозможно, примените следующие защитные механизмы:
- Использование jQuery Migrate: Подключите плагин jQuery Migrate версии 3.3.0 или выше. Он содержит исправления для безопасности, которые применяются к старым версиям библиотеки.
<script src="https://code.jquery.com/jquery-migrate-3.3.0.min.js"></script>
- Санитизация входных данных: Используйте специализированные библиотеки для очистки HTML (например, DOMPurify) перед передачей данных в методы jQuery.
var cleanHtml = DOMPurify.sanitize(untrustedInput);
$('#element').html(cleanHtml);
- Настройка Content Security Policy (CSP): Внедрите строгую политику CSP, запрещающую выполнение небезопасных встроенных скриптов (inline scripts), чтобы минимизировать риск эксплуатации XSS.
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';
- Замена методов:
Там, где это возможно, замените использование
.html()на.text(), если вывод не предполагает наличие HTML-разметки. Метод.text()автоматически экранирует все спецсимволы.