Diventa Autore per CoreTech | Scopri di più





Che cos'è l'overflow di Integer

20/03/20 CoreTech Blog

Un overflow di numeri interi è un tipo di errore aritmetico di overflow quando il risultato di un'operazione di numero intero non rientra nello spazio di memoria allocato. Invece di un errore nel programma, di solito causa risultati imprevisti. Gli overflow di numeri interi sono stati elencati come l'errore software numero 8 più pericoloso nell'elenco CWE 2019 più recente, principalmente perché spesso portano a buffer overflow, che attualmente rappresentano l'errore software numero 1 più pericoloso secondo tale elenco.

 Come avvengono gli overflow di numeri interi

 Nella maggior parte dei linguaggi di programmazione, ai valori interi viene solitamente assegnato un certo numero di bit in memoria. Ad esempio, lo spazio riservato per un tipo di dati intero a 32 bit può memorizzare un numero intero senza segno compreso tra 0 e 4.294.967.295 o un numero intero con segno compreso tra -2,147,483,648 e 2,147,483,647. Nel caso di numeri interi con segno, il bit (primo) più significativo di solito indica se il numero intero è un valore positivo o negativo.

Tuttavia, cosa succede quando si esegue il calcolo 4.294.967.295 + 1 e si tenta di memorizzare il risultato che è maggiore del valore massimo per il tipo intero? Dipende completamente dalla lingua e dal compilatore. E, sfortunatamente, la maggior parte delle lingue e la maggior parte dei compilatori non generano alcun errore ed eseguono semplicemente un'operazione modulo, avvolgente o troncata, oppure hanno altri comportamenti indefiniti. Per l'esempio sopra, il risultato è spesso 0.

I risultati possono essere ancora più imprevisti per gli interi con segno. Quando si supera il valore massimo dell'intero con segno, il risultato diventa di solito un numero negativo. Ad esempio, 2.147.483.647 +1 è generalmente −2.147.483.648 . Quando si scende al di sotto del valore minimo (underflow), il risultato diventa di solito un numero positivo. Ad esempio, −2.147.483.648 - 1 è normalmente 2.147.483.647.

Oltre alle operazioni tipiche come addizione, sottrazione o moltiplicazione, possono verificarsi anche overflow di numeri interi a causa della tipografia. Ad esempio, un'operazione può trattare un numero intero come non firmato e un'altra operazione può trattare esattamente lo stesso numero intero come un segno, interpretando quindi il valore in modo errato.

Rischi di overflow di numeri interi

La maggior parte delle condizioni di overflow dei numeri interi porta semplicemente a comportamenti errati del programma ma non causa alcuna vulnerabilità. Tuttavia, in alcuni casi, gli overflow di numeri interi possono avere gravi conseguenze:

  • Se si verifica un overflow di numeri interi quando si calcola la lunghezza di un buffer, è possibile che si verifichi un overflow del buffer. Un overflow del buffer consente all'attaccante di ottenere l'accesso alla shell e tentare un'ulteriore escalation di privilegi .
  • Se durante i calcoli finanziari si verifica un overflow di numeri interi, ad esempio, è possibile che il cliente riceva credito invece di pagare per un acquisto o che un saldo negativo del conto diventi positivo.

Un eccellente esempio di overflow di numeri interi che porta a un overflow del buffer può essere trovato in una versione precedente di OpenSSH (3.3):

nresp = packet_get_int();

if (nresp > 0) {

 response = xmalloc(nresp*sizeof(char*));

 for (i = 0; i < nresp; i++)

  response[i] = packet_get_string(NULL);

Se nresp è 1073741824 e sizeof(char*) è 4 (che è tipico), nresp*sizeof(char*) genera un overflow. Pertanto, xmalloc() riceve e alloca un buffer di 0 byte. Il ciclo successivo provoca un overflow del buffer di heap, che a sua volta può essere utilizzato da un utente malintenzionato per eseguire codice arbitrario.

Il problema maggiore anche con gli overflow di interi più elementari è che sono molto difficili da scoprire e prevenire. Non c'è errore, non c'è avviso, si ottiene semplicemente un risultato errato dell'operazione. L'unico modo per scoprirli è esaminare gli operandi prima dell'operazione o esaminare il risultato dopo (ad esempio, controllando se il risultato di addizione per due numeri positivi è più piccolo degli operandi).

A seconda della lingua, potresti essere in grado di imbatterti in librerie o meccanismi che ti aiutano a prevenire e scoprire overflow di numeri interi. Nel caso del compilatore GCC, ci sono funzioni integrate che verificano la presenza di overflow di numeri interi. Nel caso dei programmi C ++, esiste una libreria chiamata SafeInt che esegue operazioni sicure. Sfortunatamente, imporre l'uso di questa libreria in tutto il codice per tutte le operazioni aritmetiche potrebbe non essere facile.

Se vuoi saperne di più sugli overflow di numeri interi, ti consigliamo di dare un'occhiata al vasto articolo di Phrack di blexim .


Articoli su Acunetix e Hacking

Trovare le vulnerabilità dei siti web prima degli HackerL'importanza della convalida delle correzioni: lezioni da GoogleSDLC agile e sicuro - Best practiceIn che misura le aziende gestiscono la sicurezza delle applicazioni Web?Cross-Origin Resource Sharing (CORS) e intestazione Access-Control-Allow-OriginCosa sono i reindirizzamenti aperti?DevSecOps: come arrivarci da DevOpsIl bigino su SQL Injection per sviluppatoriSfruttare SSTI in ThymeleafSicurezza nginx: come proteggere la configurazione del serverRafforzamento del sistema Web in 5 semplici passaggiCos'è la sicurezza del sito Web - Come proteggere il tuo sito Web dall'hackingRapporto sulle vulnerabilità delle applicazioni Web Acunetix 2020Perché l'elenco delle directory è pericoloso?Cosa sono gli hack di Google?Cosa è l'attacco BEASTWeb Shells in Action - Rilevazione e prevenzione - parte 5Web Shells in Action - parte 4Mantenere le Web Shells sotto copertura - parte 3Introduzione alle web shell - parte 2: 101 Uso di PHPIntroduzione alle web shell - parte 1Debunking 5 miti sulla postura della sicurezza informaticaIniezioni di NoSQL e come evitarleConfigurazione passo passo di Acunetix con JenkinsCosa sono i riferimenti a oggetti diretti non sicuriAnche il più forte cade: un'iniezione SQL in Sophos XG FirewallAcunetix rilascia Business Logic RecorderCome recuperare un sito Web compromessoCome difendersi dagli hacker Black Hat durante la pandemia COVID-19Che cos'è l'inclusione remota dei file (RFI)?Apache Security - 10 consigli per un'installazione sicuraUn nuovo sguardo sugli attacchi correlati al proxy inversoVulnerabilità delle password comuni e come evitarleTutto quello che devi sapere sugli attacchi Man-in-the-MiddleChe cosa sono le iniezioni HTMLRed Teaming – 5 consigli su come farlo in modo sicuroTesta le tue competenze XSS utilizzando siti vulnerabiliPerché hacker malintenzionati hanno messo gli occhi sugli ospedaliPratiche di codifica sicura – I tre principi chiaveLa maledizione delle vecchie librerie JavaMutation XSS nella ricerca GoogleIgnorare SOP utilizzando la cache del browserCome e perché evitare reindirizzamenti e inoltri non convalidati?Dirottamento di sessione e altri attacchi di sessioneCome abbiamo trovato un altro XSS in Google con AcunetixChe cos'è un buffer overflowChe cos'è l'overflow di IntegerChe cos'è HSTS e perché dovrei usarlo?Che cosa è OS Command InjectionVulnerabilità delle entità esterne XML in Internet ExplorerCoreTech assicura protezione dei siti Web con AcunetixCoreTech distributore Acunetix a fianco dei partner per la CyberSecurityCyberSecurity applicativa, nuova opportunità per voi!