Политика безопасности
Как сообщить об уязвимости
Не открывайте публичный 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. Этот гейт и есть граница — считайте всё за ним доверенным, а всё перед ним — нет.