Rilis Rust 1.98.0: Kompromi pada paket arrayref, yang telah diunduh 53 juta kali dalam 3 bulan.

Bahasa pemrograman Rust 1.98, yang didirikan oleh proyek Mozilla tetapi kini dikembangkan di bawah naungan Rust Foundation, sebuah lembaga nirlaba independen, telah dirilis. Bahasa ini berfokus pada keamanan memori dan menyediakan perangkat untuk mencapai paralelisme eksekusi tugas yang tinggi, tanpa menggunakan garbage collector dan runtime (runtime disederhanakan menjadi inisialisasi dasar dan pemeliharaan pustaka standar).

Metode manajemen memori Rust dirancang untuk menghilangkan kesalahan dalam manipulasi pointer dan melindungi dari masalah yang muncul dari manajemen memori tingkat rendah, seperti mengakses memori setelah dibebaskan, melakukan dereferensi pointer null, buffer overrun, dan sebagainya. Proyek ini sedang mengembangkan manajer paket Cargo untuk mendistribusikan pustaka, memfasilitasi proses build, dan mengelola dependensi. Repositori crates.io dikelola untuk menampung pustaka.

Keamanan memori disediakan di Rust pada waktu kompilasi melalui pemeriksaan referensi, melacak kepemilikan objek, melacak masa pakai objek (cakupan), dan menilai kebenaran akses memori selama eksekusi kode. Rust juga memberikan perlindungan terhadap integer overflow, membutuhkan inisialisasi wajib dari nilai variabel sebelum digunakan, menangani kesalahan dengan lebih baik di perpustakaan standar, menerapkan konsep referensi dan variabel yang tidak dapat diubah secara default, menawarkan pengetikan statis yang kuat untuk meminimalkan kesalahan logis.

Inovasi utama:

  • Untuk tipe floating-point f32 dan f64, metode aljabar untuk penjumlahan, pengurangan, perkalian, pembagian, dan sisa diimplementasikan, menerapkan optimasi yang mirip dengan opsi "-ffast-math" pada kompiler C/C++. Metode ini memungkinkan perubahan urutan operasi bila diperlukan untuk optimasi seperti vektorisasi loop. Misalnya, saat menghitung "a + b + c + d" menggunakan penjumlahan biasa, kompiler akan selalu melakukan perhitungan dalam urutan yang sama: "((a + b) + c) + d", tetapi dengan menggunakan metode algebraic_add, ia dapat mengelompokkan ekspresi sebagai "(a + b) + (c + d)" dan mengeksekusi "(a + b)" dan "(c + d)" secara paralel menggunakan instruksi SIMD. Harga dari penggunaan metode aljabar adalah nondeterminisme hasil perhitungan, yang dapat bervariasi dalam margin kesalahan.
  • Semua tipe bilangan bulat primitif memiliki metode "format_into" bawaan untuk mengkonversi angka ke string, yang dapat digunakan sebagai pengganti paket itoa. Buffer NumBuffer dilewatkan sebagai parameter. , yang ukurannya dijamin cukup untuk menulis nilai apa pun dari tipe yang digunakan dalam bentuk desimal. Outputnya adalah string berformat &str, yang masa pakainya terikat pada buffer.
  • Interaksi antara harness ManuallyDrop dan smart pointer Box tidak lagi menghasilkan perilaku yang tidak terdefinisi.
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • str::substr_range
    • [T]::subslice_range
    • core::fmt::NumBuffer
    • <{integer}>::format_ke
    • Kirim/Sinkronkan untuk std::process::CommandArgs
    • {fN}::penjumlahan_aljabar
    • {fN}::sub_aljabar
    • {fN}::perkalian_aljabar
    • {fN}::divisi_aljabar
    • {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
    • Atom ::dari_mu
    • Atom ::get_mut_slice
    • Atom ::dari_mut_slice
    • std::range::legacy
  • Platform target thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf, dan thumbv8r-none-eabihf telah dipindahkan ke tingkat dukungan kedua, yang mencakup jaminan pembuatan tetapi tidak ada jaminan untuk lulus rangkaian pengujian.
  • Dukungan telah ditambahkan untuk platform powerpc64-unknown-linux-gnuelfv2 dan aarch64-unknown-linux-pauthtest, yang sekarang berada pada level dukungan 3. Level 3 mencakup dukungan dasar, tetapi tidak termasuk pengujian otomatis, rilis build resmi, atau verifikasi build.

Selain itu, paket crate populer arrayref, yang telah diunduh lebih dari 53 juta kali dalam 90 hari terakhir dan digunakan sebagai dependensi oleh 403 paket, telah disusupi. Penyerang memposting paket baru yang berisi kode berbahaya ke repositori crates.io: proc-macro1, proc-macro-en, aovine, arone, aronenao, dan tinymember. Selanjutnya, rilis baru arrayref 0.3.10, internment 0.8.7, dan append-only-vec 0.1.9 diterbitkan ke repositori, masing-masing menambahkan paket proc-macro1 yang berbahaya sebagai dependensi. Versi berbahaya dari paket arrayref diposting pada 20 Agustus pukul 10:15 pagi (MSK) dan tetap aktif hingga pukul 11:41 pagi, setelah itu dihapus oleh administrator crates.io.

Pengelola arrayref belum dihubungi untuk mengklarifikasi situasi tersebut, tetapi diyakini bahwa kredensial mereka telah dicegat oleh penyerang. Dalam paket proc-macro1, terdapat perubahan berbahaya pada skrip build yang memuat file yang dapat dieksekusi dari direktori eksternal. serverFile yang diunduh disimpan sebagai /tmp/rust-setup pada sistem Unix, dan di Windows — %TEMP%\rust-setup.ps1 atau %TEMP%\rust-setup-launch.vbs.

Sumber: opennet.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster