TuxCare 팀에서 식별한 iconv의 취약점(CVE-2021-43396)
Iconv는 서로 다른 문자 인코딩 간에 변환하는 데 사용되는 라이브러리로, glibc (GNU C 라이브러리)라는 기본 수준의 작업을 수행하는 데 사용되는 도구 및 라이브러리의 핵심 그룹에 속합니다. 유서 깊은 glibc 문서에 따르면 150개의 서로 다른 문자 세트 간에 문자를 변환할 수 있습니다.
종료일이 지난 구형 Linux 배포판에 대한 패치를 생성하거나 백포트하는 TuxCare의 ELS(Lifecycle 연장 지원) 서비스에 대한 정기 작업 중에 팀은 iconv 내부의 코드 경로에서 이전에 알려지지 않은 취약점을 발견했습니다. 물론 버그를 찾는 것은 작업의 절반에 불과하기 때문에 수정 사항도 개발하여 업스트림에 제출했습니다.
ELS가 적용되는 시스템용 패치는 이미 배포할 수 있습니다.
실제 취약점은 특정 변환이 트리거될 때 발생합니다. 즉, ISO-2022-JP-3에서 변환할 경우 가짜 NUL 문자가 발생할 수 있습니다. 이는 활성 문자 집합을 전환하는 이스케이프 시퀀스를 전달함으로써 간단하게 트리거될 수 있습니다. 사용 사례에 따라 호출자 애플리케이션이 수신한 추가 NUL 문자는 데이터 손상 또는 일관되지 않은 동작을 유발할 수 있습니다.
이 버그는 버그픽스 27256의 일부로 도입되었습니다:
data->__statep->__count != ASCII_set |
버그 수정으로 추가된 '�'는 NUL 문자 '�'가 대기열에 있는 것처럼 동작하여 출력에서 해당 문자를 출력하도록 진행합니다.
이 버그를 발견한 팀원인 니키타 포포프는 현재 이 버그가 악용될 수 있다고 생각하느냐는 질문에 "이 사례는 glibc의 특수한 사용 패턴으로 인해 발생할 수 있다"고 답했습니다. 이는 이전 버그와 다소 유사하며, 라이브러리의 특성상 공유 라이브러리는 호스트 애플리케이션이 특정 시퀀스에서 불행한 라이브러리 호출 집합을 사용할 만큼 운이 나쁘면 취약합니다."라고 설명했습니다.
이 취약점은 몇 주 전 glibc에서 발견된 취약점에 이어 같은 팀원이 업스트림 프로젝트에 기여한 또 다른 취약점이며, 같은 팀원이 발견한 또 다른 취약점입니다.
책임감 있는 취약점 공개에 대한 업계 모범 사례에 따라 업스트림 개발자에게 통지했습니다. 또한 근본적인 문제를 해결하기 위한 패치도 해당 프로젝트 리포지토리에 제출되었습니다. 잠재적으로 데이터 무결성 문제를 일으킬 수 있는 이 문제에 내포된 보안 영향 때문에 CVE가 요청되어 CVE-2021-43396이 할당되었습니다. CVE 항목의 존재로 인해 널리 퍼져 있는 Linux 배포판에 수정 버전이 신속하게 반영될 것입니다.
Red Hat은 이미 RHEL 6~8에 미치는 영향을 평가하면서 CVSS v3 기본 점수 7.5를 부여했습니다. NIST에서도 7.5점을 부여했는데, 이는 해당 취약점의 위험도/영향이 높다는 것을 의미합니다. 패치 작업을 위한 취약점 우선 순위 지정은 향후 유지 보수 기간을 준비할 때 이 정보를 고려해야 합니다.
점점 더 많은 연구자와 개발자가 오픈 소스 코드를 검토하면서 취약점 발견 건수가 증가하고 있는 것은 눈에 보이는 현상입니다. 취약점이 많을수록 IT 팀의 업무가 늘어나는 경향이 있지만, 이러한 문제가 실제로 악용되기 전에 발견하는 것이 최선의 결과라는 긍정적인 측면도 있습니다.
TuxCare 팀은 오픈 소스 및 업스트림 프로젝트에 대한 강력한 의지를 바탕으로 기존 및 신규 Linux 배포판의 보안을 유지하기 위한 작업을 계속할 것입니다.
TuxCare, Lifecycle 연장 지원 서비스 또는 Linux 지원 서비스에 대해 자세히 알고 싶으시면 여기에서 자세한 내용을 확인하세요.
[업데이트 11/11 - 투명성을 위해 CVE의 상태에 대해 이의를 제기하고 있습니다. 버그가 확인되었고 수정으로 문제가 해결되었지만, 이를 악용하는 데 필요한 공격 벡터가 애플리케이션에 따라 달라지는 것으로 언급되고 있습니다(아이콘v를 호출하는 애플리케이션이 특정 순서로 값을 전달해야 함). 이에 대한 자세한 내용은 https://nvd.nist.gov/vuln/detail/CVE-2021-43396 의 CVE 설명에서 확인할 수 있습니다. 이것은 오픈 소스 생태계에서 작동하는 버그 제출 관련 검토 프로세스의 한 예입니다. 이 게시물은 추가 개발 사항이 발생하면 업데이트될 예정입니다.]