Uitgave Rust 1.98.0. Compromittering van het pakket arrayref, dat 53 miljoen downloads in 3 maanden heeft behaald.

De release van de programmeertaal Rust 1.98, oorspronkelijk ontwikkeld door Mozilla en nu verder ontwikkeld onder de auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. De taal richt zich op veilige geheugengebruik en biedt middelen voor hoge parallelisme in de uitvoering van taken, terwijl het zonder een garbage collector of runtime werkt (de runtime beperkt zich tot basisinitialisatie en het onderhoud van de standaardbibliotheek).

De geheugenmethoden in Rust zijn gericht op het uitsluiten van fouten bij het manipuleren van pointers en het beschermen tegen problemen die voortkomen uit laagdrempelige geheugengebruik, zoals toegang tot geheugen na vrijgave, derefereren van null pointers, buffer overflows, enz. Voor de distributie van bibliotheken, het waarborgen van builds en het beheren van afhankelijkheden, wordt de package manager Cargo verder ontwikkeld. Voor het hosten van bibliotheken wordt de repository crates.io ondersteund.

Veilige geheugenwerking in Rust wordt tijdens de compilatie gegarandeerd door middel van referentiecontrole, het bijhouden van eigenaarschap van objecten, het in acht nemen van de levensduur van objecten (scope) en het evalueren van toegangsrechten tot geheugen tijdens de uitvoering van code. Rust biedt ook middelen om integer-overflows te voorkomen, vereist dat waarden van variabelen voor gebruik worden geïnitialiseerd, behandelt fouten beter in de standaardbibliotheek, past het concept van onveranderlijke (immutable) referenties en variabelen als standaard toe en biedt sterke statische type-onderzoek voor het minimaliseren van logische fouten.

Belangrijkste vernieuwingen:

  • Voor de floating-point types f32 en f64 zijn algebraïsche methoden geïmplementeerd voor optellen, aftrekken, vermenigvuldigen, delen en het berekenen van de rest, die optimalisaties mogelijk maken die vergelijkbaar zijn met de optie "-ffast-math" in C/C++ compilers. Dergelijke methoden staan veranderingen in de volgorde van bewerkingen toe wanneer dat nodig is voor optimalisaties, zoals het vectoriseren van lussen. Bijvoorbeeld, bij de berekening van "a + b + c + d" zal een compiler die normale optelling gebruikt altijd de berekening in dezelfde volgorde uitvoeren "((a + b) + c) + d", terwijl een algebraïsche_add methode de expressie kan groeperen als "(a + b) + (c + d)" en "(a + b)" en "(c + d)" gelijktijdig kan uitvoeren met behulp van SIMD-instructies. De prijs voor het toepassen van algebraïsche methoden is de onbepaalbaarheid van de rekenresultaten, die binnen de foutmarge kunnen variëren.
  • Voor alle primitieve gehele getal types is er een ingebouwde methode "format_into" geïmplementeerd voor het converteren van getallen naar strings, die kan worden gebruikt in plaats van het itoa-pakket. Als parameter wordt een buffer NumBuffer doorgegeven, waarvan de grootte gegarandeerd voldoende is voor het opslaan van elke waarde van het gebruikte type in decimale vorm. De uitvoer is een opgemaakte string &str, waarvan de levensduur aan de buffer is gekoppeld.
  • De interactie tussen de ManuallyDrop-wrapper en de slimme pointer Box leidt nu niet meer tot onbepaald gedrag.
  • Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van traits:
    • str::substr_range
    • [T]::subslice_range
    • core::fmt::NumBuffer
    • ::format_into
    • Send/Sync voor 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
  • De doelplatforms thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf en thumbv8r-none-eabihf zijn overgezet naar het tweede ondersteuningsniveau, wat garant staat voor compilatie, maar geen garanties biedt voor het doorstaan van de testset.
  • Ondersteuning toegevoegd voor de platforms powerpc64-unknown-linux-gnuelfv2 en aarch64-unknown-linux-pauthtest, waarvoor een derde ondersteuningsniveau is gegarandeerd. Dit derde niveau biedt basisondersteuning, maar zonder geautomatiseerd testen, publicatie van officiële builds en verificatie van de mogelijkheid om code te compileren.

Bovendien kan worden opgemerkt dat de populaire crate arrayref, met meer dan 53 miljoen downloads in de afgelopen 90 dagen en gebruikt als afhankelijkheid door 403 pakketten, gecompromitteerd is. Aanvallers hebben nieuwe pakketten proc-macro1, proc-macro-en, aovine, arone, aronenao en tinymember met kwaadaardige code op de crates.io-repository gepubliceerd. Nieuwe versies van de arrayref-pakketten 0.3.10, internment 0.8.7 en append-only-vec 0.1.9 zijn gepubliceerd, waarin het kwaadaardige pakket proc-macro1 als afhankelijkheid is toegevoegd. De kwaadaardige versie van de arrayref-bibliotheek werd op 20 augustus om 10:15 (MSK) geplaatst en was actief tot 11:41, waarna deze door de beheerders van crates.io werd verwijderd.

De begeleider van arrayref is nog niet benaderd om de situatie te verduidelijken, maar het wordt verondersteld dat zijn inloggegevens door aanvallers zijn onderschept. In het proc-macro1-pakket was de kwaadaardige wijziging aanwezig in het buildscript en voerde het de uitvoering van een extern bestand uit. de serverHet gedownloade bestand werd in Unix-systemen opgeslagen als /tmp/rust-setup en in Windows als %TEMP%\rust-setup.ps1 of %TEMP%\rust-setup-launch.vbs.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster