Miri сохраняет переменные окружения в кеш — секреты утекают в pull request'ы

21.09.2026

Команда реагирования на проблемы безопасности Rust получила сообщение: Miri сохраняет все переменные окружения в каталог target/, из-за чего секреты оседают в кеше сборки.

Почему это утечка

Само по себе сохранение окружения в файлы — не уязвимость. Проблема возникает из-за устройства кеша GitHub Actions: ветка может писать в кеш, а pull request — читать из него.

Тот, кто раньше прислал изменение, может запустить сборку, извлечь из кеша секреты и скрыть следы, отправив второй коммит в тот же pull request. GitHub прячет перезаписанные коммиты, а журналы сборки и сами коммиты удаляются через несколько месяцев.

Что исправлено

Теперь Miri сохраняет только переменные, начинающиеся с CARGO_, кроме тех, что оканчиваются на _TOKEN, и переменную расположения выходных файлов сборки. Исправление попадёт в ближайшую ночную сборку от 22 сентября.

Что найдено проверкой

Команда просканировала экосистему и нашла один заведомо уязвимый репозиторий, а ещё семь — про которые нет данных, но которые стоит проверить. С их авторами связались.

Кто уязвим

Условия складываются так: сборка запускает cargo miri, у шага есть доступ к секретам, кешируется каталог target/, и кеш доступен pull request'ам.

Все четыре условия нужны одновременно.

Что делать

  • отключить кеширование для этого шага;
  • сузить секреты до шагов без Miri, либо временно отключить Miri;
  • после этого очистить кеш и сменить утекавшие секреты.

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

Вывод шире конкретного случая

Утечка происходит не из кода, а из того, как устроена сборка. Любая утилита, которая записывает окружение в артефакты, делает кеш target/ местом утечки.

Общее правило формулируется прямо: если шаг пишет в общий кеш, у него не должно быть секретов в окружении.

Оригинал

GitHub Actions leaking secrets when Miri output is cached от 21 сентября 2026 года

Упоминаний: 1 · Просмотров: 8