[하루한줄] ISC BIND 서버의 정보 유출 취약점

URL

ZDI-21-502: AN INFORMATION DISCLOSURE BUG IN ISC BIND SERVER

Target

  • BIND 9.11.31, 9.16.15 이전

Explain

ISC사의 DNS 서버 소프트웨어인 BIND에서 발견된 정보 유출 취약점의 세부 정보가 공개되었습니다.

der_match_tag_and_length() 함수는 태그를 매칭하고 네트워크 패킷에서 길이와 같은 필드를 파싱하는 함수로, 취약점이 발생하는 코드는 아래와 같습니다.

static int der_match_tag_and_length(const unsigned char *p, size_t len, Der_class xclass, 
					                Der_type type, int tag, size_t *length_ret,  size_t *size) 
{ 
    size_t l, ret = 0; 
    int e; 
 
    e = der_match_tag(p, len, xclass, type, tag, &l); 
    if (e) { 
        return (e); 
    } 
    p += l; 
    len -= l; 
    ret += l; 
    e = der_get_length(p, len, length_ret, &l);  // (1) 
    if (e) { 
        return (e); 
    } 
...
}

해당 함수에서 호출하는 der_get_length() 함수의 인자 중 length_ret은 호출자에서 값에 대한 검증이 이뤄져야 하지만 해당 함수에서는 검증을 하지 않고 반환합니다. der_match_tag_and_length() 함수에서 반환된 검증되지 않은 길이 값은 이후 negTokenInit을 디코딩하는 decode_NegTokenInit() 함수 내의 여러 검사에 사용되어 OOB Access로 이어질 수 있습니다.