Механизмы защиты, настроенные клиентами Cloudflare (например, брандмауэр, предотвращение DDoS-атак) для веб-сайтов, могут быть обойдены из-за пробелов в межсетевых контролях безопасности, что потенциально подвергает клиентов атакам, которые Cloudflare должен предотвратить. Злоумышленники могут использовать свои собственные аккаунты Cloudflare для злоупотребления доверительными отношениями между Cloudflare и веб-сайтами клиентов, делая механизм защиты неэффективным. Клиенты Cloudflare должны пересмотреть свою стратегию защиты исходного сервера, чтобы убедиться, что настроенные ими механизмы защиты надежно применяются.
Обзор уязвимости
Cloudflare описывает различные механизмы для «предотвращения атак, направленных на обнаружение и перегрузку вашего исходного сервера запросами» в своей официальной документации по различным уровням модели OSI (уровень приложений, уровень транспорта и уровень сети). Механизмы аннотируются с разной степенью уровней безопасности, либо «умеренно безопасными», либо «очень безопасными», а также связанными с ними техническими сложностями. В ходе нашего анализа мы обнаружили, что два предложенных механизма основаны на предположении, что весь трафик к исходному серверу, исходящий от Cloudflare, должен быть доверенным, в то время как трафик от других сторон должен быть отклонен. Мы показываем, что злоумышленники могут злоупотреблять этим доверием к Cloudflare, отправляя свой злонамеренный код через платформу Cloudflare, обходя различные механизмы защиты (например, брандмауэр веб-приложений), которые клиент мог настроить для своей среды. Эффективное воздействие этого обхода зависит от конфигурации исходного сервера клиента.
Authenticated Origin Pulls
При использовании механизма «Authenticated Origin Pulls» на уровне транспорта, который в документации Cloudflare описан как «очень безопасный», обратные прокси-серверы Cloudflare аутентифицируются на исходном сервере с помощью клиентского SSL-сертификата. Документация по настройке зоны представляет два варианта аутентификации подключений от клиентов, которые маршрутизируются через обратный прокси-сервер Cloudflare, к исходному серверу. Клиенты могут выбрать либо «сертификат Cloudflare», либо собственный сертификат. Однако документация не обсуждает последствия для безопасности, связанные с этими вариантами. Также следует отметить, что собственный сертификат можно настроить только с помощью API. Без дополнительной информации разумно предположить, что клиенты выберут более удобный вариант использования сертификата Cloudflare.
Серьезное последствие использования общего «сертификата Cloudflare вместо специфического для арендатора собственного CA заключается в том, что разрешаются все подключения, исходящие от Cloudflare, независимо от того, какой арендатор Cloudflare инициирует подключение. Злоумышленник может настроить собственный домен с Cloudflare и указать DNS A запись на IP-адрес жертвы. Затем злоумышленник отключает все функции защиты для этого собственного домена в своем арендаторе и туннелирует свою (или свои) атаку (атаки) через инфраструктуру Cloudflare. Этот подход позволяет злоумышленникам обходить функции защиты, настроенные жертвой.
Это можно устранить только с помощью собственных сертификатов, что требует от клиента создания и поддержания своих собственных сертификатов для проверки подлинности исходного сервера.
Белый список IP-адресов Cloudflare
При использовании механизма «Разрешить IP-адреса Cloudflare» на сетевом уровне, который в документации Cloudflare описан как «умеренно безопасный», исходный сервер отклоняет любое подключение, не исходящее из диапазонов IP-адресов Cloudflare. Документация по настройке описывает, как настроить эти диапазоны с помощью файла .htaccess или iptables.
Как и в случае с проверкой подлинности исходных запросов, серьезное последствие этого механизма заключается в том, что разрешаются все подключения, исходящие от Cloudflare, независимо от арендатора. Злоумышленник может создать собственный домен с Cloudflare, направить DNS A запись на IP-адрес жертвы. Затем он отключает все функции защиты для этого собственного домена и направляет свою (или свои) атаку (атаки) через инфраструктуру Cloudflare, фактически обходя функции защиты, настроенные жертвой.
В настоящее время эту проблему можно смягчить только с помощью Cloudflare Aegis , которая предлагает выделенные выходные IP-адреса вместо использования общего диапазона IP-адресов. Эта услуга может быть доступна не всем клиентам.
Доказательство концепции
Ниже приведена настройка успешного обхода защищенного WAF-домена victim.test, который пытается защитить исходный сервер 203.0.113.42, используя «Authenticated Origin Pulls» с сертификатом Cloudflare Origin, а также «Allowlist Cloudflare IP addresses», как указано в официальной документации. Атакующий просто настраивает домен attacker.test без какой-либо защиты WAF и устанавливает тот же IP-адрес источника, что и victim.test. Это позволяет атакующему успешно отправлять запросы на 203.0.113.42 через attacker.test, которые были бы заблокированы при попытке сделать это через victim.test
Конфигурация аккаунта жертвы в Cloudflare
Домен: victim.test
A-запись DNS указывает на: 203.0.113.42
Настройки Cloudflare:
- Режим шифрования SSL/TLS: «Полный (строгий)».
- Включены запросы к аутентифицированному источнику
- Сертификат происхождения Cloudflare создан.
- Управляемый набор правил WAF Cloudflare включен
- Базовый набор правил WAF Cloudflare OWASP включен
- Уровень безопасности: «Я под атакой» — всегда использовать HTTPS включено.
Конфигурация исходного сервера жертвы
- Cloudflare Origin Certificate installed (SSL/TLS enabled)
- Authenticated Origin Pulls CA installed (SSLVerifyClient enabled)
- iptables only allows ingress traffic from Cloudflare IPs on port 443
Конфигурация аккаунта злоумышленников в Cloudflare
Домен: attacker.test DNS A запись указывает на: 203.0.113.42 Настройки Cloudflare:
- Режим шифрования SSL/TLS: «Полный».
- Включены запросы к аутентифицированному источнику
- Управляемый набор правил WAF Cloudflare отключен.
- Основной набор правил WAF Cloudflare OWASP отключен.
- Уровень безопасности: «Практически выключен»
Обход защиты
Cloudflare WAF защищает сервер жертвы от потенциально вредоносного ввода.
> GET https://victim.test/?test=cat%20/etc/passwd HTTP/2
< HTTP/2 403 Forbidden
Cloudflare перенаправляет потенциально вредоносный ввод на сервер источника жертвы, обходя конфигурацию WAF жертвы.
> GET https://attacker.test/?test=cat%20/etc/passwd HTTP/2
< HTTP/2 200 OK
Рекомендации для клиентов Cloudflare
«Механизм ‘Allowlist Cloudflare IP addresses’ следует рассматривать как меру глубокой обороны и не использовать в качестве единственного механизма защиты исходных серверов. Механизм ‘Authenticated Origin Pulls’ должен быть настроен с использованием собственных сертификатов, а не сертификата Cloudflare. При защите исходных серверов следует также рассмотреть другие механизмы аутентификации арендатора Cloudflare (а не самой Cloudflare), описанные в документации, а также их различные компромиссы (например, запуск стороннего кода на чувствительных веб-серверах).
Мы рекомендуем Cloudflare внедрить механизмы защиты от таких атак и предупредить клиентов с ненадежными конфигурациями.»
Хронология раскрытия информации:
- 2023-03-16: Сообщение о проблеме отправлено Cloudflare через HackerOne (отчет 1909867).
- 2023-03-16: Cloudflare признал наличие проблемы и закрыл ее (баг информативный).
- 2023-09-28: Публичное раскрытие (>180 дней).