Programmeringsspråk: Dette fordekte trikset kan tillate angripere å skjule “usynlige” sårbarheter i kode

0
148

Liam Tung

Av Liam Tung | 1. november 2021 | Emne: Sikkerhet

Hvis du bruker Rust-programmeringsspråket – eller JavaScript, Java, Go eller Python – i et prosjekt, kan det være lurt å se etter potensielle forskjeller mellom gjennomgått kode kontra den kompilerte koden som er blitt produksjon.

Arbeidsgruppen Rust Security Response (WG) har flagget et merkelig sikkerhetssårbarhet som spores som CVE-2021-42574 og oppfordrer utviklere til å oppgradere Rust versjon 1.56.1.

Nyheter om den obskure feilen ble spredt i en e-postliste i dag. Rust-prosjektet har også flagget Unicode-problemet “toveis overstyring” i et blogginnlegg. Men det er en generell feil som ikke bare påvirker Rust, men all kode som er skrevet på populære språk som bruker Unicode.

Siden det er Unicode, påvirker denne feilen ikke bare Rust, men andre toppspråk, som Java, JavaScript, Python, C-baserte språk og kode skrevet på andre moderne språk, ifølge sikkerhetsforsker Ross Anderson.

Åpen kildekode-prosjekter som operativsystemer er ofte avhengige av menneskelig gjennomgang av all ny kode for å oppdage potensielt ondsinnede bidrag fra frivillige. Men sikkerhetsforskerne ved Cambridge University sa at de har oppdaget måter å manipulere kodingen av kildekodefiler slik at menneskelige seere og kompilatorer ser ulik logikk.

“Vi har oppdaget måter å manipulere kodingen av kildekodefiler slik at menneskelige seere og kompilatorer ser ulik logikk. En spesielt skadelig metode bruker Unicode-retningsoverstyringstegn for å vise kode som et anagram av dens sanne logikk. Vi har bekreftet at dette angrepet fungerer mot C, C++, C#, JavaScript, Java, Rust, Go og Python, og mistenker at det vil fungere mot de fleste andre moderne språk,” skriver Anderson og beskriver denne feilen og et lignende “homoglyph”-problem sporet som CVE-2021 -42694.

“Trikset er å bruke Unicode-kontrolltegn til å omorganisere tokens i kildekoden på kodingsnivå. Disse visuelt omorganiserte tokens kan brukes til å vise logikk som, selv om de er semantisk korrekte, avviker fra logikken som presenteres av den logiske rekkefølgen av kildekode-tokens. Kompilatorer og tolker følger den logiske rekkefølgen av kildekoden, ikke den visuelle rekkefølgen,” sa forskerne. Angrepet er å bruke kontrolltegn innebygd i kommentarer og strenger for å omorganisere kildekodetegn på en måte som endrer logikken.

Programvareutvikling er internasjonal og Unicode – et grunnlag for tekst og emoji – støtter venstre-til-høyre-språk, som engelsk, og høyre-til-venstre-språk, som persisk. Den gjør dette gjennom “toveis overstyring”, en usynlig funksjon kalt et kodepunkt som gjør det mulig å legge inn venstre-til-høyre-ord i en høyre-til-venstre-setning og omvendt.

Mens de vanligvis brukes til å legge inn et ord i en setning som er konstruert i motsatt retning, oppdaget Anderson og Microsofts sikkerhetsforsker Nicholas Boucher at de kunne brukes til å endre hvordan kildekoden vises i visse redaktører og kodegjennomgangsverktøy.

Det betyr at gjennomgått kode kan være annerledes enn den kompilerte koden og viser hvordan organisasjoner kan bli hacket gjennom tuklet åpen kildekode.

“Dette angrepet er spesielt kraftig i sammenheng med programvareforsyningskjeder. Hvis en motstander lykkes med å begå målrettede sårbarheter i åpen kildekode ved å lure menneskelige anmeldere, vil nedstrøms programvare sannsynligvis arve sårbarheten,” advarer forskerne.

Google har oppdaget at forsyningskjedeangrep for åpen kildekode har eskalert det siste året.

Rust er ikke et mye brukt programmeringsspråk, men det har blitt tatt i bruk for programmering av systemer (mot applikasjoner) av Google, Facebook, Microsoft, Amazon Web Services (AWS) og mer for sin minnerelaterte sikkerhet garantier.

“Rust 1.56.1 introduserer to nye lints for å oppdage og avvise kode som inneholder de berørte kodepunktene. Rust 1.0.0 til Rust 1.56.0 inkluderer ikke slike lints, noe som gjør kildekoden din sårbar for dette angrepet hvis du utfører ikke kontroller utenfor båndet for tilstedeværelsen av disse kodepunktene,” sa Rust-prosjektet.

Rust-prosjektet analyserte tilleggsprogramvarepakkene sine, kalte «kasser» – det gjennomgikk alt publisert på crates.io fra 17. oktober 2021 – og fastslo at fem kasser har de berørte kodepunktene i kildekoden. Den fant imidlertid ingen ondsinnede kodepunkter.

Utvikler | Sikkerhets-TV | Databehandling | CXO | Datasentre