Veröffentlichung von Rust 1.98.0. Kompromittierung des Pakets arrayref, das in 3 Monaten 53 Millionen Downloads erzielte.

Die Veröffentlichung der Programmiersprache Rust 1.98, die ursprünglich von Mozilla entwickelt wurde, aber jetzt unter der Schirmherrschaft der unabhängigen Non-Profit-Organisation Rust Foundation weiterentwickelt wird. Die Sprache konzentriert sich auf sichere Arbeit mit Speicher und bietet Mittel für hohe Parallelität bei der Ausführung von Aufgaben, während sie ohne einen Garbage Collector und Runtime (die Runtime beschränkt sich auf die grundlegende Initialisierung und Pflege der Standardbibliothek) auskommt.

Die Methoden zur Arbeit mit Speicher in Rust zielen darauf ab, Fehler beim Umgang mit Zeigern zu vermeiden und Probleme zu verhindern, die durch die Low-Level-Arbeit mit Speicher entstehen, wie den Zugriff auf freigegebenen Speicher, Dereferenzierung nuller Zeiger, Pufferüberläufe usw. Zur Verbreitung von Bibliotheken, zur Sicherstellung der Kompilierung und zum Management von Abhängigkeiten wird der Paketmanager Cargo weiterentwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.

Sichere Speicherverwaltung wird in Rust während der Kompilierung durch Überprüfung von Referenzen, Nachverfolgung des Eigentums an Objekten, Berücksichtigung der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und Bewertung der Korrektheit des Zugriffs auf den Speicher während der Ausführung des Codes gewährleistet. Rust bietet ebenfalls Mittel zum Schutz vor Überläufen bei Ganzzahlen, fordert die zwingende Initialisierung von Variablenwerten vor deren Verwendung und behandelt Fehler in der Standardbibliothek besser. Außerdem wird das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig angewendet, und es bietet eine starke statische Typisierung zur Minimierung logischer Fehler.

Hauptneuheiten:

  • Für die Gleitkommatypen f32 und f64 wurden algebraische Methoden für Addition, Subtraktion, Multiplikation, Division und Modulo implementiert, die eine Optimierung ähnlich der Option „-ffast-math“ in C/C++-Compilern durchführen. Solche Methoden erlauben eine Veränderung der Reihenfolge der Operationen, wenn dies für Optimierungen, wie z.B. die Vektorisierung von Schleifen, erforderlich ist. Zum Beispiel wird beim Berechnen von „a + b + c + d“ bei Verwendung der normalen Addition der Compiler immer die Berechnung in einer bestimmten Reihenfolge durchführen „((a + b) + c) + d“, während bei Verwendung der Methode algebraic_add der Ausdruck als „(a + b) + (c + d)“ gruppiert werden kann, und „(a + b)“ und „(c + d)“ parallel mit SIMD-Instruktionen ausgeführt werden. Der Preis für die Anwendung algebraischer Methoden ist die Nichtdeterminierung der Berechnungsergebnisse, die innerhalb der Fehlergrenzen variieren können.
  • Für alle primitiven ganzzahligen Typen wurde die eingebaute Methode „format_into“ zur Umwandlung von Zahlen in Strings implementiert, die anstelle des Pakets itoa verwendet werden kann. Als Parameter wird ein Buffer NumBuffer übergeben, dessen Größe garantiert ausreicht, um jeden Wert des verwendeten Typs im dezimalen Format zu schreiben. Am Ende wird ein formatierter String &str zurückgegeben, dessen Lebensdauer an den Buffer gebunden ist.
  • Die Interaktion zwischen dem ManuallyDrop-Wrapper und dem smarten Pointer Box führt jetzt nicht mehr zu unvorhersehbarem Verhalten.
  • Eine neue Charge von APIs wurde in den stabilen Bereich überführt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
    • str::substr_range
    • [T]::subslice_range
    • core::fmt::NumBuffer
    • ::format_into
    • Send\/Sync für 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
  • Die Zielplattformen thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf und thumbv8r-none-eabihf wurden auf die zweite Unterstützungsebene hochgestuft, die eine Build-Garantie, jedoch keine Garantie für das Bestehen des Testsets bietet.
  • Unterstützung für die Plattformen powerpc64-unknown-linux-gnuelfv2 und aarch64-unknown-linux-pauthtest wurde hinzugefügt, die nun die dritte Unterstützungsebene haben. Die dritte Ebene umfasst grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Buildfähigkeit des Codes.

Darüber hinaus ist die Kompromittierung des beliebten crate-Pakets arrayref zu erwähnen, das in den letzten 90 Tagen über 53 Millionen Downloads verzeichnete und als Abhängigkeit für 403 Pakete verwendet wurde. Angreifer luden in das Repository crates.io neue Pakete wie proc-macro1, proc-macro-en, aovine, arone, aronenao und tinymember hoch, die schädlichen Code enthielten. Danach wurden neue Versionen der Pakete arrayref 0.3.10, internment 0.8.7 und append-only-vec 0.1.9 veröffentlicht, in die das schädliche Paket proc-macro1 als Abhängigkeit eingefügt wurde. Die schädliche Version des Pakets arrayref wurde am 20. August um 10:15 Uhr (MSK) hochgeladen und bestand bis 11:41 Uhr, danach wurde sie von den Admins von crates.io entfernt.

Der Kontakt mit dem Betreiber von arrayref konnte bislang nicht hergestellt werden, um die Situation zu klären, jedoch wird vermutet, dass seine Kontodaten von Kriminellen abgefangen wurden. Im Paket proc-macro1 war die schädliche Änderung im Build-Skript enthalten, das eine ausführbare Datei von externen Quellen herunterlädt. ServerDie heruntergeladene Datei wurde in Unix-Systemen als /tmp/rust-setup gespeichert und in Windows als %TEMP%\rust-setup.ps1 oder %TEMP%\rust-setup-launch.vbs.

Quelle: opennet.ru

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster