Hvis du bruger Rust-programmeringssproget – eller JavaScript, Java, Go eller Python – i et projekt, vil du måske tjekke for potentielle forskelle mellem gennemgået kode kontra den kompilerede kode, der er blevet produktion.
Rust Security Response-arbejdsgruppen (WG) har markeret en mærkelig sikkerhedssårbarhed, der spores som CVE-2021-42574 og opfordrer udviklere til at opgradere Rust version 1.56.1.
Nyheder om den obskure fejl blev spredt på en mailingliste i dag. Rust-projektet har også markeret problemet med Unicode “tovejs tilsidesættelse” i et blogindlæg. Men det er en generel fejl, der ikke kun påvirker Rust, men al kode, der er skrevet på populære sprog, der bruger Unicode.
Da det er Unicode, påvirker denne fejl ikke kun Rust, men andre topsprog, såsom Java, JavaScript, Python, C-baserede sprog og kode skrevet på andre moderne sprog, ifølge sikkerhedsforsker Ross Anderson.
Open source-projekter såsom operativsystemer er ofte afhængige af menneskelig gennemgang af al ny kode for at opdage eventuelle potentielt ondsindede bidrag fra frivillige. Men sikkerhedsforskerne ved Cambridge University sagde, at de har opdaget måder at manipulere kodningen af kildekodefiler på, så menneskelige seere og compilere ser forskellig logik.
“Vi har opdaget måder at manipulere kodningen af kildekodefiler på, så menneskelige seere og compilere ser forskellig logik. En særlig skadelig metode bruger Unicode-retningsbestemt tilsidesættelsestegn til at vise kode som et anagram af dens sande logik. Vi har bekræftet, at dette angreb virker mod C, C++, C#, JavaScript, Java, Rust, Go og Python og har mistanke om, at det vil fungere mod de fleste andre moderne sprog,” skriver Anderson og beskriver denne fejl og et lignende “homoglyph”-problem sporet som CVE-2021 -42694.
“Tricket er at bruge Unicode-kontroltegn til at omarrangere tokens i kildekoden på kodningsniveauet. Disse visuelt omarrangerede tokens kan bruges til at vise logik, der, selvom den er semantisk korrekt, afviger fra den logik, der præsenteres af den logiske rækkefølge af kildekodetokens. Kompilere og fortolkere overholder den logiske rækkefølge af kildekoden, ikke den visuelle rækkefølge,” sagde forskerne. Angrebet er at bruge kontroltegn indlejret i kommentarer og strenge til at omorganisere kildekodetegn på en måde, der ændrer dens logik.
Softwareudvikling er international, og Unicode – et fundament for tekst og emoji – understøtter venstre-til-højre-sprog, såsom engelsk, og højre-mod-venstre-sprog, såsom persisk. Det gør det gennem “tovejs tilsidesættelse”, en usynlig funktion kaldet et kodepunkt, der gør det muligt at indlejre venstre-til-højre-ord i en højre-til-venstre-sætning og omvendt.
Mens de normalt bruges til at indlejre et ord i en sætning, der er bygget i den modsatte retning, opdagede Anderson og Microsofts sikkerhedsforsker Nicholas Boucher, at de kunne bruges til at ændre, hvordan kildekoden vises i visse editorer og kodegennemgangsværktøjer.
Det betyder, at gennemgået kode kan være anderledes end den kompilerede kode og viser, hvordan organisationer kan blive hacket gennem manipuleret open source-kode.
“Dette angreb er særligt kraftfuldt i forbindelse med softwareforsyningskæder. Hvis en modstander med succes begår målrettede sårbarheder i åben kildekode ved at bedrage menneskelige anmeldere, vil downstream-software sandsynligvis arve sårbarheden,” advarer forskerne.
Google har opdaget, at open source-softwareforsyningskædeangreb er eskaleret i det seneste år.
Rust er ikke et udbredt programmeringssprog, men det er blevet brugt til programmering af systemer (versus applikationer) af Google, Facebook, Microsoft, Amazon Web Services (AWS) og mere for dets hukommelsesrelaterede sikkerhed garantier.
“Rust 1.56.1 introducerer to nye lints til at detektere og afvise kode, der indeholder de berørte kodepunkter. Rust 1.0.0 til Rust 1.56.0 inkluderer ikke sådanne lints, hvilket efterlader din kildekode sårbar over for dette angreb, hvis du udfører ikke out-of-band-tjek for tilstedeværelsen af disse kodepunkter,” sagde Rust-projektet.
Rust-projektet analyserede dets tilføjelsessoftwarepakker, kaldte “kasser” – det gennemgik alt, der blev offentliggjort på crates.io fra 17. oktober 2021 – og fastslog, at fem kasser har de berørte kodepunkter i deres kildekode. Den fandt dog ingen ondsindede kodepunkter.
Udvikler | Sikkerheds-tv | Datastyring | CXO | Datacentre