
Автоматизированный инструмент для обнаружения неверных конфигураций CORS, использующий домены с опечатками (тайпсквоттинг) и сервис-воркеры браузера для зондирования внутренних сетей целей программ bug bounty.
of-CORS — это набор инструментов Truffle Security для выявления и эксплуатации некорректных настроек CORS во внутренних сетях целей программ bug bounty с помощью тайпсквоттинга.
Подробнее можно прочитать здесь https://trufflesecurity.com/blog/of-CORS
of-CORS — это веб-приложение на Python3, построенное на Django и Django Rest Framework. После настройки и конфигурации of-CORS автоматически регистрирует сервис-воркеры браузера в браузерах любых жертв, посещающих приложение. Эти сервис-воркеры отправляют HTTP-запросы к списку предварительно настроенных внутренних доменов с целью обнаружения некорректных настроек CORS во внутренних сетях. Результаты этих запросов (успешных или нет) затем отправляются обратно в экземпляр of-CORS через API.
После регистрации сервис-воркера в браузере жертвы JavaScript-нагрузка перенаправляет браузер на страницу, которую, по мнению of-CORS, жертва изначально пыталась открыть.
Собранные результаты впоследствии можно просмотреть на минималистичной панели управления, доступной в приложении of-CORS.
Для развертывания of-CORS в собственной среде можно предпринять следующие шаги.
Из-за сложности настройки of-CORS (в первую очередь сложностей с SSL/TLS, DNS и необходимостью разрешать wildcard-запросы к обоим) мы используем двух облачных провайдеров (Heroku и Cloudflare) в стеке приложения и Terraform для автоматизации их настройки.
Начните с покупки домена, на который с большой вероятностью попадет внутренний сотрудник целевой компании. Мы рекомендуем приобрести тайпсквоттинговый домен, похожий на внутренний домен. Мы обнаружили, что ошибки копирования-вставки — хорошая отправная точка.
Например, если компания, CORS которой вы тестируете, использует uberinternal.com для внутренних доменов, вы можете приобрести berinternal.com, чтобы начать получать трафик браузеров от внутренних сотрудников.
of-CORS использует Cloudflare для приема и маршрутизации wildcard-запросов DNS, а также для завершения соединений SSL/TLS.
Вам потребуется активная учетная запись Cloudflare, чтобы правильно настроить DNS для of-CORS. После создания учетной записи Cloudflare вам нужно создать API-ключ (это можно сделать на панели управления здесь).
API-ключ должен иметь достаточные привилегии для добавления, удаления и настройки зон, а также DNS-записей. Это можно сделать, выбрав следующие разрешения на странице создания токена API:

После создания API-токена с нужными разрешениями можно переходить к следующему шагу.
of-CORS использует Heroku для простого развертывания и размещения приложения.
Вам потребуется активная учетная запись Heroku, чтобы запустить стек приложения of-CORS. После создания учетной записи установите инструмент командной строки Heroku (CLI). С установленным CLI вы можете начать аутентифицированный сеанс CLI с помощью следующей команды:
heroku login
Затем вы можете подтвердить, что CLI успешно аутентифицирован, выполнив следующую команду:
heroku whoami
Дополнительная документация по авторизации Heroku CLI для использования с Terraform доступна здесь.
Теперь, когда API-ключи для нашей инфраструктуры готовы, можно приступить к конфигурации of-CORS для развертывания. Взгляните на содержимое следующего примера файла конфигурации YAML, который находится в репозитории:
terraform:
# Вы должны изменить это на уникальную строку, которая является допустимым именем приложения Heroku
heroku_app_name: best-of-cors
# Укажите здесь ваш API-токен Cloudflare
cloudflare_api_token: this-is-my-api-token
hosts:
# Это может быть произвольная строка, но она должна быть уникальной как прямой потомок hosts
testing:
host_domain: 127.0.0.1:8080
redirect_domain: google.com
targets:
- enable-cors.org
- example.com
Вам нужно создать новый файл конфигурации YAML этого формата для развертывания.
В разделе terraform установите heroku_app_name на совместимое с Heroku имя приложения, уникальное для вашей учетной записи. Также добавьте ваш API-ключ Cloudflare, созданный в разделе выше, в директиву cloudflare_api_token.
Раздел hosts определяет домены, на которые of-CORS ожидает получать трафик, и что делать при посещении веб-посетителями. Предположим, у нас есть компания, которую мы атакуем, и мы знаем, что у них есть два внутренних домена (myinternalcorp1.com и myinternalcorp2.com). Мы приобрели домен yinternalcorp1.com в расчете на то, что сотрудники случайно его посетят. В этом случае следует настроить hosts следующим образом:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
Здесь host_domain — это домен, на который ожидается трафик (т.е. приобретенный домен). redirect_domain определяет домен, на который будут перенаправлены жертвы после запуска нагрузки. targets указывает домены, против которых будут запускаться нагрузки при посещении жертвой of-CORS.
Допустим, мы также приобрели yinternalcorp2.com и хотим настроить of-CORS на запуск атак при его посещении. Тогда раздел hosts можно обновить следующим образом:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
testing_2:
host_domain: yinternalcorp2.com
redirect_domain: myinternalcorp2.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
Теперь, если жертва случайно посетит yinternalcorp1.com или yinternalcorp2.com, будут запущены нагрузки для перечисления некорректных настроек CORS на myinternalcorp1.com и myinternalcorp2.com, а браузер жертвы затем будет перенаправлен на правильный домен.
Вам не потребуется устанавливать Terraform, Heroku, Python при использовании Docker. Просто выполните эту команду, указав правильный путь к вашему yaml-файлу:
docker run -v $PWD/config.yml:/config.yml -it --rm trufflesecurity/of-cors
Развертывание of-CORS зависит от Terraform. Вы можете следовать инструкциям по установке Terraform здесь. После установки бинарный файл terraform должен быть доступен в PATH вашей системы.
Развертывание of-CORS также зависит от Python3. Убедитесь, что он установлен и доступен в PATH вашей системы.
После настройки аутентификации у наших облачных провайдеров и подготовки файла конфигурации of-CORS можно переходить к развертыванию.
Сначала необходимо инициализировать Terraform. Эту команду следует запускать из корневого каталога исходного кода:
cd terraform && terraform init && cd ../
Предположим, наш файл конфигурации находится по пути /tmp/of_cors_config.yml. Тогда мы выполним следующие команды для запуска всей инфраструктуры of-CORS (обратите внимание, что команды предполагают выполнение в bash). Выполнение этой команды может занять 5–10 минут, так что наберитесь терпения!
Также обратите внимание: при очень больших перечислениях Heroku часто исчерпывает ресурсы. Это известная проблема, и мы будем рады вашей помощи в ее исправлении. Возможные будущие исправления включают возможность загрузки перечислений самостоятельно, увеличение размера Dyn в Heroku или переход на Sublist3r или другой инструмент перечисления.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ — может возникнуть состояние гонки, когда инфраструктура Heroku запускается и к ней сразу же обращаются через консоль. Если последняя команда make deploy_and_configure завершится с ошибкой, подождите несколько минут и попробуйте снова.
После завершения команды deploy_and_configure у вас будет:
of-CORS, заполненный кандидатами внутренних доменов с некорректными настройками CORSПоследнее, что нужно сделать для готовности развернутого of-CORS к приему трафика, — настроить приобретенные домены на использование Cloudflare в качестве авторитетных DNS-серверов. Cloudflare предоставляет подробное руководство по этому процессу здесь.
Выполните следующие шаги, чтобы убедиться, что ваше программное обеспечение работает правильно. Для целей этого раздела мы будем использовать экземпляр of-CORS, развернутый под доменом hackersofhollywood.com.
Сначала проверим, что SOA-записи нашего домена указывают на Cloudflare:
dig soa <domain>
Как показано ниже, SOA-записи для hackersofhollywood.com правильно указывают на серверы имен Cloudflare:

Затем проверим учетную запись Cloudflare, чтобы убедиться, что DNS-записи настроены как для hackersofhollywood.com, так и для *.hackersofhollywood.com с содержимым CNAME, указывающим на домены Heroku. Это делается через веб-интерфейс Cloudflare в разделе DNS:

Следующий шаг — подтвердить, что Heroku настроен на прием трафика через эти две CNAME-записи. Это можно сделать через веб-интерфейс Heroku в разделе Settings -> Domains:

Действительно, мы видим два доменных имени с соответствующими DNS-целями, настроенными в Heroku, и эти цели корректно отражены в CNAME-записях Cloudflare.
Затем выполните следующую команду, чтобы открыть аутентифицированный сеанс браузера на странице просмотра результатов of-CORS:
CONFIG_FILE=<path_to_config_file> make open_heroku_console
Это должно открыть пустую панель управления в вашем браузере:

Наконец, можно протестировать, успешно ли запускается зондирование некорректных настроек CORS. Откройте браузер на базовом домене одной из ваших конфигураций (в нашем примере https://hackersofhollywood.com) и убедитесь, что страница перенаправляется через несколько секунд:

Теперь вернитесь на страницу панели управления, измените фильтр Success на Unknown и нажмите кнопку Submit Query. Вы должны увидеть множество результатов:

Ваша ловушка установлена! Теперь просто расслабьтесь и ждите, пока ваши жертвы наткнутся на ваш привлекательный маленький домен.
Следующая команда используется для просмотра и запроса всех результатов в аутентифицированном сеансе браузера:
CONFIG_FILE=<path_to_config_file> make open_heroku_console
Файл конфигурации of-CORS предназначен для гибкого добавления и удаления доменов, для которых запускаются атаки. Просто обновите содержимое раздела hosts в вашем файле конфигурации и повторно запустите скрипт подготовки:
source venv/bin/activate
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure