Риск: Средний 5.3 Medium CWE-540: Inclusion of Sensitive Information in Source Code

Source Maps в продакшне: почему нельзя оставлять .map файлы

Файлы Source Maps (*.js.map) создаются сборщиками для отладки кода разработчиком. Они связывают сжатый и минифицированный продакшн-бандл с оригинальными некомпилированными файлами TypeScript/React.

Если файлы .map развернуты на боевом сервере, любой посетитель сайта через инструменты разработчика Chrome DevTools получает доступ к исходным исходникам, структуре папок, внутренним комментариям и служебным функциям.

Степень критичности и чем опасна уязвимость

Раскрытие исходников упрощает злоумышленникам обратный инжиниринг вашего приложения, поиск закрытых эндпоинтов и недокументированных параметров API.

Вектор атаки: Автоматизированные сканеры и поисковые ботнеты постоянно исследуют интернет по данной сигнатуре. При обнаружении уязвимости атака запускается в автоматическом режиме без участия человека.

Как наш сканер находит эту уязвимость

Site Check анализирует директивы //# sourceMappingURL= в подключенных скриптах и проверяет HTTP-доступность файлов .map на сервере.

В рамках сканирования конфигурационных файлов модуль Site Check отправляет легковесные изолированные HEAD- и GET-запросы с валидацией статус-кодов (404/403 vs 200). Запросы содержат стандартные маркеры безопасности и не сохраняют скачиваемые данные в постоянное хранилище, предотвращая несанкционированное распространение конфиденциальной информации.

Как устранить уязвимость (Пошаговое руководство)

Для ликвидации риска выполните следующие действия в конфигурации вашего сервера или приложения:

Отключение source maps в конфигурации сборщика
      // В vite.config.ts или next.config.js:
export default defineConfig({
  build: {
    sourcemap: false, // Отключаем генерацию карт исходников для продакшна
  },
});
    
  • Установите build.sourcemap: false в конфигурации сборщика Vite / Webpack / Next.js.
  • Удалите файлы *.map из рабочей веб-директории на сервере.
  • Если отладка в продакшне необходима, настройте приватную загрузку карт в систему мониторинга ошибок (Sentry).

Анатомия атаки и реальные последствия для проекта

Наличие файлов .map в продакшне позволяет открыть вкладку Sources в Chrome DevTools и восстановить оригинальный неминифицированный код TypeScript. Исследователь видит комментарии TODO, закрытые эндпоинты админки, внутренние структуры данных и логику валидации, что в разы упрощает поиск уязвимостей нулевого дня.

Финансовые и юридические риски: Раскрытие приватных алгоритмов, закрытых маршрутов API и архитектуры приложения конкурентам и злоумышленникам, что снижает барьер для проведения целевых атак.

Влияние на соответствие стандартам: Несоответствие рекомендациям OWASP Top 10 (A05:2021 Security Misconfiguration) и политике защиты исходного кода.

Матрица эшелонированной защиты (Defense-in-Depth)

Уровень защиты Техническое действие Инструмент / Механизм
Конфигурация сборщика (Bundler) Установка sourcemap: false или sourcemap: "hidden" в vite.config.ts / webpack.config.js Vite / Rollup Config
Веб-сервер Nginx Блокировка запросов к файлам с расширением .map для внешних пользователей Nginx location rule
Мониторинг ошибок Загрузка карт кода напрямую в Sentry через CLI в CI/CD без их публикации на хостинге Sentry CLI

Верификация устранения: команды для быстрой проверки

После внесения изменений в настройки сервера или исходный код приложения проверьте отсутствие уязвимости с помощью терминальных утилит:

Терминал: Проверка эндпоинта и заголовков ответа
curl -I -s https://ваш-домен.com/index.js.map | grep "HTTP/"
# Ожидается 404 Not Found
    

Рекомендации DevSecOps для безопасного развертывания

В файле конфигурации vite.config.ts или tsconfig.json установите sourcemap: false для режима production (или sourcemap: "hidden", если карты отправляются в Sentry).

Контрольный чеклист инженера безопасности:
  • ✓ Добавить шаблоны .env* и .git* в корень .gitignore и глобальный gitignore
  • ✓ Внедрить автоматический pre-commit хук gitleaks в локальный пайплайн разработки
  • ✓ Настроить регулярную ротацию скомпрометированных токенов API
  • ✓ Проверить конфигурацию веб-сервера на блокировку запросов к скрытым файлам

Часто задаваемые вопросы по устранению

Зачем нужны source maps в продакшне?
Они нужны только сервисам сбора ошибок (например, Sentry) для перевода минифицированного стека вызовов в читаемый вид. Для этого используйте скрытые карты, загружаемые напрямую в Sentry по API.
Видны ли в source map переменные окружения?
Да, если в процессе сборки сборщик заинлайнил значения переменных среды в тело кода, они будут видны в исходных файлах .ts/.tsx.
Экспертное резюме инженера по информационной безопасности

Утечки секретов и конфигурационных файлов представляют максимальную угрозу автоматизированного захвата инфраструктуры. Рекомендуется внедрить pre-commit хуки (GitLeaks, TruffleHog), вынести переменные окружения в защищённые хранилища секретов (HashiCorp Vault, Doppler, AWS Secrets Manager) и настроить в веб-сервере безусловный запрет отдачи скрытых файлов с точкой.

Для предотвращения вектора «Source Maps в продакшне: почему нельзя оставлять .map файлы» зафиксируйте проверочные правила в CI/CD пайплайне и настройте непрерывный мониторинг внешнего периметра через Site Check.