L'inserimento del codice è possibile in qualsiasi lingua compilata o interpretata?

0

Mi chiedo se sia possibile fare un'iniezione di codice in lingue compilate o interpretate? C'è qualche tipo di vettore di attacco in quest'area?

Whit "code injection" Voglio dire fornire uno snippet di codice come input che verrà eseguito insieme al codice del programma, simile all'iniezione SQL.

    
posta Sig Touri 15.12.2016 - 13:34
fonte

4 risposte

5

Sì, questa è una cosa reale. Ma proprio come con SQLi non puoi semplicemente sfruttare alcun programma, ma uno scarsamente scritto con servizi igienici inadeguati potrebbe essere vulnerabile.

Diamo prima un'occhiata alle lingue interpretate. Perché l'injection di codice sia possibile qui devi avere qualcosa che prende il codice in una stringa e lo esegue.

In JavaScript hai la funzione eval() che fa quello. Quindi se fai eval(untrustedData) hai te stesso una vulnerabilità. Per questo motivo eval() è considerato "malvagio" e spesso qui la raccomandazione di non usarlo affatto. Esistono anche altri casi in subclasso che consentono l'esecuzione di codice da una stringa, come new Function() e setInterval() .

In PHP hai anche una funzione eval() , ritenuta così pericolosa che il manuale include un Attenzione:

Caution: The eval() language construct is very dangerous because it allows execution of arbitrary PHP code. Its use thus is discouraged. If you have carefully verified that there is no other option than to use this construct, pay special attention not to pass any user provided data into it without properly validating it beforehand.

Che ne dici delle lingue compilate? Sono meno vulnerabili perché non hanno funzioni che eseguono codice arbitrario, dal momento che quel codice dovrebbe essere compilato per primo. Ovviamente è possibile scrivere un programma che genera codice sorgente (da dati non attendibili), lo compila e lo esegue. Ma sarebbe una cosa piuttosto strana da fare.

Potresti argomentare, come fa iain , che lo sfruttamento dei buffer overflow è una forma di iniezione di codice, dal momento che stanno iniettando il codice macchina nel programma. Immagino che si riduca alla semantica se lo conti o meno.

    
risposta data 15.12.2016 - 14:11
fonte
2

C'è un altro esempio di un tipo di iniezione di codice molto sofisticato ed estremamente sottile: la vasta area di Java Deserialization Vulnerabilities. Ogni volta che deserializzi oggetti Java serializzati non attendibili nel tuo codice, rischi di eseguire il codice della scelta di un aggressore. Molti motori J2EE sono vulnerabili. Se non è possibile arrestare il servizio che accetta oggetti serializzati come input, potrebbe essere molto difficile correggere la vulnerabilità.

Alcuni collegamenti:

risposta data 16.12.2016 - 14:01
fonte
0

L'iniezione di codice è fondamentalmente un problema di filtraggio degli input. Se si esegue codice basato su un'origine dipendente dall'utente e non si verifica la validità dell'input, si è vulnerabili all'iniezione di codice, indipendentemente dal tipo di linguaggio utilizzato.

    
risposta data 15.12.2016 - 13:57
fonte
0

Gli overflow del buffer possono essere considerati come un vettore di attacco in quest'area, possono portare all'esecuzione di codice arbitrario. Vedi questo post su Stack Overflow: Overflow del buffer

    
risposta data 15.12.2016 - 13:55
fonte

Leggi altre domande sui tag