Megjelent a Rust 1.98.0. Az arrayref csomag kompromittálódása, amely 53 millió letöltést számlál 3 hónap alatt

Megjelent a Rust 1.98 programozási nyelv, amelyet a Mozilla projekt indított, de ma már egy független nonprofit szervezet, a Rust Foundation fejlődtet. A nyelv a memória biztonságos kezelésére összpontosít, és olyan eszközöket biztosít, amelyek lehetővé teszik a feladatok magas párhuzamos végrehajtását, elkerülve a szemétgyűjtő és futási idő használatát (a futási idő csupán az alapvető inicializálásra és a standard könyvtár kísérésére korlátozódik).

A Rust memória kezelésének módszerei arra irányulnak, hogy kiküszöböljék a pointerekkel végzett manipuláció során fellépő hibákat, és megvédjék a memória alacsony szintű használatából adódó problémáktól, mint például a már felszabadított memória területekhez való hozzáférés, a null pointerek dereferálása, a buffer túlfolyás és hasonlók. A könyvtárak terjesztésére, a fordítás biztosítására és a projektek függőségeinek kezelésére a Cargo csomagkezelő fejlődik.

A memória biztonságos kezelése a Rustban a fordítási időben történik, a hivatkozások ellenőrzésén, az objektumok tulajdonjogának nyomon követésén, az objektumok élettartamának (láthatóságának) figyelembevételén és a memória hozzáférésének helyességének értékelésén keresztül a kód futtatásakor. A Rust emellett eszközöket biztosít az egész számok túllépésének elleni védelemhez, kötelezővé teszi a változók értékeinek inicializálását használat előtt, jobban kezeli a hibákat a standard könyvtárban, alkalmazza a változatlan (immutable) hivatkozások és változók fogalmát alapértelmezés szerint, és erős statikus típussal minimalizálja a logikai hibákat.

Főbb újítások:

  • A f32 és f64 lebegőpontos típusokhoz algebrai módszerek valósultak meg az összegzés, kivonás, szorzás, osztás és maradék meghatározására, amelyek optimizálást valósítanak meg, hasonlóan a C/C++ fordítók „-ffast-math” opciójához. Az ilyen módszerek lehetővé teszik a műveletek sorrendjének megváltoztatását, amikor ez szükséges az optimalizálások, például a ciklusok vektorizálása érdekében. Például, az „a + b + c + d” számításakor a szokásos összeadással a fordító mindig ugyanabban a sorrendben hajtja végre a számítást: „((a + b) + c) + d”, míg az algebrai_add módszer használatakor a kifejezés csoportosítható: „(a + b) + (c + d)”, és a „(a + b)” és a „(c + d)” párhuzamosan hajthatók végre SIMD utasítások segítségével. Az algebrai módszerek alkalmazásának ára a számítások nem determinisztikus eredménye, amelyek a hibahatárokon belül változhatnak.
  • Minden primitív egész szám típushoz beépített „format_into” metódus valósult meg számok karakterlánccá alakításához, amely a itoa csomag helyett használható. Paraméterként a NumBuffer<Self> puffer kerül átadásra, amelynek mérete garantáltan elegendő bármely típusú érték tizedes formájú írására. A kimenetként visszatérő karakterlánc &str, amelynek élettartama a pufferhez van kötve.
  • A ManuallyDrop kötések és a okos mutató, a Box közötti interakció már nem vezet meghatározhatatlan viselkedéshez.
  • Új API-k kerültak a stabil kiadások közé, beleértve a metódusok és típusimplementációk stabilizálását:
    • 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
  • A célplatformok: thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf és thumbv8r-none-eabihf a második szintű támogatásra kerültek, ami a build garanciáját jelenti, de tesztelési garancia nélkül.
  • Hozzáadva a powerpc64-unknown-linux-gnuelfv2 és aarch64-unknown-linux-pauthtest platformok támogatása, amelyekhez harmadik szintű támogatás biztosított. A harmadik szint alapvető támogatást kínál, de automatikus tesztelés, hivatalos build kiadás és a kód buildelésének ellenőrzése nélkül.

Továbbá megemelhető a népszerű crate csomag, az arrayref kompromittálása, amely az utolsó 90 napban több mint 53 millió letöltést számlál és 403 csomag függőségeként szerepel. A támadók új proc-macro1, proc-macro-en, aovine, arone, aronenao és tinymember csomagokat helyeztek el a crates.io repository-ban, amelyek rosszindulatú kódot tartalmaztak. Ezt követően új kiadások jelentek meg az arrayref 0.3.10, internment 0.8.7 és append-only-vec 0.1.9 csomagokból, amelyekhez a proc-macro1 rosszindulatú csomag mint függőség került. A rosszindulatú arrayref csomag 20-án 10:15-kor (MSK) lett közzé téve és 11:41-ig élt, majd eltávolították a crates.io adminisztrátorai.

A kapcsolattartóval az arrayref csomagnál eddig nem sikerült felvenni a kapcsolatot a helyzet tisztázása érdekében, de feltételezhető, hogy a hitelesítő adatait rosszindulatú támadók eltérítették. A proc-macro1 csomagban a rosszindulatú módosítás a buildelési szkriptben volt, és egy végrehajtható fájl letöltését végezte egy külső forrásból. a szerver. A letöltött fájl Unix rendszereken /tmp/rust-setup néven, míg Windows alatt %TEMP%\rust-setup.ps1 vagy %TEMP%\rust-setup-launch.vbs néven lett mentve.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster