Programmeringsspråk: Detta lömska trick kan tillåta angripare att dölja “osynliga” sårbarheter i kod

0
127

Liam Tung

Av Liam Tung | 1 november 2021 | Ämne: Säkerhet

Om du använder programmeringsspråket Rust – eller JavaScript, Java, Go eller Python – i ett projekt, kanske du vill kontrollera eventuella skillnader mellan granskad kod kontra den kompilerade koden som har blivit produktion.

Arbetsgruppen för Rust Security Response (WG) har flaggat en konstig säkerhetssårbarhet som spåras som CVE-2021-42574 och uppmanar utvecklare att uppgradera Rust version 1.56.1.

Nyheter om den obskyra buggen spreds i en e-postlista idag. Rust-projektet har också flaggat Unicode-problemet med “dubbelriktad åsidosättande” i ett blogginlägg. Men det är en allmän bugg som inte bara påverkar Rust utan all kod som är skriven på populära språk som använder Unicode.

Eftersom det är Unicode påverkar det här felet inte bara Rust utan andra toppspråk, som Java, JavaScript, Python, C-baserade språk och kod skriven på andra moderna språk, enligt säkerhetsforskaren Ross Anderson.

Projekt med öppen källkod som operativsystem förlitar sig ofta på mänsklig granskning av all ny kod för att upptäcka eventuella skadliga bidrag från frivilliga. Men säkerhetsforskarna vid Cambridge University sa att de har upptäckt sätt att manipulera kodningen av källkodsfiler så att mänskliga tittare och kompilatorer ser olika logik.

“Vi har upptäckt sätt att manipulera kodningen av källkodsfiler så att mänskliga tittare och kompilatorer ser olika logik. En särskilt skadlig metod använder Unicode-riktningsöverskridande tecken för att visa kod som ett anagram av dess sanna logik. Vi har verifierat att denna attack fungerar mot C, C++, C#, JavaScript, Java, Rust, Go och Python och misstänker att det kommer att fungera mot de flesta andra moderna språk”, skriver Anderson och beskriver denna bugg och ett liknande “homoglyph”-problem som spåras som CVE-2021 -42694.

“Knepet är att använda Unicode-kontrolltecken för att omordna tokens i källkoden på kodningsnivån. Dessa visuellt omordnade tokens kan användas för att visa logik som, även om den är semantiskt korrekt, avviker från logiken som presenteras av den logiska ordningen av källkodstokens. Kompilatorer och tolkar följer den logiska ordningen av källkoden, inte den visuella ordningen”, sa forskarna. Attacken är att använda kontrolltecken inbäddade i kommentarer och strängar för att ordna om källkodstecken på ett sätt som ändrar dess logik.

Mjukvaruutveckling är internationell och Unicode – en grund för text och emoji – stöder vänster-till-höger-språk, som engelska, och höger-till-vänster-språk, som persiska. Den gör detta genom “dubbelriktad överstyrning”, en osynlig funktion som kallas en kodpunkt som gör det möjligt att bädda in ord från vänster till höger i en mening från höger till vänster och vice versa.

Medan de vanligtvis används för att bädda in ett ord i en mening konstruerad i motsatt riktning, upptäckte Anderson och Microsofts säkerhetsforskare Nicholas Boucher att de kunde användas för att ändra hur källkoden visas i vissa redigerare och kodgranskningsverktyg.

Det betyder att granskad kod kan skilja sig från den kompilerade koden och visar hur organisationer kan hackas genom manipulerad öppen källkod.

“Denna attack är särskilt kraftfull inom ramen för mjukvaruförsörjningskedjor. Om en motståndare framgångsrikt begår riktade sårbarheter i öppen källkod genom att lura mänskliga granskare, kommer nedströms programvara sannolikt att ärva sårbarheten,” varnar forskarna.

Google har upptäckt att attacker i leveranskedjan med öppen källkod har eskalerat under det senaste året.

Rust är inte ett allmänt använt programmeringsspråk, men det har antagits för system (mot applikation) programmering av Google, Facebook, Microsoft, Amazon Web Services (AWS) och mer för dess minnesrelaterade säkerhet garantier.

“Rust 1.56.1 introducerar två nya lints för att upptäcka och avvisa kod som innehåller de påverkade kodpunkterna. Rust 1.0.0 till Rust 1.56.0 inkluderar inte sådana lints, vilket gör din källkod sårbar för denna attack om du utför inte kontroller utanför bandet för närvaron av dessa kodpunkter,” sa Rust-projektet.

Rost-projektet analyserade sina tilläggsprogramvarupaket, kallade “lådor” – det granskade allt som publicerades på crates.io från 17 oktober 2021 – och fastställde att fem lådor har de påverkade kodpunkterna i sin källkod. Den hittade dock inga skadliga kodpunkter.

Utvecklare | Säkerhets-TV | Datahantering | CXO | Datacenter