Волна малвари в Arch заразила 1500 пакетов AUR через брошенные сироты
Начиналось с 400 заражённых пакетов, за часы перевалило за 900 и закончилось выше 1500. Вектор — вредоносные npm-зависимости, подтянутые в скрипты сборки, а открытая дверь — 15 000 заброшенных пакетов, ждущих нового хозяина.
Официальных репозиториев это не коснулось вовсе; всё жило в AUR — пользовательском репозитории Arch, который собираешь сам и который заведомо никем не проверяется. Консультант по инфобезу выложил точную команду pacman, чтобы найти чужие пакеты у себя.
Быстрее всего сработал не патч. Добровольцы наперегонки усыновляли редко обновляемые сиротские пакеты, чтобы их не захватили атакующие; другие требовали минимального возраста пакетов и лимитов на усыновление, как в npm.
Не «взломали Linux» — взломали AUR
Phoronix освещал эскалацию почти в реальном времени, и счёт менялся прямо по ходу чтения. Комментатор процитировал дугу из самой статьи:
«Уже было скверно, когда выяснилось, что больше 400 пакетов AUR… заражены малварью, но теперь это число выросло до примерно 900 несколько часов назад, а в итоге — больше 1500 пакетов, добавленных пользователями». — читатель, который обходит AUR стороной и собирает из исходников
Ключевой охват: это Arch User Repository — общественная вольница, где пользователей предупреждают читать каждый PKGBUILD перед установкой, а не официальные подписанные репозитории Arch. Заражение въехало через вредоносные npm-пакеты — atomic-lockfile, js-digest, lockfile-js, — подтянутые как зависимости сборки. Сейчас Arch сообщает, что инцидент под контролем.
Команда реагирования, которая людям и была нужна
Самый полезный комментарий в треде был не анализом, а инструкцией. Консультант по инфобезу из ЕС выложил, как перечислить всё установленное вне официальных репозиториев и отыскать заражённые файлы:
«похоже, установились „atomic-lockfile“, „js-digest“ или „lockfile-js“ из npm… Я запустил такую команду, чтобы найти чужие пакеты… > pacman -Qmi». — консультант по инфобезу для банков и малого бизнеса ЕС
Структурная дыра: 15 000 усыновляемых сирот
Причина, по которой 1500 пакетов пали так быстро, в том, что AUR полон софта, чьи мейнтейнеры ушли, — и любой может подобрать сироту и выложить обновление. Сработавшая защита оказалась почти комично низкотехнологичной: захватить сирот первым.
«В AUR 15 тысяч брошенных пакетов. Я сегодня утром усыновил три редко обновляемых… Если пользуетесь брошенным пакетом, подумайте о том, чтобы усыновить его, — тогда злодеи не смогут». — автор Beej's Guides и преподаватель CS в Орегонском университете
Долгосрочные правки, которых хотели люди, заимствованы прямо из экосистемы npm, которая их же и укусила:
«Я должен иметь возможность задать минимальный возраст пакета, как в pnpm. Брошенные пакеты не должны быть усыновляемы кем угодно… Кто-то или что-то должно сканировать эти пакеты на уязвимости при публикации». — разработчик, назвавший реакцию впечатляющей, но недостаточной
Удобство и было поверхностью атаки
Вся привлекательность AUR в том, что установка чего угодно — в одной команде, а вспомогательные инструменты сглаживают шаг «прочти скрипт сборки», который и должен был вас защитить. Прикрутите это удобство к 15 000 пакетов, за которыми никто не следит, — и получите готовую атаку на цепочку поставок, масштабирующуюся со скоростью обновления страницы. Патч тут не в исправлении CVE. Он в том, чтобы решить: может ли непроверяемый репозиторий и дальше делать вид, что предупреждающей наклейки достаточно.
Получайте такие разборы каждый день
Главные истории Hacker News — на email, в Telegram или RSS.
Китайская GLM 5.2 вышла в открытых весах в тот час, когда Вашингтон отключил Fable
Z.ai выложила фронтирную модель с открытыми весами без обычного поста с бенчмарками. В треде уверены: релиз ускорили, чтобы поймать волну пользователей, которых внезапно отрезали от Fable от Anthropic.