Ruby введёт «период ожидания» перед установкой новых пакетов

от автора

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

Функция является необязательной и дополняет, а не заменяет существующие средства защиты, такие как обязательная двухфакторная аутентификация и доверенная публикация.

Cooldown считывает временную метку created_at для каждой версии, которую теперь предоставляет индекс v2 на rubygems.org. Версия, источник которой не раскрывает created_at, например, старые серверы гемов, исторические записи до перехода на v2 или частные реестры, всё ещё использующие формат v1, рассматривается как находящаяся за пределами временного окна и остаётся доступной. 

Cooldown входит в состав Bundler 4.0.13. Тем, кто использует более раннюю версию, нужно обновить её и зафиксировать в файле блокировки, чтобы всё работало согласованно: 

$ gem update --system          # or: gem install bundler -v 4.0.13$ bundle update --bundler=4.0.13

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

source "https://rubygems.org", cooldown: 7gem "rails"gem "puma"

Поскольку Cooldown не установлен по умолчанию, проект без него продолжает разрешать самые новые версии.

Помимо ключевого слова per-source, параметр cooldown применяет одно значение ко всем источникам, в рамках проекта, глобально или через окружение:

$ bundle config set cooldown 7          # stored in .bundle/config for this project$ bundle config set --global cooldown 7 # applies to every project for this user$ BUNDLE_COOLDOWN=7 bundle install      # no lockfile yet, e.g. a fresh CI checkout$ BUNDLE_COOLDOWN=7 bundle update       # re-resolve when a lockfile already exists

Для одноразового запуска нужно ввести --cooldown для install, update, add или outdated:

$ bundle install --cooldown 7$ bundle update --cooldown 7$ bundle add rails --cooldown 7$ bundle outdated --cooldown 7

Если присутствует более одного из этих параметров, они разрешаются в фиксированном порядке приоритета: флаг командной строки > параметр конфигурации > per-source cooldown: в Gemfile. Флаг --cooldown переопределяет параметр cooldown (конфигурация пакета или BUNDLE_COOLDOWN), который, в свою очередь, переопределяет cooldown для источника. Значение всегда является неотрицательным целым числом дней; строка, число с плавающей запятой, отрицательное число или массив отклоняются с ошибкой InvalidOption.

Поскольку флаг и настройка применяются единообразно ко всем источникам, ключевое слово per-source используется, когда политика различается в зависимости от реестра, например, для охлаждения общедоступных гемов при доверии внутреннему реестру:

source "https://rubygems.org", cooldown: 7source "https://gems.internal.example.com", cooldown: 0 do  gem "internal-tool"end

Команда --cooldown N в командной строке переопределяет все источники для этого запуска, включая тот, который освобождён от ограничений.

Передача значения 0 отключает период охлаждения. Это наиболее важно, когда появляется исправление для активно используемой уязвимости нулевого дня или сообщение об уязвимости указывает на необходимость немедленного обновления. В этих случаях значение --cooldown 0 позволяет получить свежий релиз, не снимая политику ограничений для всех остальных: 

$ bundle install --cooldown 0$ BUNDLE_COOLDOWN=0 bundle update rails   # ignore any configured cooldown this time

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

$ bundle outdated --cooldown 7Gem             Current   Latest                  Requested   Groupsaws-partitions  1.1251.0  1.1256.0 (cooldown 3d)  = 1.1251.0  default

Реестр также теперь проверяет содержимое гемов во время отправки и проверяет авторизацию на Have I Been Pwned, чтобы скомпрометированные пароли не могли быть использованы повторно. Специальная команда проводит сканирование уязвимостей с помощью ИИ для наиболее важных гемов при поддержке Alpha Omega и Anthropic.

Ранее в GitHub сообщили, что хакеры, взломавшие 3800 внутренних репозиториев платформы, получили доступ к ним через вредоносную версию расширения Nx Console для VS Code. Она была скомпрометирована за неделю до этого в результате атаки на цепочку поставок npm от TanStack.

Между тем исследователи кибербезопасности обнаружили более 30 пакетов npm из пространства имен Red Hat ‘@redhat-cloud-services’, которые были скомпрометированы в результате атаки на цепочку поставок. В ходе неё хакеры распространили новый вариант вредоносного ПО Shai-Hulud «Miasma», предназначенного для кражи учётных данных.

ссылка на оригинал статьи https://habr.com/ru/articles/1045258/