В популярной Ruby-библитеке bootstrap-sass (вариант Bootstrap 3 с поддержкой Sass), насчитывающей (https://rubygems.org/gems/bootstrap-sass) около 28 млн загрузок, выявлен (https://snyk.io/blog/malicious-remote-code-execution-backdoo.../) бэкдор (CVE-2019-10842 (https://security-tracker.debian.org/tracker/CVE-2019-10842)), позволяющий злоумышленникам выполнить свой код на серверах, на которых выполняются проекты, использующие bootstrap-sass. Бэкдор был добавлен в состав выпуска 3.2.0.3 (https://rubygems.org/gems/bootstrap-sass/versions/3.2.0.3), опубликованного 26 марта в репозитории RubyGems. Проблема устранена в выпуске 3.2.0.4 (https://rubygems.org/gems/bootstrap-sass/versions/3.2.0.4), предложенном 3 апреля.
Бэкдор был скрыто добавлен в файл lib/active-controller/middleware.rb, в котором появился (https://github.com/twbs/bootstrap-sass/issues/1195) код для вызова eval со значением, передаваемым через Cookie "___cfduid=". Для атаки достаточно было отправить запрос на сервер, выставив Cookie "___cfduid" и передав в качестве аргумента команды, закодированные в формате Base64. Имя Cookie "___cfduid" было выбрано для камуфлирования под Cookie "__cfduid", выставляемый CDN Cloudflare и отличающийся наличием двух символов подчёркивания вместо трёх.
Примечательно, что вредоносный код был опубликован только в финальном пакете, опубликованном в репозитории RubyGems, но не был внесён в исходные тексты в Git-репозитории. Исходный код (https://github.com/twbs/bootstrap-sass/) библиотеки оставался корректным и не вызывал подозрения у разработчиков, что подчёркивает важность применения повторяемых сборок и внедрения процесса проверки соответствия публикуемых пакетов с эталонными исходными текстами.
Судя по всему, атака была проведена через захват параметров учётной записи к RubyGems у одного из двух мэйнтейнеров библиотеки (официально утечка учётных данных пока не подтверждена).Атаковавшие проявили осмотрительность и встроили бэкдор не в самую свежую ветку 3.4.x, последний выпуск которой насчитывает более 217 тысяч загрузок, а как обновление для прошлой ветки 3.2.x, рассчитывая на то, что корректирующее обновление зависимости не вызовет подозрений. По приблизительной оценке 1670 репозиториев на GitHub используют bootstrap-sass в качестве зависимости и связанные с этими репозиториями приложения потенциально могут быть скомпрометированы. Разработчикам рекомендуется проследить использование библиотеки bootstrap-sass среди косвенных зависимостей и проверить не было ли выполнено автоматическое обновление до версии с бэкдором.
Информация о возможном бэкдоре была опубликована (https://github.com/twbs/bootstrap-sass/issues/1195) в системе отслеживания ошибок спустя несколько часов после размещения проблемного выпуска 3.2.0.3, после чего примерно через час мэйнтейнеры удалили проблемный выпуск из RubyGems и поменяли пароли для входа, но не учли, что удалённые версии ещё несколько дней могут оставаться доступными на зеркалах. 3 апреля был дополнительно сформирован выпуск 3.2.0.4, полностью аналогичный версии 3.2.0.2, который позволял избавиться от версии с бэкдором без перехода на новую ветку 3.4.URL: https://snyk.io/blog/malicious-remote-code-execution-backdoo.../
Новость: https://www.opennet.me/opennews/art.shtml?num=50462
Ну вот опЯть
нда небыло никогда....
если между публикацией протрояненого обновления и его удалением прошло всего 2-3 часа, то это очень даже хороший показыватель...а ведь могли бы заметить через 2-3 недели
Ну это же не npm :D
>Атаковавшие проявили осмотрительность и встроили бэкдор не в самую свежую ветку 3.4.x, последний выпуск которой насчитывает более 217 тысяч загрузок, а как обновление для прошлой ветки 3.2.xвозможно дело не в осмотрительности, а в том что они хотели взломать какой-то конкретный проект, использующий эту версию
Имя напоминает червя SASSer, я бы не стал такой либой пользоваться
Слова "git", "gimp", "cron", "grub" итд. тоже похожи на названия каких-то стремных малварей.
Или стихи Маяковского:
Били копыта,
Пели будто:
- Git.
Grub.
Cron.
Gimp.-
> Примечательно, что вредоносный код был опубликован только в финальном пакете, опубликованном в репозитории RubyGems, но не был внесён в исходные тексты в Git-репозитории.Не понял ? Они что хотят что в RubyGems нет с гита заливается ?
Офигеть ... И как они тогда проверяют на соответсвие сорцам ссылку на которые они дают на своем сайте ?Мда ....
Точно также как и везде, с чего оно должно с гита заливаться? Нужно сформировать пакет потом залить в репу. Так у всех. Ну то есть вообще у всех. Другое дело что ты можешь поставить build server и делать это автоматически.
Packagist например просто трекает git-репозиторий и версия пакета там - это тег или ветка в гите. Так что подобное там вроде невозможно.
Хз где это так - также где и везде.Вот к примеру koji ты берешь spec и патчи кладешь на githab потом команда koji собирай. Он стягивает спек и патчи с гита и потом сырцы по указанию со спека и собирает пакет и кладет его в bodhi для теста. (fedora сборка рпм)
Хз как в дебиане - но поди также.
Я вообще удивлен что у них туда гемы грузят отдельно от сырцов.
Полон опасностей "программирую на css/sass/html/js/ts"-мирок.
да везде хватает подводных камней
в системном программировании их даже больше
разница только в том что в "мирке" мало не веб-макак
Расскажи нам.
Так в соседних новостях же...
https://www.opennet.me/opennews/art.shtml?num=50466
https://www.opennet.me/opennews/art.shtml?num=50463
А я всегда говорю, что бутстрап то ещё ненужно, и вот подтверждение!
ту же самую Bulma можно поставить, и сайт покрасивее будет, и лишнего JS не требует.
> пакет с бэкдором был загружен около 1500 разФерма из 1500 узлов, интересно, это сколько же можно было намайнить битков и эфира?
сейчас уже что-то другое майнят, биткоин вроде и вовсе не выгоден для майнинга, даже при "халявных" ресурсах
Нисколько
Я читал комменты и думал это только возможно в npm, а вот оно как оказывается.
Тут модно хейтить npm
и php :)
Если по комментам ориентироваться, то можно на другие сайты не ходить - тут есть эксперты во всем и всегда тебе помогут с тем где ты неправ
bootstraps-assбггггггг
> Примечательно, что вредоносный код был опубликован только в финальном пакете, опубликованном в репозитории RubyGems, но не был внесён в исходные тексты в Git-репозитории.Получается пакеты в репозитории RubyGems собираются не из репозиториев с исходным кодом, а загружаются уже собранные? Очень странное решение авторов RubyGems.
Так все (PyPI, NPM) делают.
Так руби-кодеры, они это ккк.. веб-макаки жи?
> Информация о возможном бэкдоре была опубликована в системе отслеживания ошибок спустя несколько часов после размещения проблемного выпуска 3.2.0.3, после чего примерно через час мэйнтейнеры удалили проблемный выпуск из RubyGems и поменяли пароли для входа, но не учли, что удалённые версии ещё несколько дней могут оставаться доступными на зеркалах. 3 апреля был дополнительно сформирован выпуск 3.2.0.4, полностью аналогичный версии 3.2.0.2, который позволял избавиться от версии с бэкдором без перехода на новую ветку 3.4.круты, всем хотя бы так оперативно действовать
Удивительно. Я уж думал тех, кто делает код ревью зависимостей, вообще не осталось.
This bug bootstraps ass...