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-файлу можно получить доступ через браузер, ваша платежная система уже скомпрометирована — заблокируйте файл, смените ключ и пересмотрите процесс управления секретами, прежде чем мошенничество отразится в вашем реестре.
