Trojan Source

En ny metod har upptäckts för att gömma bakdörrar i källkod, denna nya metod har fått namnet Trojan Source. Sårbarheten har fått CVE-2021-42574 och går kort och gott ut på att använda speciella unicode-tecken som kastar om den logiska ordningen i källkoden. Dvs tittar du på koden med en editor så ser det ok ut men när du kompilerar koden så gör den något annat. En perfekt metod således att använda vid supply-chain attacker.

Följande animation visar ett kort demo på hur logiken kan kastas om om unicode bidirectional control characters används:

Redan nu har

Therefore, by placing Bidi override characters exclusively within comments and strings, we can smuggle them into source code in a manner that most compilers will accept. Our key insight is that we can reorder source code characters in such a way that the resulting display order also represents syntactically valid source code.

Forskningen är ett resultat från Nicholas Boucher och vid University of Cambridge. Och redan nu har programspråket Rust släppt en uppdatering till kompilatorn rustc som nu kommer att klaga om följande unicode-tecken återfinnes: U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069.

Här kan du ladda hem whitepapret:

Uppdatering: För PoC till olika programspråk, se detta repo på Github.

Uppdatering 2: Github har nu lagt in en varning. Så här ser det ut när du tittar på en fil som innehåller ovan nämnda unicode-tecken:

Uppdatering 3: Förutom CVE-2021-42574 (BiDi attacken) så glömde jag att ange CVE-2021-42694 (för homoglyph attacken).

Uppdatering 4: Attacken är inte speciellt ny och har beskrivits ett antal gånger tidigare. Bl.a. inom Go-projektet här.

Jonas Lejon

Om Jonas Lejon

En av sveriges främsta experter inom cybersäkerhet. Kontakta mig gärna på telefonnummer 010 1889848 eller [email protected] om Er organisation behöver hjälp med cybersäkerhet. LinkedIn Twitter

Skriv en kommentar

Du kan använda följande HTML HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>