Axios, как популярная клиентская библиотека HTTP, широко используемая в интерфейсной разработке, пользуется популярностью у многих разработчиков из-за ее простого API и асинхронной обработки на основе обещаний. Однако недавно в сообществе безопасности появилось сообщение о том, что Axios имеет важную уязвимость, связанную с обработкой механизмов защиты от подделки межсайтовых запросов (CSRF).
Проблема, обнаруженная в Axios 1.5.1, привела к непреднамеренной утечке секретного XSRF-TOKEN, хранящегося в файле cookie, путем включения его в HTTP-заголовок X-XSRF-TOKEN каждого запроса к любому хосту, что позволяет злоумышленнику просматривать конфиденциальную информацию. Если файл cookie XSRF-TOKEN доступен и параметр withCredentials включен, библиотека вставляет заголовок X-XSRF-TOKEN с секретным значением файла cookie XSRF-TOKEN во все запросы к любому серверу. Если злоумышленнику удастся получить это значение, это может привести к обходу механизмов защиты XSRF.
Дата выпуска ПНВ: 8 ноября 2023 г.
Запись словаря CVE: CVE-2023-45857.
Тип уязвимости: CWE-359 Предоставляет конфиденциальную информацию неавторизованным лицам.
Серьезность: Высокая
Влияние: обширное
Для получения более подробной информации, пожалуйста, просмотрите введение на официальном сайте:
https://cwe.mitre.org/data/definitions/359.html
CWE-359: Раскрытие частной личной информации неавторизованным лицам, да Common Weakness Запись в перечислении (перечисление общих слабостей), представляющая "Exposure of Private Information ('Privacy Нарушение')", то есть «Раскрытие частной информации (нарушение конфиденциальности)». У этой слабости описывание есть проблема с безопасностью.,Когда приложения не могут должным образом защитить конфиденциальные данные пользователей,Предоставление неавторизованным третьим лицам доступа или раскрытия этой информации.
В случае CWE-359 может произойти следующее:
CWE-359 нарушает права пользователей на конфиденциальность и может привести к утечке личных данных, что может иметь серьезные последствия как для отдельных лиц, так и для организаций. Чтобы избежать таких недостатков, разработчикам и организациям следует внедрять строгие политики обработки и хранения данных, проводить регулярные проверки безопасности и обеспечивать использование лучших практик для защиты личных данных. Для разработчиков понимание CWE-359 и принятие мер предосторожности имеют решающее значение для создания безопасного программного обеспечения.
Подделка межсайтовых запросов (CSRF) — это кибератака, которая позволяет злоумышленнику использовать статус входа пользователя в систему для инициирования вредоносных запросов к целевому приложению на другом веб-сайте. Опасность этой атаки заключается в том, что она может выполнять операции на целевом веб-сайте от имени пользователя без ведома пользователя, такие как смена паролей, перевод денег и т. д.
XSRF-TOKEN
это обычная защитная мера,Он предполагает существованиеклиента, генерирующего токен (Token).,Этот токен будет проверен существующим при выполнении конфиденциальных операций. Этот токен обычно генерируется существованием, когда пользователь открывает форму.,и отправляется обратно как часть данных формысервер。сервер Проверим отправленную формуXSRF-TOKEN
Соответствует токену, хранящемуся в сеансе пользователя.,чтобы подтвердить, что запрос является законным.
Уязвимости могут возникнуть в следующих случаях:
XSRF-TOKEN
,Таким образом, даже если существующийклиент устанавливает токен,Злоумышленник также может обойти этот механизм защиты. Например,Если сервер не проверяет токен для всех конфиденциальных запросов,Или есть изъян в логике проверки,Тогда злоумышленник сможет отправлять несанкционированные запросы.XSRF-TOKEN
,Или возникла ошибка при обработке файлов cookie,Приводит к тому, что токен не включается в существующий запрос.XSRF-TOKEN
или аналогичный защитный механизм,Или не включать его во всеобъемлющую стратегию безопасности.,может быть уязвим для атак CSRF.Посмотреть похожие статьи:
https://portswigger.net/web-security/csrf/preventinghttps://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
Чтобы защитить ваше приложение от атак CSRF, вам следует:
XSRF-TOKEN
。Этапы воспроизведения
Запустите новый проект, используя последнюю версию Next.js, выполнив следующую команду: npx create-next-app@latest. Затем установите последнюю версию библиотеки Axios с помощью этой команды: npm i axios Создайте экземпляр Axios со следующей конфигурацией и включите защиту от подделки межсайтовых запросов (CSRF), включив учетные данные в запрос:
const instance = axios.create({
withCredentials: true,
});
Установите файл cookie XSRF-TOKEN с определенными атрибутами. Установите для файла cookie значение «любой» и настройте строгую политику одного и того же сайта для домена «localhost»:
const cookies = new Cookies();
cookies.set("XSRF-TOKEN", "whatever", {
domain: "localhost",
sameSite: "strict",
});
Выполняйте запросы между источниками, используя экземпляр Axios. В этом примере мы делаем запрос GET на «https://www.com/» и обрабатываем ответ и потенциальные ошибки:
instance
.get("https://www.com")
.then((res) => console.log(res.data))
.catch((err) => console.error(err.message));
Запустите проект и откройте вкладку сети браузера для отладки и мониторинга сетевой активности. Убедитесь, что запрос перекрестного происхождения к «https://www.com/» содержит заголовок «X-XSRF-TOKEN» со значением «что угодно». Убедитесь, что значение файла cookie «XSRF-TOKEN» передается на любой сторонний хост при отправке запросов с использованием экземпляра Axios. Это критически важно для безопасности, поскольку вы не хотите передавать токены CSRF неавторизованным лицам. Фрагмент кода lib/adapters/xhr.js:191
const xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath))
ожидаемое поведение
Ожидаемые результаты: XSRF-TOKEN не будет передаваться сторонним хостам.
Фактический результат: утечка XSRF-TOKEN в каждом запросе, сделанном с использованием экземпляра Axios.
Версии Axios [v0.8.1] - [v1.5.1]
Ссылки:
[1]https://portswigger.net/web-security/csrf/preventing
[2]https://github.com/axios/axios/issues/6006
[3]https://nvd.nist.gov/vuln/detail/CVE-2023-45857
[4]https://cwe.mitre.org/data/definitions/359.html
Киллиан
2023-11-14
●Знаете ли вы этот базовый терминологический словарь K8s?
●Как выполнить пакетное удаление и запланировать резервное копирование в Linux?
●В чем разница между async/await и цепочкой обещаний?
●Запустите проект next.js за три минуты
●Быстро начните работу с миром открытого исходного кода за три минуты!