Профиль: Аноним (вход | регистрация) неRU opennet.me  
The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

20.08.2026 23:05 (MSK)

Опубликован релиз языка программирования 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.

  1. Главная ссылка к новости (https://blog.rust-lang.org/202...)
  2. OpenNews: Проект Rust утвердил правила в отношении использования AI-инструментов
  3. OpenNews: Выпуск Rust 1.97. Написанные на Rust ядро Zinnia и P2P-система Iroh с адресацией по ключам
  4. OpenNews: Опубликован crustc - компилятор rustc, переведённый на язык Си
  5. OpenNews: Инциденты с безопасностью в репозиториях PyPI и crates.io
  6. OpenNews: В Rust-репозитории crates.io выявлены четыре вредоносных пакета
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/66108-rust
Ключевые слова: rust
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (36) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 23:38, 20/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    зато нету use-after-free
     
     
  • 2.5, сиська (?), 00:02, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • –6 +/
    проектировался язык чтоб избежать подобного, но вот компрометация пакетов, лол, отнюдь, да и сборка превышающая время жизни вообще ни в какие ворота, уж извините, да и IDE полноценной не имеет, ещё минусы нужны?
     
     
  • 3.6, Нонон (?), 00:12, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Я как разработчик раст, не понимаю что значит «IDE полноценной не имеет»
    Пока что сижу на RustRover. Коллеги по цеху в VsCode и Cursor на расте пишут. Жду пока Zed допилят, может на него перейду. Все 1 в 1 как и в других ЯП
     
     
  • 4.23, Аноним (23), 01:14, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Сравнивать текстовый редактор на плагинах с полноценной IDE? Видать и разработчик такой же.
     
     
  • 5.26, Аноним (26), 01:20, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    какой?
     
  • 3.25, Норм (?), 01:19, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Расскажите как проэктировать ЯП чтобы избегать компроментации пакетов.
     
  • 2.34, Сладкая булочка (?), 01:51, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >  зато нету use-after-free

    Цитаты великих^Wхакнутых пользователей

     

  • 1.2, Аноним (2), 23:49, 20/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    И что заразили, какие-нибудь файрфокс с хромиумом, судя по перечню? Это то, что вы получаете, скачивая из помойки.
     
  • 1.3, Аноним (3), 23:49, 20/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Компрометация пакета arrayref, насчитывающего 53 млн загрузок за 3 месяца

    Ничему жизнь людей не учит… мало им npm?

     
     
  • 2.18, Аноним (18), 00:57, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Будем рады услышать твои решения проблемы dependency chain.
     

  • 1.4, DEF (?), 00:01, 21/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А где новости про Bun 1.4?
     
  • 1.7, Аноним (7), 00:24, 21/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Ценой применения алгебраических методов является недетерминированность результатов вычисления, которые могут меняться в пределах погрешности.

    кто-нибудь, поясните это предложение, пожалуйста.

     
     
  • 2.9, Аноним (18), 00:44, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Какое слово не понятно? Обычный 'a+b+c+d' на флотах это только '((a+b)+c)+d' и никак иначе, иногда это важно, потому что если складывать начиная с самых маленьких значений то погрешность будет меньше. А алгебраические операции могут скомпилироваться сегодня в (a+b)+(c+d), а завтра в (a+c)+(b+d), и всё это будет давать разные результаты в пределах погрешности. Когда погрешность не важна, можно это использовать ради увеличения скорости.
     
     
  • 3.22, Круз (?), 01:06, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    т.е порядок a + b + c + d у ржавых точно определен а a.algebraic_add(b).algebraic_add(c).algebraic_add(d) внезапно исполняется в в произвольном порядке?
    а потом удивляются почему их сумасшедшими считают
     
     
  • 4.27, Норм (?), 01:22, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Кринж. Капец.
     
  • 4.29, Аноним (18), 01:32, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > т.е порядок a + b + c + d у ржавых точно определен а a.algebraic_add(b).algebraic_add(c).algebraic_add(d) внезапно исполняется в в произвольном порядке?

    Да, а в чём проблема, слишком сложно для понимания? Если что, a + b + c + d это a.add(b).add(c).add(d), поэтому эти операции на уровне языка работают совершенно одинаково, просто во втором случае в llvm едет флажок разрешающий их переупорядочивать. В C такое было испокон веков, только включалось через -ffast-math на уровне программы или в лучшем случае единицы трансляции, что суть бред, по г-едов устраивало. А тут сделано идеально - можно использовать точечно, явно, только там где нужно.

     
  • 3.28, Аноним (7), 01:29, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Обычный 'a+b+c+d' на флотах это только '((a+b)+c)+d' и никак иначе, иногда это важно, потому что если складывать начиная с самых маленьких значений то погрешность будет меньше.

    а размер регистров разве не фиксирован? Маленькие значения не "дополняются" нулями? С фига обычное сложение флоатов создает погрешность при смене порядка применения операции? Они бы еще написали бы, что a+b и b+a приводит к погрешности. А  вот что такое "недетерминированность результатов" я вообще не понял, это типа случайный результат?

     
     
  • 4.30, Аноним (18), 01:36, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > а размер регистров разве не фиксирован? Маленькие значения не "дополняются" нулями? С фига обычное сложение флоатов создает погрешность при смене порядка применения операции?

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

    > А  вот что такое "недетерминированность результатов" я вообще не понял, это типа случайный результат?

    А это в словаре посмотри. Это значит что в зависимости от платформы, компилятора, версии компилятора, а может и запуска программы результат вычисления может отличаться.

     
     
  • 5.33, Аноним (7), 01:48, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Если ты такие вопросы задаёшь, ты не понимаешь вообще как устроены fp числа и как работает fpu. Почитай википедию хотя бы.

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

    0,3 + 0,33 + 0,3333 + 0,33333 = 1,29663
    (0,3 + 0,33) + (0,3333 + 0,33333) = 1,29663

    > это в словаре посмотри. Это значит что в зависимости от платформы, компилятора, версии компилятора, а может и запуска программы результат вычисления может отличаться.

    Недетерминированный - это случайный, то есть результат получения нельзя описать по шагам!

    А тут шаги есть, это операция сложения, и результат именно этой конструкции (0,3 + 0,33) + (0,3333 + 0,33333) всегда будет одинаковый при каждом исполнении, но в тоже время отличаться от результата 0,3 + 0,33 + 0,3333 + 0,33333 этой конструкции. Это никак нельзя назвать недетерминированным результатом.

     
  • 2.10, aname (ok), 00:45, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    2+2 не всегда равно 4. Ну, в пределах погрешности
     
     
  • 3.16, Аноним (16), 00:55, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    В определённых ситуациях значение может даже достигать 5
     
     
  • 4.32, Аноним (18), 01:43, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    5 вряд-ли, но если складывать очень много очень мелких значений, в сумме дающих 4, то при вычислении на fpu результат может быть сильно меньше 4.
     
     
  • 5.36, Аноним (7), 01:56, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    с какого? там сумма будет стремиться к 4, как она может быть "сильно меньше 4"?
    3,9999999999999 сильно меньше 4.0000000000000?
     
  • 2.12, Ivan_83 (ok), 00:47, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее всего там речь про float/double - штуки с плавучкой, там когда что то сильно дробное то оно округляется и при этом теряется точность.
    Когда вы меняете порядок вычислений, будучи математически корректным, на практике это приводит к тому что операции округления будут происходить над другими значениями и погрешности округления тоже изменятся.
    Думаю как то так.
     
     
  • 3.31, Аноним (7), 01:41, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Скорее всего там речь про float/double - штуки с плавучкой, там когда что то сильно дробное то оно округляется и при этом теряется точность.

    размеры регистров ведь фиксированы, я понимаю что 0.3 и 0.33333333333 разной точности и если рассмотреть

    0.3 + 0.33 + 0.3333 + 0.33333 то порядок в какой-то степени будет играть роль, но ведь в регистре то они все равно фиксированной длины и 0.3 в регистре условно должно лежать как 0.300000000 ибо предыдущее число это 0.299999999, не так?

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

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

    0,3 + 0,33 + 0,3333 + 0,33333 = 1,29663
    (0,3 + 0,33) + (0,3333 + 0,33333) = 1,29663

    > Думаю как то так.

    Спасибо.

     

  • 1.8, aname (ok), 00:41, 21/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Cargo- это надёжно, писали они
    Cargo- это безопасно, писали они
     
     
  • 2.15, Аноним (18), 00:52, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну как. Если относительно - то действительно надёжно и безопасно, потому что рабочей системы работы с зависимостями более надёжной и безопасной пока не существует. Где она есть, пусть она централизована (npm, cpan, rubygems, pypi), пусть нет (go) - могут получить доступ и опубликовать новую версию с малварью. Попадёт ли она к тебе без действий с твоей стороны - нет. Может попасть при обновлении, как везде. Есть cargo vet, cargo cooldown, nighly min-publish-age чтобы вероятность этого уменьшить, как везде. Чтобы устранить её совсем - такого не сделал ещё никто - для этого нужна целая распределённая система аудита. И я абсолютно уверен что если такая появится, то появится именно в rust.
     
     
  • 3.19, Аноним (16), 00:57, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    cargo audit . есть же
     
     
  • 4.20, Аноним (18), 00:59, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Нету. Иди читай что я написал и что такое cargo audit.
     

  • 1.11, Аноним (11), 00:46, 21/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >Компрометация пакета arrayref, насчитывающего 53 млн загрузок за 3 месяца

    Вот что значит cargo культ.

     
     
  • 2.24, Аноним (23), 01:16, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Макaки. Вместо того чтобы написать свой метод в 10 строк, тянут чужие пакеты.
     

  • 1.13, Ivan_83 (ok), 00:49, 21/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Дополнительно можно отметить компрометацию популярного crate-пакета arrayref, насчитывающего более 53 млн загрузок за последние 90 дней и применяемого в качестве зависимости у 403 пакетов.

    А я всё жду когда подменят знаменитый утановочный скрипт раста, и любители: "да чо там компилять часами, дурак шоле, вон curl | sh и готово!" будут немного отчпоканы :)

     
  • 1.14, Аноним (16), 00:51, 21/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >компрометацию популярного crate-пакета

    Crates.io это просто свалка, а надо пользоваться проверяемыми репозиториями, как например axiom repo. И не Rust'ом

     
     
  • 2.21, Аноним (18), 01:03, 21/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Тут репозиторий = васян форкнул полтора нужных ему пакета и не обновляет. Проверяемыми = васян мамой клянётся что не нашёл там закладок. Ну не, для кого-то возможно и решение.
     

  • 1.17, Аноним (18), 00:55, 21/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > была размещена в 10:15 (MSK) и просуществовала до 11:41, после чего была удалена администраторами crates.io.

    Лол. В cargo nighly есть min-publish-age, ставил 2 недели зачем-то, видимо можно день ставить и обновляться совершенно без страха.

     
  • 1.35, Сладкая булочка (?), 01:53, 21/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Взаимодействие между обвязкой ManuallyDrop и умным указателем Box теперь не приводит к неопределённому поведению.

    А что это эксперты с пеной у рта твердили про отсутсвие уб в расте? Получается обманули?

     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру