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

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

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

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

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

Категории

Все категории
Loading categories
SealSecurityAssignment — Researching on the vulnrability CVE-2023-26136 | Kitploit
Инструменты/GitHubGitHub/cucumberanorsncompany/sealsecurityassignment
Static AnalysisVulnerability AnalysisCode AnalysisExploitationWeb SecurityLearning & Education
GitHubcucumberanorsncompany/sealsecurityassignment

SealSecurityAssignment

Researching on the vulnrability CVE-2023-26136

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Репозиторий
12 лет назадЕщё не проверено

SealSecurityAssignment

Исследование уязвимости CVE-2023-26136

Исследование уязвимости: CVE-2023-26136

Описание:

Версии пакета tough-cookie до 4.1.3 уязвимы к Prototype Pollution из-за неправильной обработки Cookies при использовании CookieJar в режиме rejectPublicSuffixes=false. Эта проблема возникает из-за способа инициализации объектов.

https://nvd.nist.gov/vuln/detail/CVE-2023-26136

Введение:

Что такое Prototype Pollution?

JavaScript имеет концепцию объектов, которые чем-то похожи на словари. Объект может содержать набор переменных разных типов (например, string, Boolean, int и т.д.), имя переменной — это ключ, а её значение — это значение, если продолжать аналогию со словарями и объектами. Точнее, объект аналогичен самой структуре данных словаря, а каждая переменная аналогична паре ключ-значение. У объектов также есть ключевое слово proto, которое позволяет добавлять дополнительные переменные в объект через изменение его прототипа. Prototype Pollution — это атака, при которой злоумышленник загрязняет свой объект, добавляя в него дополнительные переменные с помощью ключевого слова proto. Ниже приведено взаимодействие с консолью браузера, демонстрирующее атаку.

изображение

Как мы видим, у нас есть два пользователя: admin1 и user1. Объект admin1 имеет булеву переменную "isAdmin", установленную в true. У user1 этой переменной вообще нет. На строке 7 мы добавляем переменную isAdmin в прототип user1, и хотя из строки 10 видно, что переменная не была добавлена в сам объект user1, консоль положительно реагирует, когда мы проверяем значение user1.isAdmin. Это происходит потому, что user1 наследует свойства своего прототипа.

изображение

Также стоит упомянуть, что прототип сам по себе является объектом, который, в свою очередь, наследует свойства и методы от своего прототипа, создавая цепочку прототипов. Цепочка заканчивается нулевым прототипом, поэтому разумный подход для предотвращения prototype pollution — сделать так, чтобы объект, с которым мы работаем, явно наследовал от нулевого прототипа.

Что такое cookies?

Cookies (часто называемые интернет-куки) — это текстовые файлы с небольшими фрагментами данных — как имя пользователя и пароль — которые используются для идентификации вашего компьютера при использовании сети. Определенные cookies используются для идентификации конкретных пользователей и улучшения их опыта веб-серфинга.

Предоставлено Kaspersky: https://www.kaspersky.com/resource-center/definitions/cookies

Что такое CookieJar?

CookieJar — это объект для хранения cookies.

Задание:

Уязвимость:

Согласно описанию уязвимости, она возникает из-за того, как Tough-Cookie инициализирует Cookies. Поскольку Cookies являются объектами, они, по крайней мере теоретически, уязвимы для Prototype Pollution.

Риски:

Имея возможность вмешиваться в объекты и, в частности, в cookies через прототип объекта, злоумышленник потенциально может получить доступ к неавторизованным данным, выполнить удаленный код, вызвать отказ в обслуживании, перехватить сессию, если веб-сайт полагается на cookies для управления сессией, и извлечь конфиденциальные данные из самих cookies.

Патч:

Патч был сделан в файле: memstore.js. Согласно отслеживанию проблемы, а также патчу, представленному в версии 4.1.3, для исправления уязвимости необходимо хранить cookies в карте или создать объект this.idx. Создавая this.idx с помощью: this.idx = Object.create(null); вместо this.idx = {}, мы применяем мое предложение по предотвращению Prototype Pollution из введения, наследуя от нулевого прототипа и обрывая цепочку прототипов.

Тестирование уязвимости (index.js):

Snyk опубликовал Proof of Concept (PoC) для обсуждаемой уязвимости. Я построил index.js на его основе. Обернул его в логику try-catch для перехвата исключений, если они возникают, добавил дополнительный вывод для отслеживания прогресса тестов и получил требуемый вывод (например, "EXPLOITED SUCCESSFULLY" или "EXPLOITED FAILED"). При выполнении команды: npm install [email protected] && node index.js Мы получаем следующий вывод:

изображение

При выполнении команды: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js Мы получаем следующий вывод:

изображение

В обоих сценариях (запуск с опубликованной версией 2.5.0 и запуск с моей исправленной версией) нам удалось установить как обычный cookie, так и эксплуатируемый cookie, но в исправленной версии нам не удалось получить доступ к эксплуатируемому cookie.

Заключение:

В ходе этого задания я узнал об атаке Prototype Pollution, изучил объекты JavaScript и познакомился с пакетом Tough-Cookie.

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