Часть 40. Процесс воспроизведения, анализа, использования и исправления уязвимостей междоменного совместного использования ресурсов CORS.
Часть 40. Процесс воспроизведения, анализа, использования и исправления уязвимостей междоменного совместного использования ресурсов CORS.

Часть 1. Предисловие

Уязвимость междоменного совместного использования ресурсов CORS аналогична уязвимости перехвата JSONP.,Программисты внесли неправильные настройки при решении междоменных задач. Злоумышленники могут использовать веб-приложения для небрежной проверки заголовка Origin пакетов пользовательских запросов.,Обманом заставить жертву посетить вредоносный веб-сайт, созданный злоумышленником.,Тем самым мы получаем конфиденциальные данные жертвы в разных доменах, включая записи о переводах, записи транзакций, информацию о личном идентификационном номере, информацию о заказах и т. д.

В последние годы во многих отчетах по тестированию на проникновение сообщается о все большем количестве уязвимостей междоменного совместного использования ресурсов CORS. Некоторые друзья действительно не могут найти уязвимость, поэтому время от времени пишут отчет об уязвимости междоменного совместного использования ресурсов CORS. Однако при ближайшем рассмотрении следующие проблемы оказываются неоднозначными и неясными.

1. Что такое уязвимость CORS?

2. При каких обстоятельствах уязвимости CORS являются уязвимостями высокого риска? При каких обстоятельствах уязвимости CORS безвредны?

3. Как эксплуатировать уязвимость CORS?

4. Рекомендации по исправлению уязвимостей CORS?

много друзейДумать, что веб-приложение возвращает Access-Control-Allow-Origin: *, означает наличие уязвимости. На самом деле это суждение несовершенно.。Этот вопросABC_123Я написал один самJavaтестовая среда,Позвольте мне продемонстрировать вам процесс воспроизведения и использования уязвимости CORS.,Я думаю, каждый поймет это с первого взгляда.

Результаты теста уязвимости CORS части 2

Сначала приведены результаты испытаний ABC_123.,Следующие выводы — это выводы, которые я сделал, когда писал собственный Java-код для создания среды для тестирования.,Приглашаем всех критиковать и исправлять。Первое использованиеburpsuiteПара захвата пакетовhttpПросьба добавитьOrigin: http://www.attacker.comтест:

1 Если заголовок возврата следующий, это уязвимость высокого риска. В этом случае лучше всего использовать уязвимость:

Access-Control-Allow-Origin: https://www.attacker.com

Access-Control-Allow-Credentials: true

2 Если возвращаемый заголовок имеет следующий вид, его также можно считать уязвимостью высокого риска, но его сложнее эксплуатировать:

Access-Control-Allow-Origin: null

Access-Control-Allow-Credentials: true

3 Если возвращается следующее, уязвимость не существует, поскольку для существования уязвимости значение Null должно быть в нижнем регистре:

Access-Control-Allow-Origin: Null

Access-Control-Allow-Credentials: true

4 Если возвращается следующее, можно считать, что уязвимости нет, поскольку в этом случае механизм безопасности CORS предотвращает эксплуатацию уязвимости, а также могут быть записаны ошибки конфигурации CORS с низким уровнем риска.

Access-Control-Allow-Origin: *

Access-Control-Allow-Credentials: true

5 Если возвращается следующее, можно считать, что уязвимости нет, и также может быть записана ошибка конфигурации CORS с низким уровнем риска.

Access-Control-Allow-Origin: *

Часть 3: Повторение междоменной уязвимости CORS

  • Процесс тестирования общих уязвимостей CORS

Сначала просмотрите традиционный процесс тестирования уязвимостей CORS: возьмите пакет HTTP-запроса, который может возвращать конфиденциальные личные данные, добавьте Origin: http://www.xxx.com и проверьте, содержит ли заголовок возврата «Access-Control-Allow-Origin». « : *», «Access-Control-Allow-Credentials: true», здесь следует отметить: если эти два заголовка существуют в возвращаемом пакете одновременно, то на самом деле он не имеет уязвимости CORS. Далее, в соответствии с разными возвращаемыми значениями Access-Control-Allow-Origin и Access-Control-Allow-Credentials, напишите Java-код, чтобы проверить, можно ли получить конфиденциальные данные, и все поймут.

  • Написание тестов Java-кода

Затем я написал два кода сервлетов на Java для имитации веб-сайта покупок в Интернете и использовал интерфейсный код JS для имитации HTML-страницы эксплойта уязвимости CORS, созданной злоумышленником.

Как показано ниже, первым является код сервлета интерфейса входа в систему.

Эффект кода следующий: после того, как пользователь вводит имя пользователя и пароль, веб-сайт магазина сообщает, что вход в систему прошел успешно. В это время фоновый код сгенерировал файл cookie.

Затем пользователь посещает страницу PersonInfo, http://192.168.237.1:9999/Servlet/PersonInfo, и пароль транзакции — 123456.

Код Sevlet PersonInfo, соответствующий этой странице, выглядит следующим образом:

Далее, чтобы получить пароль транзакции пользователя торгового сайта, злоумышленник,Следующая страница Attack.html тщательно создана и размещена на веб-сервере.,Атака в это времяURLдаhttp://www.attacker111.com/attack.html。Злоумышленник использует этоURLОтправить жертве на просмотр,Будет получен пароль транзакции жертвы.

  • Случай 1:

Давайте сначала рассмотрим первый случай. Сервер возвращает следующий заголовок сообщения. В этом случае его очень легко использовать, поэтому уязвимость оценивается как высокий риск:

Access-Control-Allow-Origin: https://www.attacker.com

Access-Control-Allow-Credentials: true

Эти два возвращаемых заголовка указывают на то, что приложение позволяет любому скрипту из любого источника отправлять CORS-запросы к приложению. На данный момент код программиста пишется так:

После того как жертва получает доступ к URL-адресу, созданному злоумышленником, она успешно получает конфиденциальные данные пользователя.

F12 проверил запрос, отправленный браузером, и обнаружил, что он содержит файлы cookie, что позволяет успешно обойти междоменные ограничения одного и того же происхождения.

  • Случай 2:

Сервер возвращает следующий заголовок сообщения. В этом случае его немного сложно использовать. Все нули здесь должны быть строчными, и уязвимость по-прежнему имеет высокий риск.

Access-Control-Allow-Origin: null

Access-Control-Allow-Credentials: true

В этом случае значение заголовка ответа HTTP приложения Access-Control-Allow-Origin всегда равно нулю. Когда пользователь указывает любое значение, отличное от нуля, приложение не обрабатывает его.

В это время я посетил http://192.168.237.199/attack.html и обнаружил, что браузер выдал ошибку политики CORS.

Потому что Origin в это время не равен нулю

Здесь нам нужно найти способ сделать Origin равным нулю, чтобы злоумышленник сконструировал следующий js-код:

В это время было обнаружено, что конфиденциальные данные пользователя все еще можно успешно получить.

  • Случай 3:

Сервер возвращает следующий заголовок сообщения: В этом случае уязвимости на самом деле нет. Если вам нужно сказать, что уязвимость есть, вы можете договориться об ошибке конфигурации CORS. В конце концов, установка * сама по себе проблематична.

Access-Control-Allow-Origin: *

Access-Control-Allow-Credentials: true

Соответствующий Java-код выглядит следующим образом:

Посетив http://www.attacker111.com/attack.html, выяснилось, что браузер напрямую сообщил об ошибке. Похоже, что такая ситуация вообще не разрешена политикой безопасности.

  • Случай 4:

Сервер возвращает следующий заголовок сообщения. Это не будет продемонстрировано. Это только показывает, что существует проблема с конфигурацией CORS, но конфиденциальные данные не могут быть получены. Рейтинг уязвимости должен быть средним или низким.

Access-Control-Allow-Origin:*

  • Результаты тестирования браузера Chrome

Затем я протестировал последнюю версию Google Chrome и обнаружил, что она успешно обходит политику одного и того же источника и инициирует междоменный запрос. Однако браузер Chrome не отправлял файлы cookie для запроса, поэтому уязвимость была ограничена.

Рекомендации по исправлению части 4

1. Источником, указанным в Access-Control-Allow-Origin, могут быть только доверенные сайты. Избегайте использования Access-Control-Allow-Origin: *, избегайте использования Access-Control-Allow-Origin: null, иначе злоумышленник может подделать запросы к источникам для кражи междоменных ресурсов.

2. Строго проверяйте значение «Origin», а регулярное выражение для проверки должно быть хорошо написано, чтобы избежать обходов.

3. Уменьшите количество методов запроса, разрешенных «Access-Control-Allow-Methods».

4. Помимо правильной настройки CORS, веб-серверы должны продолжать защищать конфиденциальные данные, такие как аутентификация и управление сеансами.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose