Волна малвари в 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.

Следующая новость · 5 из 21 Читать дальше
🔥Hot Discussion

Китайская GLM 5.2 вышла в открытых весах в тот час, когда Вашингтон отключил Fable

Z.ai выложила фронтирную модель с открытыми весами без обычного поста с бенчмарками. В треде уверены: релиз ускорили, чтобы поймать волну пользователей, которых внезапно отрезали от Fable от Anthropic.

★ 360 · 💬 203 · twitter.com · 3 мин