Iznāk Rust 1.98.0. Pakotnes arrayref kompromitācija, kurai ir 53 miljoni lejupielāžu trīs mēnešu laikā

Publicēts programēšanas valodas Rust 1.98 izlaidums, ko izstrādājusi Mozilla, bet tagad attīsta neatkarīga bezpeļņas organizācija Rust Foundation. Valoda ir vērsta uz drošu atmiņas pārvaldību un piedāvā līdzekļus augsta paralelisma uzdevumu izpildei, neradot vajadzību izmantot atkritumu kolektoru un izpildi (izpilde tiek samazināta līdz pamatīgu inicializācijai un standartbibliotēkas uzturēšanai).

Atmiņas pārvaldības metodes Rust mērķis ir izslēgt kļūdas, manipulējot ar rādītājiem, un aizsargāt pret problēmām, kas rodas no zemu līmeņu atmiņas apstrādes, piemēram, piekļuve atmiņas daļai pēc tās atbrīvošanas, nulles rādītāju dereferencēšana, pārkāpšana bufera robežās utt. Lai izplatītu bibliotēkas, nodrošinātu kompilāciju un pārvaldītu atkarības, projekts attīstās pakotņu pārvaldnieks Cargo. Bibliotēku dzīšanai tiek atbalstīts krātuves repository crates.io.

Droša atmiņas apstrāde Rust tiek nodrošināta kompilācijas laikā, pārbaudot atsauces, izsekojot objektu īpašumtiesības, ņemot vērā objektu dzīves ilgumu (redzamības jomas) un novērtējot piekļuves atmiņai pareizību koda izpildes laikā. Rust arī nodrošina līdzekļus aizsardzībai pret veselu skaitļu pārpelnēm, prasa obligātu mainīgo vērtību inicializāciju pirms to izmantošanas, labāk pārvalda kļūdas standarta bibliotēkā, piemēro invarianti (immutable) atsauču un mainīgo principu pa noklusējumu un piedāvā stipru statisku tipizāciju, lai minimizētu loģiskās kļūdas.

Galvenās jauninājumi:

  • Plūstošā skaitļa veidiem f32 un f64 ir ieviesti algebraiskie metodes, lai veiktu saskaitīšanu, atņemšanu, reizēšanu, dalīšanu un atlikumu, ļaujot optimizāciju, kas līdzīga C/C++ kompilatoru „-ffast-math” opcijai. Šādas metodes ļauj mainīt operāciju secību, ja tas ir nepieciešams optimizācijām, piemēram, ciklu vektorizācijai. Piemēram, aprēķinot „a + b + c + d”, izmantojot parasto saskaitīšanu, kompilators vienmēr veiks aprēķinu noteiktā secībā „((a + b) + c) + d”, bet, izmantojot algebraic_add metodi, izteiksmi var grupēt kā „(a + b) + (c + d)” un veikt „(a + b)” un „(c + d)” paralēli, izmantojot SIMD instrukcijas. Algebraisko metožu pielietošanas cena ir nenoteiktību rezultātiem, kas var mainīties robežās no kļūdām.
  • Visiem primitīvajiem veselajiem skaitļiem ir ieviesta iebūvētā metode „format_into” skaitļu pārvēršanai teksta virknes, kuru var izmantot, lai aizstātu itoa pakotni. Kā parametrs tiek nodots buferis NumBuffer, kura izmērs garantē, ka tas būs pietiekams, lai ierakstītu jebkuru izmantoto veida vērtību desmitajā formātā. Izvade ir formatēta teksta virkne &str, kura mūžs ir saistīts ar buferi.
  • Sadarbība starp ManuallyDrop apvalku un viedo rādītāju Box tagad nenoved pie nenoteiktas uzvedības.
  • Jauna API daļa ir pārcelta uz stabilo kategoriju, tostarp ir stabilizēti metodes un tipāžu realizācijas:
    • str::substr_range
    • [T]::subslice_range
    • core::fmt::NumBuffer
    • ::format_into
    • Send/Sync for std::process::CommandArgs
    • {fN}::algebraic_add
    • {fN}::algebraic_sub
    • {fN}::algebraic_mul
    • {fN}::algebraic_div
    • {fN}::algebraic_rem
    • NonZero::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
  • Mērķplatformas thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf un thumbv8r-none-eabihf ir pārceltas uz otro atbalsta līmeni, kas nozīmē garantētu būvniecību, bet garantijas testēšanas komplekta izpildei nav.
  • Pievienots atbalsts platformām powerpc64-unknown-linux-gnuelfv2 un aarch64-unknown-linux-pauthtest, kurām ir nodrošināts trešais atbalsta līmenis. Trešais līmenis ietver pamata atbalstu, bet bez automatizēta testēšanas, oficiālo būvju publicēšanas un koda būves pārbaudes.

Papildus var pieminēt populārā crate pakotnes arrayref kompromitāciju, kurai pēdējo 90 dienu laikā ir bijušas vairāk nekā 53 miljons lejupielāžu un kas tiek izmantota kā atkarība 403 pakotnēs. Uzbrukuma veicēji ir ievietojuši jaunus pakotņu proc-macro1, proc-macro-en, aovine, arone, aronenao un tinymember repozitorijā crates.io, kas satur ļaunprātīgu kodu. Pēc tam repozitorijā tika publicētas jaunas arrayref 0.3.10, internment 0.8.7 un append-only-vec 0.1.9 pakotņu versijas, kurās par atkarību tika pievienota ļaunprātīga pakotne proc-macro1. Ļaunprātīgā arrayref pakotnes versija tika publicēta 20. augustā plkst. 10:15 (MSK) un pastāvēja līdz plkst. 11:41, kad to izdzēsa crates.io administratori.

Ar arrayref izstrādātāju pagaidām nav izdevies sazināties, lai noskaidrotu situāciju, bet tiek pieņemts, ka viņu akreditācijas dati tika nozagti kiberuzbrucēju. Pakotnē proc-macro1 ļaunprātīga izmaiņa bija klātesoša būves skriptā, kas veica izpildprogrammas faila lejupielādi no ārējiem resursiem. serveris. Lejupielādētais fails Unix sistēmās tika saglabāts kā /tmp/rust-setup, bet Windows — %TEMP%\rust-setup.ps1 vai %TEMP%\rust-setup-launch.vbs.

Avots: opennet.lv

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster