Come impedire la memcpy, causare l'overflow dell'heap?

3

Sto seguendo la presentazione della lezione di sicurezza Stanford CS155 per imparare l'overflow dei numeri interi. Oggi ho imparato che la funzione memcpy () può portare a overflow. La presentazione dice: Se ho un codice simile al seguente, la seconda funzione memcpy () potrebbe sovraccaricare l'heap .

void  func( char *buf1, *buf2,    unsigned int len1, len2) {
  char temp[256];
  if (len1 + len2 > 256) {return -1}    // length check
  memcpy(temp, buf1, len1); // cat buffers
  memcpy(temp+len1, buf2, len2);
  do-something(temp);   // do stuff
}

Come posso evitare l'overflow? Cosa dovrei modificare in memcpy() in modo che non causi un overflow?

    
posta green 13.03.2016 - 17:02
fonte

1 risposta

2

Il problema è che stai aggiungendo i due numeri interi prima di eseguire il controllo della lunghezza.

if (len1 + len2 > 256) {return -1}    // length check

Se len1 e / o len2 sono sufficientemente grandi, l'aggiunta sarà overflow e il controllo della lunghezza potrebbe passare anche se len1 e / o len2 sono troppo grandi. Per sicurezza, devi controllare due volte:

if ((len1 > 256) || (len2 > 256) ||(len1 + len2 > 256)) {return -1}

Per un esempio, prova a impostare len1 e len2 a UINT_MAX/2+1 . Quindi len1 + len2 sarà (di solito) pari a 0 .

    
risposta data 14.03.2016 - 11:23
fonte

Leggi altre domande sui tag