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, что в редких случаях может повлиять на отображение специфической верстки.

Временные меры

Если немедленное обновление библиотеки невозможно, примените следующие защитные механизмы:

  1. Использование jQuery Migrate: Подключите плагин jQuery Migrate версии 3.3.0 или выше. Он содержит исправления для безопасности, которые применяются к старым версиям библиотеки.
<script src="https://code.jquery.com/jquery-migrate-3.3.0.min.js"></script>

  1. Санитизация входных данных: Используйте специализированные библиотеки для очистки HTML (например, DOMPurify) перед передачей данных в методы jQuery.
var cleanHtml = DOMPurify.sanitize(untrustedInput);
$('#element').html(cleanHtml);

  1. Настройка Content Security Policy (CSP): Внедрите строгую политику CSP, запрещающую выполнение небезопасных встроенных скриптов (inline scripts), чтобы минимизировать риск эксплуатации XSS.
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';

  1. Замена методов: Там, где это возможно, замените использование .html() на .text(), если вывод не предполагает наличие HTML-разметки. Метод .text() автоматически экранирует все спецсимволы.