Vilkårlig kodeudførelse er en fejl i et softwaresystem, når en ondsindet bruger ( hacker ) kan tvinge den til at udføre en hvilken som helst maskinkode, de ønsker. Hvis en maskine kan fås til at udføre vilkårlig kode over et netværk, kaldes dette nogle gange fjernudførelse af kode . Dette er den farligste softwaresårbarhed - ondsindet kode introduceres gennem tilsyneladende harmløse handlinger (for eksempel download af en datafil), og kan gøre alt inden for programmets privilegier: udtrække information fra programmets hukommelse, sende det over netværket, læse , skriv og rediger filer ...
En lignende sårbarhed for nettet kaldes cross-site scripting - men da JavaScript i sig selv er begrænset i sine muligheder, så er skaden fra det normalt mindre, primært datalæk. En lignende sårbarhed for SQL kaldes SQL-injektion , og den er fyldt med alt, hvad SQL kan gøre - lækager, substitutioner og tab af data.
De vigtigste årsager til at udføre vilkårlig kode er:
Hukommelseskorruption Eksempel: bufferoverløb overskriver returmarkøren (i x86 vokser stakken ned, og markøren er efter stakrammen ). Så snart programmet skal afslutte subrutinen, henter processoren denne adresse fra stakken og hopper dertil - til hackersubrutinen. Automatisk serialisering + over-tillid Ofte er der i et program eller systembiblioteker sårbare klasser, der udfører kode ved en fejltagelse, eller system, der virkelig er i stand til at udføre hvad som helst. På nogle sprog ( Java ) er det sædvanligt at sende komplekse objektstrukturer gennem standard serialisering - og hvis en angriber sender en kommando for at oprette et sådant objekt, vil det være muligt at udføre vilkårlig kode. WebSphere og Jenkins [1] havde en lignende sårbarhed . Tilfældig kodeudførelse i operationer på EXE og DLL, der ikke indebærer denne udførelse To eksempler: 1. I Windows indlæses et ikon fra en DLL gennem en funktion LoadLibrary, der blandt andet udfører DLL-initialiseringskoden - således er det nok at gennemse mappen med den "forgiftede" DLL i Stifinder for at udføre den ondsindet kode. Løst via et ekstra flag LOAD_LIBRARY_AS_DATAFILE, ikke eksekverende kode. 2. I Unix-lignende operativsystemer er programmet ldd, der kontrollerer programmets afhængigheder, et simpelt script, der udfører en ELF-fil med bestemte systemindstillinger [2] . Ikke løst - bare lad være med at køre ldd på uverificerede filer.