libz-sys печатал всё окружение сборки в лог — секреты попадали в target/ и кэши CI

29.10.2026

Сборочный скрипт libz-sys версий до 1.1.31 включительно печатал в stdout полное окружение сборки — вместе со всеми секретами, которые в нём есть. Cargo сохраняет вывод сборочных скриптов в каталоге target/, поэтому значения утекали во всё, что этот каталог хранит или передаёт: кэши CI, артефакты, общие диски.

Причина

Чтобы решить, линковаться ли с системным zlib, скрипт компилировал маленькую пробную программу и логировал команду: println!("running {:?}", cmd). На Unix Debug для std::process::Command печатает каждую явно заданную переменную окружения. До cc 1.6.0 в команду попадало лишь несколько переменных компилятора, а начиная с 1.6.0 (вышел 3 октября 2026 года) Tool::to_command() очищает окружение и выставляет все переменные явно — и в лог уходило всё.

Кого затрагивает

Любую сборку, которая тянет libz-sys, если она идёт с cc 1.6.0 или новее на Unix-хосте. Проверка выполняется и при обычной сборке, когда pkg-config нашёл zlib. Исключения: цель Windows, Android, Haiku или OpenHarmony; статическая линковка; сборка с zlib-ng без обычного zlib.

Что делать

Исправлено в libz-sys 1.1.31 — команда больше не логируется. Без обновления помогают LIBZ_SYS_STATIC=1 или feature static. Версии ниже 1.0.21 не затронуты. Если target/ уже попадал в кэш или артефакты, секреты из окружения сборки стоит считать раскрытыми.

Оригинал

libz-sys build script leaks environment variables in the build directory (RUSTSEC-2026-0418).

Упоминаний: 0 · Просмотров: 3