Utgivelse av Rust 1.98.0. Kompromittering av pakken arrayref, som har 53 millioner nedlastninger på 3 måneder

Utgitt versjon 1.98 av programmeringsspråket Rust, opprinnelig utviklet av Mozilla, men nå videreutviklet under beskyttelse av den uavhengige, ideelle organisasjonen Rust Foundation. Språket fokuserer på sikker minnehåndtering og tilbyr verktøy for høy parallell utførelse av oppgaver, samtidig som det unngår bruk av søppelsamler og runtime (runtime er redusert til grunnleggende initialisering og støtte for standardbiblioteket).

Minnehåndteringsmetodene i Rust er rettet mot å eliminere feil ved pekermanipulering og beskytte mot problemer som oppstår fra lavnivå minnehåndtering, slik som tilgang til minneområder etter frigisjon, dereferering av nullpekere, bufferoverskridelse og så videre. For distribusjon av biblioteker, bygging og håndtering av prosjektavhengigheter, utvikles pakkeadministratoren Cargo. Et repository for biblioteker, crates.io, blir støttet.

Sikker minnehåndtering i Rust oppnås under kompilering gjennom referansesjekk, eierskapsoppfølging av objekter, livstidskontroll (omfang) og korrekt adgangsvurdering til minnet under programkjøring. Rust gir også verktøy for å beskytte mot heltallsoverflow, krever obligatorisk initialisering av variabler før bruk, håndterer feil bedre i standardbiblioteket, anvender konseptet med immutable referanser og variabler som standard, og tilbyr sterk statisk typisering for å minimere logiske feil.

Hovudnyhende:

  • For flyttallstyper f32 og f64 er det implementert algebraiske metoder for addisjon, subtraksjon, multiplikasjon, divisjon og beregning av rest, som implementerer optimalisering lignende den tilgjengelige «-ffast-math»-alternativet i C/C++-kompilatorer. Slike metoder tillater endring av rekkefølgen på operasjoner når det er nødvendig for optimaliseringer, som løkkemosjonering. For eksempel, ved beregning av «a + b + c + d» med vanlig addisjon, vil kompilatoren alltid utføre beregningen i én rekkefølge «((a + b) + c) + d», mens ved bruk av metoden algebraic_add kan uttrykket grupperes som «(a + b) + (c + d)» og utføre «(a + b)» og «(c + d)» parallelt ved hjelp av SIMD-instruksjoner. Prisen for å bruke algebraiske metoder er ustabilitet i beregningsresultatene, som kan variere innenfor en feilmargin.
  • For alle primitive heltallstyper er det implementert en innebygd metode «format_into» for å konvertere tall til strenger, som kan brukes i stedet for pakken itoa. Som parameter sendes en buffer NumBuffer, hvis størrelse er garantert tilstrekkelig til å skrive alle verdier av den brukte typen i desimalformat. Utsalget returneres som en formatert streng &str, hvis livslengde er knyttet til bufferen.
  • Samhandlinga mellom ManuallyDrop-beskyttelsen og kloka Box fører nå ikke til udefinert oppførsel.
  • En ny gruppe API-er er blitt stabilisert, inkludert metoder og implementeringer av grensesnitt:
    • 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ålplattformer thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf og thumbv8r-none-eabihf er oversatt til annet støttenivå, som innebærer byggegaranti, men uten garantier under testing.
  • Støtte for plattformene powerpc64-unknown-linux-gnuelfv2 og aarch64-unknown-linux-pauthtest er lagt til, som er gitt tredje støttenivå. Tredje nivå omfatter grunnleggende støtte, men uten automatisert testing, offentliggjøring av offisielle utgaver og verifisering av kompilering av kode.

Det kan også bemerkes at den populære crate-pakken arrayref, som har mer enn 53 millioner nedlastinger de siste 90 dagene og brukes som avhengighet av 403 pakker, har blitt kompromittert. Angripere la ut nye pakker proc-macro1, proc-macro-en, aovine, arone, aronenao og tinymember i crates.io-repositoriet, som inneholdt ondsinnet kode. Etter dette ble det publisert nye utgivelser av arrayref 0.3.10, internment 0.8.7 og append-only-vec 0.1.9, som fikk den ondsinnede pakken proc-macro1 som avhengighet. Den ondsinnede versjonen av arrayref-pakken ble publisert 20. august kl. 10:15 (MSK) og varte til kl. 11:41, før den ble fjernet av administratorene i crates.io.

Det har ikke vært mulig å kontakte vedkommende bak arrayref for å avklare situasjonen, men det antas at hans legitimasjon ble kompromittert av ondsinnede aktører. I pakken proc-macro1 var det ondsinnede endringen i bygge-scriptet som lastet ned en kjørbar fil fra en ekstern kilde. serverenDen lastede filen ble lagret som /tmp/rust-setup i Unix-systemer, og i Windows som %TEMP%\rust-setup.ps1 eller %TEMP%\rust-setup-launch.vbs.

Kilde: opennet.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster