Als u de Rust-programmeertaal — of JavaScript, Java, Go of Python — in een project gebruikt, wilt u misschien controleren op mogelijke verschillen tussen beoordeelde code en de gecompileerde code die is uitvoer.
De Rust Security Response-werkgroep (WG) heeft een vreemd beveiligingslek gesignaleerd dat wordt gevolgd als CVE-2021-42574 en dringt er bij ontwikkelaars op aan Rust-versie 1.56.1 te upgraden.
Het nieuws over de obscure bug werd vandaag verspreid in een mailinglijst. Het Rust-project heeft ook het Unicode-probleem met “bidirectionele override” gemarkeerd in een blogpost. Maar het is een algemene bug die niet alleen van invloed is op Rust, maar op alle code die is geschreven in populaire talen die Unicode gebruiken.
Omdat het Unicode is, treft deze bug niet alleen Rust, maar ook andere toptalen, zoals Java, JavaScript, Python, op C gebaseerde talen en code geschreven in andere moderne talen, volgens beveiligingsonderzoeker Ross Anderson.
Open-sourceprojecten zoals besturingssystemen zijn vaak afhankelijk van menselijke beoordeling van alle nieuwe code om potentieel kwaadaardige bijdragen van vrijwilligers te detecteren. Maar de beveiligingsonderzoekers van Cambridge University zeiden dat ze manieren hebben ontdekt om de codering van broncodebestanden te manipuleren, zodat menselijke kijkers en compilers verschillende logica zien.
“We hebben manieren ontdekt om de codering van broncodebestanden te manipuleren, zodat menselijke kijkers en compilers verschillende logica zien. Een bijzonder schadelijke methode maakt gebruik van Unicode-richtingskarakters om code weer te geven als een anagram van zijn ware logica. We hebben geverifieerd dat deze aanval werkt tegen C, C++, C#, JavaScript, Java, Rust, Go en Python, en vermoedt dat het ook tegen de meeste andere moderne talen zal werken”, schrijft Anderson, die deze bug en een soortgelijk “homoglyph”-probleem beschrijft, bijgehouden als CVE-2021 -42694.
“De truc is om Unicode-besturingstekens te gebruiken om tokens in broncode opnieuw te ordenen op coderingsniveau. Deze visueel opnieuw geordende tokens kunnen worden gebruikt om logica weer te geven die, hoewel semantisch correct, afwijkt van de logica die wordt gepresenteerd door de logische volgorde van broncodetokens. Compilers en tolken houden zich aan de logische volgorde van de broncode, niet de visuele volgorde”, aldus de onderzoekers. De aanval is om besturingstekens te gebruiken die zijn ingesloten in opmerkingen en tekenreeksen om de broncodetekens opnieuw te ordenen op een manier die de logica verandert.
Softwareontwikkeling is internationaal en Unicode – een basis voor tekst en emoji – ondersteunt talen van links naar rechts, zoals Engels, en talen van rechts naar links, zoals Perzisch. Het doet dit door middel van “bidirectionele opheffing”, een onzichtbare functie, een codepunt genaamd, waarmee woorden van links naar rechts in een zin van rechts naar links kunnen worden ingesloten en vice versa.
Hoewel ze normaal gesproken worden gebruikt om een woord in te sluiten in een zin die in de omgekeerde richting is opgebouwd, ontdekten Anderson en Microsoft-beveiligingsonderzoeker Nicholas Boucher dat ze kunnen worden gebruikt om de manier waarop broncode wordt weergegeven in bepaalde editors en hulpprogramma's voor het beoordelen van codes te veranderen.
Het betekent dat beoordeelde code anders kan zijn dan de gecompileerde code en laat zien hoe organisaties kunnen worden gehackt door middel van geknoeide open-sourcecode.
“Deze aanval is bijzonder krachtig binnen de context van softwaretoeleveringsketens. Als een tegenstander met succes gerichte kwetsbaarheden in open source-code begaat door menselijke recensenten te misleiden, zal downstreamsoftware de kwetsbaarheid waarschijnlijk overnemen”, waarschuwen de onderzoekers.
Google heeft geconstateerd dat aanvallen op de toeleveringsketen van open-source software het afgelopen jaar zijn geëscaleerd.
Rust is geen veelgebruikte programmeertaal, maar het is door Google, Facebook, Microsoft, Amazon Web Services (AWS) en meer gebruikt voor systeemprogrammering (versus applicatieprogrammering) vanwege de geheugengerelateerde veiligheid garanties.
“Rust 1.56.1 introduceert twee nieuwe lints voor het detecteren en weigeren van code die de getroffen codepunten bevat. Rust 1.0.0 tot en met Rust 1.56.0 bevatten dergelijke lints niet, waardoor uw broncode kwetsbaar blijft voor deze aanval als je voert geen out-of-band-controles uit op de aanwezigheid van die codepunten”, aldus het Rust-project.
Het Rust-project analyseerde zijn add-on-softwarepakketten, genaamd “crates” – het beoordeelde alles wat vanaf 17 oktober 2021 op krats.io was gepubliceerd – en stelde vast dat vijf kratten de getroffen codepunten in hun broncode hebben. Het heeft echter geen kwaadaardige codepunten gevonden.
Ontwikkelaar | Beveiliging TV | Gegevensbeheer | CXO | Datacenters