ISC는 2022년 3월 16일 BIND 9 보안 취약점 4건을 공개했습니다. 포워더(forwarder)를 쓰는 리졸버의 캐시 오염 1건(Medium), keep-response-order 설정 시 TCP 연결 슬롯이 고갈되는 문제 1건(Medium), BIND 9.18.0에서만 named가 비정상 종료되는 문제 2건(High)입니다. 수정 버전은 BIND 9.11.37, 9.16.27, 9.18.1과 지원 프리뷰 에디션(Supported Preview Edition) 9.11.37-S1, 9.16.27-S1입니다. ISC는 4건 모두 실제 악용 사례를 알지 못한다고 밝혔습니다.
한눈에 보기
| 번호 | 내용 | 심각도 | 영향 버전 | 수정 버전 |
|---|---|---|---|---|
| CVE-2021-25220 | 포워더를 사용할 때 위조 NS 레코드가 캐시되어 캐시가 오염될 수 있음 | Medium (CVSS 6.2) | 9.11.0 – 9.11.36 / 9.12.0 – 9.16.26 / 9.17.0 – 9.18.0 / 9.11.4-S1 – 9.11.36-S1 / 9.16.8-S1 – 9.16.26-S1 | 9.11.37 / 9.16.27 / 9.18.1 / 9.11.37-S1 / 9.16.27-S1 |
| CVE-2022-0396 | 조작된 TCP 스트림으로 연결이 CLOSE_WAIT 상태에 무기한 남음 (keep-response-order 사용 시) |
Medium (CVSS 4.9) | 9.16.11 – 9.16.26 / 9.17.0 – 9.18.0 / 9.16.11-S1 – 9.16.26-S1 | 9.16.27 / 9.18.1 / 9.16.27-S1 |
| CVE-2022-0635 | synth-from-dnssec 사용 시 특정 질의가 반복되면 DNAME 처리 중 INSIST 실패로 named 종료 |
High (CVSS 7.0) | 9.18.0 | 9.18.1 |
| CVE-2022-0667 | 포워딩되는 DS 조회가 지연될 때 어서션 실패(assertion failure)로 named 종료 | High (CVSS 7.0) | 9.18.0 | 9.18.1 |
건별 내용
CVE-2021-25220: DNS 포워더 캐시 오염
포워더를 사용하는 경우, 포워더가 주었거나 포워더를 거쳐 들어온 위조 NS 레코드가 캐시에 저장될 수 있습니다. named가 어떤 이유로든 재귀 질의를 해야 할 때 이 레코드를 쓰게 되어, 잘못된 서버에 질의하고 클라이언트에 틀린 응답을 돌려줄 수 있습니다. 취약한 구성의 예로 ISC는 세 가지를 들었습니다. 전역 또는 영역별 포워딩을 forward first(기본값)로 쓰는 리졸버, 전역 포워딩 없이 영역별 포워딩만 쓰는 리졸버(forward first와 forward only 모두 해당), 전역 포워딩을 쓰면서 일부 이름공간에서 포워딩을 끈 리졸버입니다. 권한 전용(authoritative-only) 서버는 영향이 없습니다. 표에 적힌 버전보다 오래된 수명 종료(EOL) 버전도 9.1.0까지 영향이 있을 것으로 보이나, ISC는 이를 시험하지 않았습니다.
CVE-2022-0396: 조작된 TCP 패킷으로 인한 서비스 거부(DoS)
클라이언트가 보낸 조작된 TCP 스트림 때문에 TCP 연결 슬롯이 무기한 점유될 수 있습니다. 클라이언트가 연결을 끊은 뒤에도 연결이 CLOSE_WAIT 상태로 남습니다. 이 문제는 기본값이 아닌 keep-response-order를 켠 서버에서만 생기며, 이 ACL에 지정된 호스트라면 누구나 문제를 일으킬 수 있습니다.
CVE-2022-0635: synth-from-dnssec 사용 시 DNAME 처리 중 INSIST 실패
BIND 9.18.0에서는 RFC 8198의 DNSSEC 검증 캐시 적극 활용(Aggressive Use of DNSSEC-Validated Cache, synth-from-dnssec) 기능이 새로 작성되었고, DNSSEC 검증을 하는 리졸버에서는 기본으로 켜지도록 바뀌었습니다. 이 기능이 켜진 서버에 특정 질의가 반복해서 들어오면 query.c:query_dname에서 INSIST 실패가 일어나 named가 종료됩니다. 영향 대상은 dnssec-validation과 synth-from-dnssec이 모두 켜진 9.18.0 리졸버입니다. 따로 설정하지 않았다면 dnssec-validation auto;가 기본값이고, 이때 synth-from-dnssec도 자동으로 켜집니다.
CVE-2022-0667: 지연된 DS 조회 시 어서션 실패
BIND 9.18.0에서는 재귀 클라이언트 코드가 새로 작성되면서 "백스톱 수명 타이머(backstop lifetime timer)"가 들어갔습니다. 포워딩이 필요한 DS 레코드 요청을 처리하다가 이 타이머가 만료되어 resume_dslookup() 함수가 호출되면, 함수는 fetch가 이미 종료되었는지 확인하지 않습니다. 이 때문에 어서션 실패가 일어나 BIND 프로세스가 종료될 수 있습니다. 9.18 브랜치만 영향을 받습니다.
운영자가 할 일
- 버전 확인: 운영 중인 BIND 버전을 확인하고 위 표의 영향 버전과 비교합니다.
- 업그레이드: 현재 버전과 가장 가까운 수정 버전(9.11.37, 9.16.27, 9.18.1, 또는 9.11.37-S1, 9.16.27-S1)으로 올립니다. 9.18.0은 4건 모두에 해당하므로 9.18.1로 올리는 것이 우선입니다.
- 바로 업그레이드할 수 없을 때 (ISC가 제시한 임시 조치)
- CVE-2021-25220: 해당된다면 포워딩을 모두 없애거나 재귀 가능성을 모두 없애도록 설정을 바꿉니다. 용도에 따라 forward 영역을 다른 영역 유형으로 바꿀 수도 있습니다. 권한 전용 서버는 조치가 필요 없습니다.
- CVE-2022-0396:
keep-response-order를 기본값인keep-response-order { none; };으로 둡니다. 예전 CVE-2019-6477 대응으로 이 옵션을any로 설정했다면 특히 확인해야 합니다. - CVE-2022-0635: named.conf에
synth-from-dnssec no;를 넣으면 피할 수 있습니다. 다만 ISC는 이 기능이 DNSSEC 서명 영역에 대한 의사 난수 서브도메인 공격(pseudo-random-subdomain attack)을 막아 주므로 임시로만 끌 것을 권합니다. - CVE-2022-0667: 알려진 임시 조치가 없습니다. 9.18.1로 올려야 합니다.
원문을 한국어로 번역·요약한 글입니다. 정확한 내용은 원문을 확인해 주세요. AI의 도움을 받아 작성하고 담당자가 검토했습니다.