La injecció de codi és l'explotació d'un error informàtic causat pel processament de dades no vàlides. La injecció és utilitzada per un atacant per introduir (o "injectar") codi en un programa informàtic vulnerable i canviar el curs d'execució. El resultat d'una injecció de codi amb èxit pot ser desastrós, per exemple, si permet que es propaguin virus informàtics o cucs informàtics.
Les vulnerabilitats d'injecció de codi es produeixen quan una aplicació envia dades no fiables a un intèrpret. Els errors d'injecció es troben amb més freqüència a les consultes SQL, LDAP, XPath, NoSQL, ordres del sistema operatiu, analitzadors XML, capçaleres SMTP, arguments del programa, etc. Els errors d'injecció solen ser més fàcils de descobrir quan s'examinen el codi font que mitjançant les proves.[1] Els escàners i els fuzzers poden ajudar a trobar defectes d'injecció.[2]
La injecció pot provocar la pèrdua o la corrupció de dades, la manca de responsabilitat o la denegació d'accés. La injecció de vegades pot conduir a la presa de possessió completa de l'amfitrió.
Alguns tipus d'injecció de codi són errors d'interpretació, donant un significat especial a l'entrada de l'usuari. Existeixen errors d'interpretació similars fora del món de la informàtica, com ara la rutina de comèdia Who's on First?. A la rutina, no es pot distingir els noms propis de les paraules normals. De la mateixa manera, en alguns tipus d'injecció de codi, hi ha un error per distingir l'entrada de l'usuari de les ordres del sistema.
Les tècniques d'injecció de codi són populars en la pirateria o cracking del sistema per obtenir informació, l'escalada de privilegis o l'accés no autoritzat a un sistema. La injecció de codi es pot utilitzar de manera malèvola per a molts propòsits, com ara:
El 2008, el 5,66% de totes les vulnerabilitats notificades aquell any es van classificar com a injecció de codi, l'any més alt registrat. El 2015, aquest s'havia reduït fins al 0,77%.[3]
La injecció de codi es pot utilitzar amb bones intencions; per exemple, canviar o ajustar el comportament d'un programa o sistema mitjançant la injecció de codi pot provocar que el sistema es comporti d'una manera determinada sense cap intenció maliciosa.[4][5] La injecció de codi podria, per exemple:
És possible que alguns usuaris realitzin una injecció de codi sense sospitar perquè els qui van desenvolupar originalment el sistema no van tenir en compte les entrades que proporcionen a un programa. Per exemple:
Un altre ús benigne de la injecció de codi podria ser el descobriment dels mateixos defectes d'injecció, amb la intenció de solucionar-los. Això es coneix com a prova de penetració del barret blanc.