[ON] Выпуск Rust 1.98.0. Компрометация пакета arrayref, насчитывающего 53 млн загрузок за 3 месяца

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6000
ОС: gnu/linux

[ON] Выпуск Rust 1.98.0. Компрометация пакета arrayref, насчитывающего 53 млн загрузок за 3 месяца

Сообщение rssbot »

Опубликован релиз языка программирования Rust 1.98, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).


Методы работы с памятью в Rust нацелены на исключение ошибок при манипулировании указателями и защиту от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.



Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.


Основные новшества:
  • Для типов с плавающей запятой f32 и f64 реализованы алгебраические методы для сложения, вычитания, умножения, деления и нахождения остатка, реализующие оптимизацию, похожую на опцию "-ffast-math" в компиляторах C/C++. Подобные методы допускают изменение порядка операций, когда это необходимо для оптимизаций, таких как векторизация циклов. Например, при вычислении
    "a + b + c + d" при использовании обычного сложения компилятор всегда выполнит вычисление в одном порядке "((a + b) + c) + d", а при использовании метода algebraic_add может сгруппировать выражение как "(a + b) + (c + d)" и выполнить "(a + b)" и "(c + d)" параллельно при помощи инструкций SIMD. Ценой применения алгебраических методов является недетерминированность результатов вычисления, которые могут меняться в пределах погрешности.
  • Для всех примитивных целочисленных типов реализован встроенный метод "format_into" для преобразования чисел в строки, который может применяться вместо пакета itoa. В качестве параметра передаётся буфер NumBuffer‹Self›, размер которого гарантированно достаточен для записи любого значения используемого типа в десятичном виде. На выходе возвращается отформатированная строка &str, время жизни которой привязано к буферу.
  • Взаимодействие между обвязкой ManuallyDrop и умным указателем Box теперь не приводит к неопределённому поведению.
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
  • Целевые платформы thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf и thumbv8r-none-eabihf переведены на второй уровень поддержки, который подразумевает гарантию сборки, но отсутствие гарантий при прохождении тестового набора.
  • Добавлена поддержка платформ powerpc64-unknown-linux-gnuelfv2 и aarch64-unknown-linux-pauthtest, для которых обеспечен третий уровень поддержки. Третий уровень охватывает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.




Дополнительно можно отметить компрометацию популярного crate-пакета arrayref, насчитывающего более 53 млн загрузок за последние 90 дней и применяемого в качестве зависимости у 403 пакетов. Атакующие разместили в репозитории crates.io новые пакеты proc-macro1, proc-macro-en, aovine, arone, aronenao и tinymember, содержащие вредоносный код. После этого в репозитории были опубликованы новые выпуски пакетов arrayref 0.3.10, internment 0.8.7 и append-only-vec 0.1.9 в которые в качестве зависимости был добавлен вредоносный пакет proc-macro1. Вредоносная версия пакета arrayref была размещена 20 августа в 10:15 (MSK) и просуществовала до 11:41, после чего была удалена администраторами crates.io.


С сопровождающим arrayref пока не удалось связаться для прояснения ситуации, но предполагается, что его учётные данные были перехвачены злоумышленниками. В пакете proc-macro1 вредоносное изменение присутствовало в сборочном скрипте и осуществляло загрузку исполняемого файла с внешнего сервера. Загруженный файл в Unix-системах сохранялся как /tmp/rust-setup, а в Windows - %TEMP%\rust-setup.ps1 или %TEMP%\rust-setup-launch.vbs.


Команда для проверки наличия вредоносных пакетов в осевшем локальном кеше:

Код:

find ~/.cargo/registry/cache -type f \( \
-name 'append-only-vec-0.1.9.crate' -o \
-name 'arrayref-0.3.10.crate' -o \
-name 'internment-0.8.7.crate' -o \
-name 'proc-macro1-*.crate' -o \
-name 'proc-macro-en-*.crate' -o \
-name 'aovine-*.crate' -o \
-name 'arone-*.crate' -o \
-name 'aronenao-*.crate' -o \
-name 'tinymember-*.crate' \
\) -print


Источник: https://www.opennet.ru/opennews/art.shtml?num=66108
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 21.08.2026 14:08, всего редактировалось 1 раз.
Причина: Updated upstream
Спасибо сказали: