2016-12-27 13 views
0

私はC言語のコードを持っています。私はどこにTOCTTOUの脆弱性があるのか​​、その理由を知る必要があります。誰かがそれがどこでどのように私はそれを修正することができます知っていますか?TOCTTOUコードの脆弱性

int process(char *filename) 
{ 
    struct stat aux; 
    char buffer[1024]; 

    printf("Input to be appended: "); 
    fgets(buffer, sizeof(buffer), stdin); 

    if((lstat(filename, &aux) == 0) && !S_ISLNK(aux.st_mode)) 
    { 
     printf("[+] Opening\n", filename); 
     int fd = open(filename, O_RDWR | O_APPEND), nb; 
     nb = write(fd, buffer, strlen(buffer)); 
     printf("[+] Done!\n"); 
     return 0; 
    }else 
     printf("[-] ERROR\n", filename); 

    return 1; 
} 


int main(int argc, char * argv[]) 
{ 
    if(argc != 2){ 
     fprintf(stderr, "usage: %s filename\n", argv[0]); 
     exit(1); 
    } 

    return process(argv[1]); 
} 

ありがとう!!

答えて

0

lstat()は、lstat()の後でopen()の前にファイルが削除される可能性があるため、TOCTOUの脆弱性を提供します。代わりにopen()を使用して、戻り値をテストすることは、このための簡単な解決策です。

+0

コードの例を教えてください。ありがとう! :) – user7346822

+0

確かにあなたは冗談を言っています。 user7346822 ;-) –

+0

いいえ、あなたが何を意味するか分かりましたら、私はそれをよりよく理解します。ありがとう – user7346822