W LinuxДокументация

Политика безопасности

Как сообщить об уязвимости

Не открывайте публичный issue по проблеме безопасности.

Сообщите приватно через форму security advisory на GitHub. Она открывает закрытую ветку, видимую только вам и мейнтейнеру.

Что приложить: что может сделать атакующий, как это воспроизвести и на какой версии вы это увидели (IMAGE_VERSION в /etc/os-release).

Подтверждение получения придёт в течение нескольких дней. W — проект одного человека, поэтому считайте это добросовестным усилием, а не соглашением об уровне обслуживания. Исправления едут в следующем релизе, с упоминанием в release notes, если только вы не предпочтёте остаться анонимным.

Область действия

W — дистрибутив: бо́льшая часть кода, работающего на машине с W, — это upstream'ное ПО Arch, а не собственный код W. Проблемы в upstream-пакетах адресуются их мейнтейнерам.

Собственная поверхность атаки W, которую и покрывает эта политика:

  • Инсталлятор (scripts/install.sh и его модули) — работает от root, обращается с паролями и ключами LUKS и пишет первоначальную систему
  • Путь обновления — w-sync, apply.sh и манифесты модулей, которые забирают и применяют код от root
  • Привилегированные хелперы — polkit-действия и агент аутентификации под rootfs/usr/lib/w/, и всё, что решает, повышать ли привилегии
  • ИИ-слой — граница между чтением состояния системы и его изменением, и polkit-гейт перед каждым действием, которое что-то меняет
  • Всё поставляемое, что ослабляет систему относительно стокового Arch: sudo, файрвол, DNS, харденинг ядра, keyring, Secure Boot

Как обновлениям выдаётся доверие

W обновляет себя по каналу edge: /var/lib/w/src — это git-чекаут публичного репозитория, а w-sync перематывает его вперёд и затем запускает apply.sh от root. Из-за этого именно подпись релиза, а не транспорт, решает, будет ли код исполняться на вашей машине от root.

  • Каждый релиз — это один коммит в публичной ветке, помеченный тегом vX.Y.Z, и тег, и коммит подписаны релизным ключом W.
  • Прежде чем что-либо тянуть, w-sync update требует, чтобы приходящая верхушка несла тег vX.Y.Z, подписанный ключом из /usr/share/w/update/w-release.allowed_signers, и иначе отказывается наотрез — причём до пред-обновленческого снапшота, так что отклонённое обновление оставляет машину нетронутой. w-sync status показывает, взведена ли эта проверка.
  • Файл-якорь доверия едет в установочном образе и читается только из установленной копии — никогда из проверяемого чекаута. Новый якорь поэтому может приехать лишь тем обновлением, которое прошло проверку по предыдущему, — именно это делает ротацию ключа подписанной операцией, а не лазейкой.
  • Скользящий тег edge, который ночной workflow переводит на текущий установочный образ, релизом не признаётся никогда: у CI нет подписывающего ключа, и его там быть не должно.
  • Подписывающий ключ не хранится ни в этом репозитории, ни на сборочных машинах, ни в CI. Релиз подписывается на машине мейнтейнера, через агент.

Обновление к тому же предупреждает, прежде чем затереть вашу собственную работу: w-sync update сравнивает каждый управляемый W файл, который собирается заменить, с той ревизией, с которой вы уходите, и предупреждает о тех, что вы правили руками. w-reset check проверяет так же всю машину, отделяя файлы, которые обновление перезапишет, от ваших правок, которых оно не касается никогда.

Если вы следуете за форком, а не за официальным репозиторием, подписанных релизных тегов там не найдётся, и инсталлятор записывает это на вашу машину (VERIFY_SIGNATURE=no в /etc/w/update.conf). Обновления тогда держатся на одном лишь транспорте — в этом положении все находились до того, как появилась подпись.

Поддерживаемые версии

Только последний релиз. W — роллинг-дистрибутив с единственной публикуемой веткой; ветвей сопровождения и бэкпортов нет.

Чего W пока не обещает

Сказано прямо, потому что бета, преувеличивающая свои гарантии, хуже беты, которая этого не делает:

  • Подписан только канал edge. Edge-релизы подписываются и проверяются (см. «Как обновлениям выдаётся доверие» выше). Канал stable — W, доставляемый пакетом pacman из репозитория W, — ещё не построен, а когда будет, ему понадобится собственный ключ упаковщика. До тех пор stable — не тот канал, на котором можно оказаться.
  • Откат после неудачного обновления делается руками. Обновление снимает снапшот домашней директории перед применением, а w-rollback проводит вас через восстановление снапшота, но само по себе неудачное применение ничто не откатывает.
  • ИИ-слой — opt-in и выключен по умолчанию. Его включение даёт модели возможность запрашивать привилегированные действия, каждое из которых гейтится polkit. Этот гейт и есть граница — считайте всё за ним доверенным, а всё перед ним — нет.

Изменить эту страницу на GitHub