TL;DR: Если вы используете многопользовательскую установку Nix — немедленно обновитесь до патченных версий:
2.34.5,2.33.4,2.32.7,2.31.4,2.30.4,2.29.3,2.28.6Проверьте свои версию Nix через командуnix --version. Ограничьте доступ к Nix демону черезallowed-usersи рассмотрите переход на Tvix в долгосрочной перспективе.
🚨 Что случилось?
7 апреля 2026 года была опубликована информация о критической уязвимости CVE-2026-39860 (GHSA-g3g9-5vj6-r3gj) в пакетном менеджере Nix
Технические детали
Уязвимость возникает при регистрации вывода fixed-output derivations (FOD):
- Временный файл вывода создавался внутри chroot-окружения сборки
- Злоумышленник мог создать символическую ссылку по этому пути, указывающую на произвольное место в файловой системе
- При копировании результата сборки процесс Nix (работающий в пространстве имён хоста, обычно от root) следовал по этой ссылке и перезаписывал целевой файл
Таким образом теоретически злоумышленник имеет право переписать любой файл, где Nix демон имеет доступ. Так же, чаще всего, Nix демон запускается от имени root, то злоумышленник фактически получает root доступ к системе
🛡️ Как снизить поверхность атаки прямо сейчас
Если вы не можете обновиться немедленно, примените следующие меры:
1. Ограничьте доступ к демону Nix
# /etc/nix/nix.conf или configuration.nix
nix.settings.allowed-users = [ "@wheel" "@nix-users" ];
По умолчанию все пользователи могут подключаться к демону Nix. Это первый вектор атаки
2 Проверьте trusted-users
nix.settings.trusted-users = [ "root" "@wheel" ]; # Явно укажите доверенных
Эти пользователи могут указывать кэши, подменять бинарные пакеты и обходить некоторые проверки.
По умолчанию данный список пуст, но следует в любом случае перепроверить
3. Включите песочницу
nix.settings.sandbox = true;
Важно: песочница Nix предназначена для воспроизводимости, а не для безопасности. Она использует chroot, namespaces и bind-монтирования, но не предназначена для изоляции системных вызовов. Атаки типа double chroot escape теоретически возможны
🤔 Почему Nix не был создан для безопасности?
Это важный контекст, который часто упускают при критике Nix.
Nix — это эксперимент. Его исходная гипотеза: «Возможно ли создать полностью функциональный пакетный менеджер на основе чисто функционального языка описания сборок?»
Эксперимент успешен: гипотеза подтверждена, мы получили воспроизводимые сборки, декларативную конфигурацию и мощную модель зависимостей.
Но и у успеха есть цена:
| Приоритет разработки | Следствие |
|---|---|
| Функциональность и воспроизводимость | Безопасность — «второй план» |
| Кроссплатформенность (все Unix) | Невозможность использовать Linux-специфичные механизмы изоляции (LandLock, seccomp-bpf в полной мере) |
| Простота интеграции с системой | Демон работает от root, поверхность атаки растёт |
| Производительность сборок | Отказ от «тяжёлых» механизмов изоляции (KVM, gVisor) |
Песочница Nix — это инструмент для изоляции зависимостей, а не для изоляции от вредоносного кода. Это фундаментальное различие, которое стоит понимать каждому пользователю.
🦊 Tvix: переосмысление с чистого листа
Tvix — это re-implementation Nix на Rust, который устраняет архитектурные ограничения оригинала, накопившиеся по историческим причинам.
Что меняет Tvix?
- Безопасность памяти благодаря Rust
- Модульная архитектура: оценщик, реализация протокола, клиент — отдельные компоненты
- Потенциал для улучшенной изоляции: проще интегрировать современные LSM, seccomp, LandLock
- Производительность: параллельный оценщик, кэширование, отсутствие накладных расходов C++
Текущий статус
- ✅ Поддерживает ~80% пакетов из nixpkgs
- ✅ Используется в devenv.sh для оценки выражений
- 🚧 Полная совместимость с nixpkgs — цель, а не реальность
- 🚧 Не рекомендуется для продакшена без тщательного тестирования
CVE-2026-39860 — не баг, а фича архитектуры. Такие уязвимости возникают не из-за «опечатки в коде», а из-за фундаментальных компромиссов, заложенных 20 лет назад. Чем дольше мы тянем старую кодовую базу, тем дороже будет каждый фикс.
К тому же разработчики Tvix является командой TVL. Их офис находится в Москве. Это отличный пример того, как разработчики из России вносят вклад в мировые open-source проекты уровня Nix. Изучая Tvix, можно не только понять архитектуру пакетных менеджеров, но и присоединиться к разработке.
P.S. Также один из главный разработчиков имеет доклад про Tvix. Рекомендуется к просмотру