Sortie de Rust 1.98.0. Compromission du package arrayref, qui compte 53 millions de téléchargements en 3 mois.

La version 1.98 du langage de programmation Rust, initialement développé par Mozilla et maintenant soutenu par l'organisation à but non lucratif Rust Foundation, a été publiée. Ce langage se concentre sur la gestion sécurisée de la mémoire et offre des outils pour atteindre un haut niveau de parallélisme dans l'exécution des tâches, tout en évitant l'utilisation d'un ramasse-miettes et d'un runtime (le runtime se limite à l'initialisation de base et à la gestion de la bibliothèque standard).

Les méthodes de gestion de la mémoire dans Rust visent à éliminer les erreurs lors de la manipulation des pointeurs et à protéger contre les problèmes liés à une gestion de la mémoire à bas niveau, tels que l'accès à une zone mémoire après sa libération, la déréférence de pointeurs nuls, les débordements de tampon, etc. Pour la distribution de bibliothèques, la construction et la gestion des dépendances, un gestionnaire de paquets nommé Cargo est développé. Un dépôt crates.io est maintenu pour l'hébergement des bibliothèques.

La sécurité de la mémoire dans Rust est assurée au moment de la compilation grâce à la vérification des références, au suivi de la propriété des objets, à la prise en compte de la durée de vie des objets (portée) et à l'évaluation de l'accès mémoire pendant l'exécution du code. Rust offre également des outils pour se protéger contre les débordements d'entiers, exige l'initialisation obligatoire des valeurs des variables avant leur utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept d'immuabilité (immutable) pour les références et les variables par défaut, et propose une forte typage statique pour minimiser les erreurs logiques.

Les principales nouveautés :

  • Pour les types à virgule flottante f32 et f64, des méthodes algébriques ont été mises en œuvre pour l'addition, la soustraction, la multiplication, la division et le calcul du reste, optimisant d'une manière similaire à l'option « -ffast-math » dans les compilateurs C/C++. Ces méthodes permettent de modifier l'ordre des opérations lorsque cela est nécessaire pour des optimisations telles que la vectorisation des boucles. Par exemple, lors du calcul de « a + b + c + d », avec l'addition ordinaire, le compilateur effectuera toujours le calcul dans un ordre « ((a + b) + c) + d », tandis qu'en utilisant la méthode algebraic_add, il peut regrouper l'expression comme « (a + b) + (c + d) » et exécuter « (a + b) » et « (c + d) » en parallèle à l'aide d'instructions SIMD. Le prix à payer pour l'utilisation de méthodes algébriques est l'indétermination des résultats de calcul, qui peuvent varier dans une marge d'erreur.
  • Pour tous les types primitifs d'entiers, une méthode intégrée « format_into » a été implémentée pour convertir des nombres en chaînes, qui peut être utilisée à la place du paquet itoa. Un tampon NumBuffer<Self> est passé en paramètre, dont la taille est garantie d'être suffisante pour écrire toute valeur du type utilisé en format décimal. En sortie, une chaîne formatée &str est retournée, dont la durée de vie est liée au tampon.
  • L'interaction entre l'encapsulation ManuallyDrop et le pointeur smart Box ne conduit plus à un comportement indéfini.
  • Une nouvelle série d'API a été stabilisée dans la catégorie des API stables, notamment des méthodes et des implémentations de traits stabilisées :
    • str::substr_range
    • [T]::subslice_range
    • core::fmt::NumBuffer
    • <{integer}>::format_into
    • Send\/Sync for 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
    • Atomic<T>::from_mut
    • Atomic<T>::get_mut_slice
    • Atomic<T>::from_mut_slice
    • std::range::legacy
  • Les plateformes cibles thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf et thumbv8r-none-eabihf ont été mises au deuxième niveau de support, ce qui implique une garantie de compilation sans garantie lors du passage des tests.
  • Le support des plateformes powerpc64-unknown-linux-gnuelfv2 et aarch64-unknown-linux-pauthtest a été ajouté, fournissant un troisième niveau de support. Ce niveau couvre le support de base mais sans tests automatisés, publication de versions officielles et vérification de la capacité à compiler du code.

On peut également noter la compromission du paquet crate populaire arrayref, qui a enregistré plus de 53 millions de téléchargements au cours des 90 derniers jours et est utilisé comme dépendance par 403 paquets. Des attaquants ont placé dans le dépôt crates.io de nouveaux paquets proc-macro1, proc-macro-en, aovine, arone, aronenao et tinymember, contenant du code malveillant. Par la suite, de nouvelles versions des paquets arrayref 0.3.10, internment 0.8.7 et append-only-vec 0.1.9 ont été publiées, incluant le paquet malveillant proc-macro1 comme dépendance. La version malveillante du paquet arrayref a été déposée le 20 août à 10h15 (MSK) et a existé jusqu'à 11h41, après quoi elle a été supprimée par les administrateurs de crates.io.

Il n'a pas encore été possible de contacter le mainteneur d'arrayref pour clarifier la situation, mais il est supposé que ses informations d'identification ont été interceptées par des acteurs malveillants. Dans le paquet proc-macro1, la modification malveillante était présente dans le script de compilation et téléchargait un exécutable à partir d'une source externe. de serveurs. Le fichier téléchargé sous les systèmes Unix était enregistré sous /tmp/rust-setup, tandis qu'en Windows, il s'agissait de %TEMP%\rust-setup.ps1 ou %TEMP%\rust-setup-launch.vbs.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster