1033 действующих секретных ключа Stripe оказались в открытом доступе у 669 вендоров из-за того, что файлы .env и логи отладки остались доступными в публичном интернете. Эти ключи позволяют любому пользователю создавать платежи, получать счета и собирать данные клиентов — утечка, которая может за считанные минуты опустошить кошельки и разрушить репутацию.

Что стало причиной утечки

Разработчики регулярно хранят конфигурационные данные — пароли к базам данных, API-токены и секретные ключи Stripe — в файле с именем .env. Этот файл находится рядом с исходным кодом и считывается во время выполнения программы, чтобы скрыть секреты от основной кодовой базы. Эта практика работает только в том случае, если сервер никогда не отдает файлы, начинающиеся с точки. В данном случае неправильно настроенные веб-серверы (как Nginx, так и Apache) позволяли запрашивать «/.env», «/.env.example», «/.git/HEAD» и кастомную конечную точку «/debug», возвращая содержимое файла со статусом 200 OK.

Утечка не была вызвана уязвимостью в платформе Stripe или недостатком в каком-либо конкретном плагине для электронной коммерции. Это было прямое обнажение файлов, которые должны были быть невидимы для внешнего мира.

Почему эта утечка критична

Секретный ключ Stripe — это, по сути, мастер-пароль к платежной инфраструктуре мерчанта. Любой, кто им владеет, может:

  • Создавать произвольные списания с сохраненных карт
  • Получать счета и историю выплат
  • Извлекать персональные данные — имена, адреса электронной почты, номера телефонов, домашние адреса, IP-адреса
  • Использовать промокоды для бесплатных или скидочных покупок

Утекший набор данных включал в себя всё вышеперечисленное, а также сведения о выплатах, которые раскрывают размер заработка каждого вендора. Для бизнеса непосредственным риском являются мошеннические транзакции, вызывающие чарджбэки, потеря доверия клиентов и потенциальные штрафы в рамках PCI-DSS, GDPR или других регламентов по защите данных. Долгосрочные издержки могут быть гораздо выше: судебные расходы, затраты на устранение последствий и ущерб бренду, который может никогда не восстановиться.

Быстрая проверка: не находится ли ваш .env в открытом доступе?

Откройте терминал и замените yourdomain.com на ваше доменное имя:

for p in "/.env" "/.env.example" "/.git/HEAD" "/debug"; do
  echo -n "$p -> "
  curl -s -o /dev/null -w "%{http_code}\n" "https://yourdomain.com$p"
done

Каждая строка должна возвращать 403 (forbidden) или 404 (not found). Ответ 200 означает, что файл доступен для публичного чтения — это критический инцидент безопасности, требующий немедленного внимания.

Немедленные шаги по устранению последствий

1. Заблокируйте dot-файлы на веб-сервере

  • Nginx — добавьте блок location, который запрещает любые запросы к файлам, начинающимся с точки.
  • Apache — используйте директиву FilesMatch в .htaccess, чтобы возвращать 403 для файлов с префиксом точки.

2. Усильте безопасность вашего Docker-процесса

  • Добавьте .env в .dockerignore, чтобы файл никогда не копировался в образ.
  • Избегайте использования инструкции COPY для любых файлов, содержащих секреты.

3. Смените (ротируйте) все скомпрометированные ключи

  • Войдите в Stripe Dashboard → Developers → API keys.
  • Сгенерируйте новый секретный ключ и немедленно отзовите старый.

4. Используйте ключи с минимальными привилегиями

  • Перестаньте использовать один секретный ключ для всех операций.
  • Создавайте ограниченные ключи (restricted keys), которые позволяют выполнять только необходимые действия — например, сервису оформления заказа (checkout service) нужно разрешение на создание платежных намерений (payment intents), но не на возврат средств или просмотр выплат.

5. Удалите все копии старого ключа

  • Просканируйте логи CI/CD, артефакты сборки и архивы резервных копий.
  • Запустите инструменты сканирования секретов, такие как Gitleaks или TruffleHog, для проверки вашей истории Git.

Утекший ключ не исчезает после удаления файла с сервера; он навсегда остается в руках того, кто его скачал. Ротация — единственный способ сделать украденные данные бесполезными.

Помимо исправления: создание более безопасного конвейера

  • Автоматизированное сканирование — интегрируйте обнаружение секретов в каждый pull request и задачу CI.
  • Управление конфигурациями — храните секреты в специализированном хранилище (например, HashiCorp Vault, AWS Secrets Manager) и внедряйте их во время выполнения, вместо того чтобы полагаться на статические файлы.
  • Аудит доступа — периодически проверяйте, какие ключи Stripe активны и какие разрешения они имеют.

Эти практики снижают вероятность того, что один неправильно настроенный сервер может поставить под удар всю платежную инфраструктуру.

На что обратить внимание в дальнейшем

Сообщество специалистов по безопасности уже ищет дополнительные скомпрометированные ключи, используя ту же методологию. Ожидайте новых разоблачений, по мере того как автоматизированные сканеры будут прочесывать интернет в поисках файлов «/.env», содержащих токены Stripe. Stripe может выпустить дополнительные рекомендации по периодичности ротации ключей и по использованию ограниченных ключей для операций с высоким уровнем риска.

Итог

Если к dot-файлу можно получить доступ через браузер, ваша платежная система уже скомпрометирована — заблокируйте файл, смените ключ и пересмотрите процесс управления секретами, прежде чем мошенничество отразится в вашем реестре.