Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram
Поднимем Devuan на вершину Distrowatch! Просто перейдите по ссылке один раз в день.

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

Новости собранные из разных RSS источников
Аватара пользователя
root:#
Site Admin
Сообщения: 2237
Зарегистрирован: Вт ноя 08, 2022 3:27 pm
Благодарил (а): 60 раз
Поблагодарили: 28 раз

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

Сообщение root:# »

Выпуск Rust 1.98.0. Компрометация пакета arrayref, насчитывающего 53 млн загрузок за 3 месяца
Опубликован релиз языка программирования 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, в том числе стабилизированы методы и реализации типажей: str::substr_range
  • [T]::subslice_range
  • core::fmt::NumBuffer
  • ‹{integer}›::format_into
  • Send/Sync for std::process::CommandArgs
  • {fN}::algebraic_add
  • {fN}::algebraic_sub
  • {fN}::algebraic_mul
  • {fN}::algebraic_div
  • {fN}::algebraic_rem
  • NonZero‹{integer}›::from_str_radix
  • String::from_utf16le
  • String::from_utf16le_lossy
  • String::from_utf16be
  • String::from_utf16be_lossy
  • [T]::strip_circumfix
  • str::strip_circumfix
  • Atomic‹T›::from_mut
  • Atomic‹T›::get_mut_slice
  • Atomic‹T›::from_mut_slice
  • std::range::legacy
Целевые платформы 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.

Источник: https://www.opennet.ru/opennews/art.shtml?num=66108