Репозиторий сторонних плагинов взломан

Только что восстановил один из своих форумов на Discourse, и при загрузке в браузере появилось всплывающее сообщение:

Вас взломал плагин! от w3shi(Hackerone)-S.Lakshmi Vignesh(RCE-POC)

Боже… Что происходит? Один из используемых мной плагинов был скомпрометирован?

Не использовал ли вы плагин migrate password? Или другой плагин из репозитория discoursehosting?

Похоже, этот форум тоже пострадал: Am I hacked? or not - Forum Management - Suggestions - DxO Forum

Да, он есть в списке. И это единственный плагин из discoursehosting.

Помню, что он должен быть активен, чтобы позволить «старым» пользователям войти, верно?

Но теперь вопрос скорее в том, была ли установка скомпрометирована или это просто отображается такое сообщение. На данный момент сайт отключен для безопасности.

Вместе с этим плагином вот список того, что я использую:

просто удалите всё, что относится к discoursehosting

Перевод поста с французского форума через Google Translate:

Псевдо-исследователь безопасности получил доступ к старому репозиторию Git для плагина, используемого форумом, и перехватил его, чтобы просто отобразить это сообщение.

Затронутый репозиторий (GitHub - discoursehosting/discourse-migratepassword: Немного безопасности) был проверен, и вредоносный код в нём отсутствует (это просто демонстрация концепции).

На самом деле URL этого репозитория изменился (сейчас он доступен по адресу GitHub - communiteq/discourse-migratepassword: Поддержка мигрированных хешей паролей), а пользователь просто воссоздал репозиторий discoursehosting/discourse-migratepassword, который ранее перенаправлял на communiteq/discourse-migratepassword, чтобы разместить там нерелевантный код. Мы использовали старый URL, поэтому и пострадали.

Если это правда, то ладно… Я изменил URL плагина на communiteq и в данный момент пересобираю его. Но мне нужно разобраться в этом подробнее (так как я не программист, я не могу быть уверен на 100%).

Кратко

Это уязвимость в GitHub, относящаяся к классу эксплойтов под названием «Repojacking» (перехват репозитория).

Мы рекомендуем всем проверить URL-адреса плагинов в GitHub и заменить каждое вхождение discoursehosting на communiteq.

Предыстория:

В 2019 году нам пришлось переименовать нашу компанию с Discoursehosting на Communiteq. При таких обстоятельствах GitHub автоматически перенаправляет URL-адреса репозиториев на их новое местоположение, до тех пор, пока кто-либо не создаст репозиторий с тем же именем. В этот момент новый репозиторий получит приоритет.

Раньше GitHub помечал такие репозитории как «ушедшие из эксплуатации» и запрещал создание репозитория с тем же именем.

О предыдущем эксплойте рассказывается здесь. Похоже, что это исправление больше не эффективно.

Мы подали жалобу в службу злоупотреблений GitHub и постараемся удалить этот репозиторий всеми доступными средствами.

На данный момент скомпрометированный плагин только показывает сообщение и оставляет безвредный файл в /tmp.
Так что ничего плохого не произошло — пока. Важно изменить URL вашего плагина перед повторной сборкой.

Вау, это может легко застать конечного пользователя врасплох. Это один из главных недостатков отсутствия официального хостинга от discourse.org.

Если один из

angusmcleod (Angus McLeod) · GitHub или merefield (Robert) · GitHub

аккаунтов перестанет существовать,

то будет открыт первый подпуть, и в моём app.yml останется команда клонирования, которая будет выполняться при пересборке.

Чтобы смягчить потенциальное влияние на пользователей стандартной установки, мы добавили код для обнаружения github.com/discoursehosting/ и прерывания любых пересборок/обновлений.

Ошибка будет выглядеть примерно так:

---
ОШИБКА: Файл конфигурации containers/app.yml содержит ссылки на скомпрометированную организацию GitHub: github.com/discoursehosting
Пожалуйста, удалите все ссылки на эту организацию из вашего файла конфигурации.
Для получения дополнительной информации см. https://meta.discourse.org/t/374703/6
---

Спасибо, Дэвид!

Здравствуйте, сообщество Discourse,

Я хочу искренне извиниться за сбои, вызванные моими действиями в отношении репозитория плагинов. Пытаясь привлечь внимание к проблеме безопасности, я допустил серьёзные ошибки, нарушившие кодекс поведения.

В дальнейшем я гарантирую, что мои действия будут соответствовать принципам ответственного раскрытия информации, и благодарю за возможность извлечь из этого урок.

Ещё раз приношу свои искренние извинения за возникшие неудобства.

@w3shi

Спасибо за ваши извинения.

Следующий не слишком ответственный поступок заключался в том, что вы не связались со мной или с командой CDCK в частном порядке, когда отказались от этого имени пользователя, поскольку за последние три часа кто-то другой мог увидеть ваш пост и зарегистрировать его.

Теперь я восстановил контроль над старым именем пользователя в GitHub. И спасибо вам за то, что в конце концов поступили правильно, и за то, что снова указали на то, что GitHub больше не защищает редиректы — уже в пятый раз (в прошлый раз это было в четвертый: «Это открытие стало четвертым случаем выявления альтернативного метода проведения атаки Repojacking»).

Предлагаю вам обратиться в GitHub и получить своё вознаграждение!

Искренне извиняюсь за все причиненные неудобства! И спасибо за ваше понимание, @RGJ!

Добро пожаловать в сообщество и спасибо за то, что всё привели в порядок.

В принципе, следует исходить из того, что ничто не является безопасным, но и это не работает хорошо.

Всё несколько дней назад стало известно, что аккаунт NPM одного из разработчиков, стоящего за пакетом ESLint Prettier, был скомпрометирован, и он опубликовал новые скомпрометированные версии некоторых популярных пакетов:

Эти пакеты затем были использованы в других пакетах, поскольку многие утверждают, что всегда следует обновляться до последних версий.

После того как я увидел эту тему, я предложил функцию для внедрения проверки подписи плагинов и компонентов тем при их обновлении: Plugin and theme component signing

Это не остановит компрометацию ключа, но хотя бы сделает часть цепочки поставок более надёжной. В конечном счёте всё ещё возможно, что будут подтянуты скомпрометированные сторонние библиотеки. Дополнительные зависимости не всегда хорошо видны.

Не уверен, что это всё ещё работает. У меня был плагин, указывающий на скомпрометированный URL GitHub, и сообщение об ошибке во время пересборки лишь сообщало, что не удалось получить репозиторий, с дополнительными деталями о версии gem или чём-то подобном. (Не могу вставить точную информацию, так как она слишком далеко в истории прокрутки из-за другого шума во время последующих сборок.)

Похоже, что URL/репозиторий сейчас вообще не существует, что хорошо (по крайней мере, пока кто-то другой не воссоздаст его), но сообщение об ошибке сэкономило бы много времени.

Действительно, @RGJ снова контролирует организацию GitHub, поэтому мы убрали временное сообщение об ошибке.