
Исправление использования пакета с открытым исходным кодом tough-cookie 2.5.0 - 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. Prototype Pollution относится к возможности внедрения свойств в существующие прототипы конструкций JavaScript, такие как объекты. JavaScript позволяет изменять все атрибуты Object, включая такие магические атрибуты, как proto, constructor и prototype. Злоумышленник манипулирует этими атрибутами, чтобы перезаписать или загрязнить прототип объекта базового объекта приложения JavaScript, внедряя другие значения. Свойства Object.prototype затем наследуются всеми объектами JavaScript через цепочку прототипов. Когда это происходит, это приводит либо к отказу в обслуживании из-за возникновения исключений JavaScript, либо к подмене исходного кода приложения для принудительного выполнения пути кода, внедрённого злоумышленником, что приводит к удалённому выполнению кода
Существует два основных способа загрязнения прототипов:
важное примечание: https://github.com/salesforce/tough-cookie/issues/282
=> Чтобы исправить уязвимость в классе MemoryCookieStore, необходимо изменить метод putCookie для предотвращения загрязнения прототипа, когда cookie.domain установлен в proto.
a. Измените tough_cookie_2.5.0\node_modules\tough-cookie\lib\memstore.js
Все случаи создания нового объекта в memstore.js были изменены с {} (он же Object.create(Object.prototype)) на Object.create(null).
Таким образом, мы используем экземпляры объектов, у которых нет свойства прототипа, которое может быть загрязнено.
b. Создан новый файл /node_modules/tough-cookie/lib/test-unit.js используется на ванильном JS; для него в папке tests есть файл cookie_jar_test.js «Issue #282 — Prototype pollution»
Команда: node test-unit.js
c. Создан новый файл /node_modules/tough-cookie/lib/testVerifyVulnerable.js проверяет, что уязвимое поведение было исправлено.
Команда: node testVerifyVulnerable.js
a. Обычный пакет tough-cookie V 2.5.0
Команда: npm install [email protected] && node index.js
b. Сжатый пакет tough-cookie V 2.5.0 в формате tgz с изменениями
Команда: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
c.
Prototype Pollution: Добавляя свойства непосредственно в Object.prototype, существует риск загрязнения всей цепочки прототипов. Это может привести к неожиданному поведению во всём приложении, так как любой объект, проходящий по цепочке прототипов, может быть затронут.
Риски безопасности: В контексте веб-приложения загрязнение прототипов может быть использовано злоумышленниками для манипуляции объектами и свойствами, что потенциально может привести к таким уязвимостям безопасности, как повышение привилегий, утечка информации.
Проблемы совместимости: Изменение основных прототипов, таких как Object. prototype, может привести к проблемам совместимости с другими библиотеками или фреймворками, которые полагаются на стандартное поведение. Это может вызвать ошибки или неожиданное поведение при интеграции или обновлении зависимостей. г. написано выше.
Как установить этот проект