Выпуск 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". Коштам ужывання алгебраічных метадаў з'яўляецца недэтэрмінаванасць вынікаў вылічэнні, якія могуць мяняцца ў межах хібнасці.
  • Для ўсіх прымітыўных цэлалікавых тыпаў рэалізаваны ўбудаваны метад "format_into" для пераўтварэння лікаў у радкі, які можа прымяняцца замест пакета itoa. У якасці параметру перадаецца буфер NumBuffer , памер якога гарантавана дастатковы для запісу любога значэння выкарыстоўванага тыпу ў дзесятковым выглядзе. На выхадзе вяртаецца адфарматаваны радок &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 ::from_mut
    • Atomic ::get_mut_slice
    • Atomic ::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.

Крыніца: opennet.ru

Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster