
Патч безопасности для CVE-2023-26136 в tough-cookie 2.5.0 — исправление уязвимости загрязнения прототипа с обратной совместимостью
Этот проект устраняет CVE-2023-26136 — критическую уязвимость прототипного загрязнения в версиях tough-cookie до 4.1.3. Уязвимость затрагивает веб-приложение компании Penguin Software Inc., которое использует [email protected] для обработки куки.
CVE-2023-26136 — это уязвимость прототипного загрязнения, которая возникает при использовании CookieJar с параметром rejectPublicSuffixes=false. Проблема вызвана неправильной инициализацией объектов в классе MemoryCookieStore, что позволяет злоумышленникам внедрять свойства в Object.prototype через вредоносные домены куки.
Уязвимость находится в lib/memstore.js, где куки хранятся с использованием обычных объектов JavaScript ({}). Поскольку эти объекты наследуются от Object.prototype, злоумышленники могут использовать это, устанавливая куки с доменами типа __proto__, constructor или prototype, что приводит к прототипному загрязнению.
Исправление заменяет все вхождения {} на Object.create(null) в классе MemoryCookieStore:
// Before (vulnerable)
this.idx = {};
// After (fixed)
this.idx = Object.create(null);
Это изменение предотвращает прототипное загрязнение, создавая объекты без цепочки прототипов, эффективно изолируя хранилище куки от нежелательного наследования.
lib/memstore.js: обновлена инициализация объектов для использования Object.create(null)├── README.md # This file
├── changes.diff # Git-compatible diff file
├── test-cve-2023-26136.js # Unit test for the fix
├── tough-cookie/
│ ├── index.js # Exploit demonstration
│ ├── Original v2.5.0/ # Original vulnerable version
│ ├── v2.5.0-PATCHED/ # Patched version
│ │ └── tough-cookie-2.5.0.tgz # Packed version
│ └── package.json
└── mission.txt # Original mission requirements
Исправленная версия доступна как tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz.
Для установки:
npm install ./tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz
Исходный набор тестов tough-cookie должен проходить. Для запуска тестов:
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
Примечание: Исходная версия tough-cookie 2.5.0 не включает каталог тестов в этой поставке, но исправленная версия сохраняет полную совместимость с оригинальным API.
Запустите пользовательский модульный тест для проверки исправления:
node test-cve-2023-26136.js
Ожидаемый вывод:
Testing CVE-2023-26136 fix...
✅ CVE-2023-26136 fix verified: No prototype pollution detected
✅ Test passed: The vulnerability has been successfully patched
Проект включает демонстрацию эксплойта в tough-cookie/index.js:
cd tough-cookie
node index.js
Это проверит как оригинальную уязвимую версию, так и исправленную, показывая:
EXPLOITED SUCCESSFULLY для оригинальной версииEXPLOIT FAILED для исправленной версииФайл changes.diff содержит diff, совместимый с git, который можно применить с помощью:
git apply changes.diff
Этот diff включает только необходимые изменения для исправления уязвимости без каких-либо непреднамеренных модификаций.
Эксплойт работает следующим образом:
CookieJar с параметром rejectPublicSuffixes: false__proto__Object.prototypeПотенциальный ущерб:
✅ Протестировано и подтверждено на Node.js 20 (LTS)
GitHub Репозиторий: Форкнутый репозиторий tough-cookie
Git Тэг: v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - Экспертный уровень
Jenkins - Продвинутый уровень
Travis CI - Средний уровень
CircleCI - Средний уровень
GitLab CI/CD - Продвинутый уровень
Этот проект сохраняет оригинальную лицензию tough-cookie (BSD-3-Clause), добавляя исправление безопасности.
Примечание: Это патч, ориентированный на безопасность, который сохраняет полную обратную совместимость, устраняя уязвимость CVE-2023-26136.