Rust 1.98.0 Release: Compromittering van het arrayref-pakket, dat in 3 maanden tijd 53 miljoen keer is gedownload.

De programmeertaal Rust 1.98, ontwikkeld door het Mozilla-project maar nu ontwikkeld onder auspiciën van de onafhankelijke non-profit Rust Foundation, is uitgebracht. De taal richt zich op geheugenveiligheid en biedt tools voor het bereiken van een hoge mate van parallelliteit bij de uitvoering van taken, zonder gebruik te maken van een garbage collector en runtime (de runtime is beperkt tot basisinitialisatie en onderhoud van de standaardbibliotheek).

De geheugenbeheermethoden van Rust zijn ontworpen om fouten bij pointermanipulatie te elimineren en te beschermen tegen problemen die voortkomen uit geheugenbeheer op laag niveau, zoals toegang tot geheugen nadat het is vrijgegeven, het dereferentiëren van null-pointers, bufferoverloop, enzovoort. Het project ontwikkelt de Cargo-pakketbeheerder om bibliotheken te distribueren, builds te vergemakkelijken en afhankelijkheden te beheren. De crates.io-repository wordt onderhouden voor het hosten van bibliotheken.

Geheugenveiligheid wordt in Rust afgedwongen tijdens het compileren door middel van referentiecontrole, het volgen van objecteigendom, overweging van de levensduur van objecten (scoping) en evaluatie van geheugentoegang tijdens runtime. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.

Belangrijkste innovaties:

  • Voor de drijvende-kommatypen f32 en f64 zijn algebraïsche methoden voor optellen, aftrekken, vermenigvuldigen, delen en rest geïmplementeerd, met optimalisaties vergelijkbaar met de "-ffast-math"-optie in C/C++-compilers. Deze methoden maken het mogelijk om de volgorde van bewerkingen te wijzigen wanneer dat nodig is voor optimalisaties zoals lusvectorisatie. Bijvoorbeeld, bij het berekenen van "a + b + c + d" met behulp van gewone optelling, voert de compiler de berekening altijd in dezelfde volgorde uit: "((a + b) + c) + d". Met de algebraic_add-methode kan de compiler de expressie groeperen als "(a + b) + (c + d)" en "(a + b)" en "(c + d)" parallel uitvoeren met behulp van SIMD-instructies. Het nadeel van het gebruik van algebraïsche methoden is de niet-deterministische aard van de berekeningsresultaten, die binnen de foutmarge kunnen variëren.
  • Alle primitieve integer-typen hebben een ingebouwde "format_into"-methode voor het converteren van getallen naar tekenreeksen, die in plaats van het itoa-pakket kan worden gebruikt. Een NumBuffer-buffer wordt als parameter doorgegeven. De buffer heeft een grootte die gegarandeerd voldoende is om elke waarde van het gebruikte type in decimale vorm te schrijven. De uitvoer is een geformatteerde tekenreeks &str, waarvan de levensduur is gekoppeld aan de buffer.
  • De interactie tussen de ManuallyDrop-harnas en de Box smart pointer leidt niet langer tot onvoorspelbaar gedrag.
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • str::substr_range
    • [T]::subslice_range
    • kern::fmt::NumBuffer
    • <{integer}>::format_into
    • Verzenden/synchroniseren voor 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
    • Atoom ::from_mut
    • Atoom ::get_mut_slice
    • Atoom ::from_mut_slice
    • std::range::legacy
  • De doelplatformen thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf en thumbv8r-none-eabihf zijn verplaatst naar het tweede ondersteuningsniveau. Dit omvat een buildgarantie, maar geen garantie voor het slagen voor de testsuite.
  • Ondersteuning is toegevoegd voor de platforms powerpc64-unknown-linux-gnuelfv2 en aarch64-unknown-linux-pauthtest, die nu ondersteuningsniveau 3 hebben bereikt. Niveau 3 omvat basisfunctionaliteit, maar geen geautomatiseerde tests, officiële buildreleases of buildverificatie.

Bovendien werd het populaire crate-pakket arrayref, dat de afgelopen 90 dagen meer dan 53 miljoen keer is gedownload en door 403 pakketten als afhankelijkheid wordt gebruikt, gehackt. Aanvallers plaatsten nieuwe pakketten met kwaadaardige code in de crates.io-repository: proc-macro1, proc-macro-en, aovine, arone, aronenao en tinymember. Vervolgens werden nieuwe releases van arrayref 0.3.10, internment 0.8.7 en append-only-vec 0.1.9 in de repository gepubliceerd, waarbij elk het kwaadaardige proc-macro1-pakket als afhankelijkheid toevoegde. De kwaadaardige versie van het arrayref-pakket werd op 20 augustus om 10:15 uur (MSK) geplaatst en bleef actief tot 11:41 uur, waarna het door de beheerders van crates.io werd verwijderd.

De beheerder van arrayref is nog niet benaderd voor opheldering, maar men vermoedt dat zijn inloggegevens door aanvallers zijn onderschept. In het pakket proc-macro1 was een kwaadaardige wijziging in het buildscript aanwezig, waardoor een uitvoerbaar bestand uit een externe map werd geladen. serverHet gedownloade bestand werd op Unix-systemen opgeslagen als /tmp/rust-setup, en in Windows — %TEMP%\rust-setup.ps1 of %TEMP%\rust-setup-launch.vbs.

Bron: opennet.ru

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster