Rust 1.98.0-udgivelse: Kompromittering af arrayref-pakken, som er blevet downloadet 53 millioner gange på 3 måneder.

Programmeringssproget Rust 1.98, grundlagt af Mozilla-projektet, men nu udviklet under ledelse af den uafhængige non-profit organisation Rust Foundation, er blevet udgivet. Sproget fokuserer på hukommelsessikkerhed og leverer værktøjer til at opnå høj parallelitet i opgaveudførelsen, samtidig med at det undværer brugen af en garbage collector og runtime (runtime er reduceret til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Rusts hukommelsesstyringsmetoder er designet til at eliminere fejl i pointermanipulation og beskytte mod problemer, der opstår fra lavniveau-hukommelsesstyring, såsom adgang til hukommelse efter den er blevet frigjort, dereferering af nullpointere, bufferoverløb osv. Projektet udvikler Cargo-pakkehåndteringen til at distribuere biblioteker, facilitere builds og administrere afhængigheder. crates.io-arkivet vedligeholdes til hosting af biblioteker.

Hukommelsessikkerhed er tilvejebragt i Rust på kompileringstidspunktet gennem referencekontrol, holde styr på objektejerskab, holde styr på objektlevetider (scopes) og vurdere rigtigheden af ​​hukommelsesadgang under kodeudførelse. Rust giver også beskyttelse mod heltalsoverløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige referencer og variabler som standard, tilbyder stærk statisk skrivning for at minimere logiske fejl.

Vigtigste innovationer:

  • For flydende komma-typerne f32 og f64 er algebraiske metoder til addition, subtraktion, multiplikation, division og rest implementeret, hvilket implementerer optimeringer svarende til "-ffast-math"-indstillingen i C/C++-compilere. Disse metoder tillader ændring af rækkefølgen af ​​operationer, når det er nødvendigt for optimeringer såsom loop-vektorisering. For eksempel, når man beregner "a + b + c + d" ved hjælp af almindelig addition, vil compileren altid udføre beregningen i samme rækkefølge: "((a + b) + c) + d", men ved hjælp af algebraic_add-metoden kan den gruppere udtrykket som "(a + b) + (c + d)" og udføre "(a + b)" og "(c + d)" parallelt ved hjælp af SIMD-instruktioner. Prisen ved at bruge algebraiske metoder er ikke-determinismen af ​​beregningsresultaterne, som kan variere inden for fejlmarginen.
  • Alle primitive heltalstyper har en indbygget "format_into"-metode til at konvertere tal til strenge, som kan bruges i stedet for itoa-pakken. En NumBuffer-buffer sendes som en parameter. , hvis størrelse garanteret er tilstrækkelig til at skrive enhver værdi af den anvendte type i decimalform. Outputtet er en formateret streng &str, hvis levetid er bundet til bufferen.
  • Interaktion mellem ManuallyDrop-selen og Box smart-pointeren resulterer ikke længere i udefineret adfærd.
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • str::substr_range
    • [T]::underslice_range
    • core::fmt::NumBuffer
    • <{heltal}>::format_into
    • Send/Synkroniser for std::process::CommandArgs
    • {fN}::algebraisk_add
    • {fN}::algebraisk_undergruppe
    • {fN}::algebraisk_multifunktion
    • {fN}::algebraisk_div
    • {fN}::algebraisk_rem
    • Ikke-nul<{heltal}>::from_str_radix
    • String::from_utf16le
    • String::from_utf16le_lossy
    • String::from_utf16be
    • String::from_utf16be_lossy
    • [T]::strip_circumfix
    • str::strip_circumfix
    • Atomar ::fra_mut
    • Atomar ::hent_mut_slice
    • Atomar ::from_mut_slice
    • std::range::legacy
  • Målplatformene thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf og thumbv8r-none-eabihf er blevet flyttet til andet supportniveau, som inkluderer en build-garanti, men ingen garantier for at bestå testpakken.
  • Der er tilføjet understøttelse af platformene powerpc64-unknown-linux-gnuelfv2 og aarch64-unknown-linux-pauthtest, som nu har niveau 3 som understøttelse. Niveau 3 inkluderer grundlæggende understøttelse, men ikke automatiseret testning, officielle build-udgivelser eller build-verifikation.

Derudover blev den populære crate-pakke arrayref, som er blevet downloadet over 53 millioner gange i løbet af de sidste 90 dage og bruges som en afhængighed af 403 pakker, kompromitteret. Angribere postede nye pakker med skadelig kode til crates.io-arkivet: proc-macro1, proc-macro-en, aovine, arone, aronenao og tinymember. Efterfølgende blev nye udgivelser af arrayref 0.3.10, internment 0.8.7 og append-only-vec 0.1.9 udgivet til arkivet, hvor hver version tilføjede den skadelige proc-macro1-pakke som en afhængighed. Den skadelige version af arrayref-pakken blev postet den 20. august kl. 10:15 (MSK) og forblev aktiv indtil kl. 11:41, hvorefter den blev fjernet af crates.io-administratorer.

Vedligeholderen af ​​arrayref er endnu ikke blevet kontaktet for at afklare situationen, men det menes, at deres legitimationsoplysninger blev opsnappet af angribere. I proc-macro1-pakken var en ondsindet ændring til stede i byggeskriptet og indlæste en eksekverbar fil fra en ekstern mappe. serverDen downloadede fil blev gemt som /tmp/rust-setup på Unix-systemer og i Windows — %TEMP%\rust-setup.ps1 eller %TEMP%\rust-setup-launch.vbs.

Kilde: opennet.ru

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster