TuxCare 팀, glibc의 새로운 취약점인 CVE-2021-38604 발견
TuxCare 팀은 새로운 CVE에 대한 심층 분석을 담당합니다. 이 작업은 Linux 생태계에 직간접적으로 영향을 미치는 모든 새로운 CVE에 대해 수행됩니다. 당사가 서비스를 제공하는 배포판이 영향을 받는지 확인합니다. 지원되는 배포판에 영향을 미치는 CVE가 발견되면 팀원들은 소매를 걷어붙이고 코드를 파헤치기 시작합니다.
팀원 중 한 명인 Nikita Popov는 CVE-2021-33574에 대한 이 작업을 수행하던 중 업스트림 glibc에서 문제를 발견했습니다. 라이브러리 내의 특정 코드 경로에서 세그멘테이션 오류가 트리거될 수 있는 상황이 발생할 수 있다는 것이 밝혀졌습니다. 이로 인해 라이브러리를 사용하는 애플리케이션이 충돌하여 서비스 거부 문제가 발생할 수 있습니다.
glibc는 주요 시스템 프리미티브를 제공하며 다른 언어 컴파일러 및 인터프리터를 포함한 대부분의 다른 Linux 애플리케이션과 연결된다는 점을 명심하세요. Kernel 다음으로 시스템에서 두 번째로 중요한 구성 요소입니다.
이 문제는 CVE-2021-33574의 원래 업스트림 수정, 특히 mq_notify.c 파일에서 도입되었습니다:
@@ -133,8 +133,11 @@ helper_thread (void *arg) |
free() 호출은 전달되는 NULL 포인터에 영향을 받지 않지만, pthread_attr_destroy() 는 그렇지 않습니다. Linux Kernel이 data.attr 필드에 복사된 스레드 속성을 전달하는 도중에 NOTIFY_REMOVED 메시지를 사용하는 두 가지 상황을 확인할 수 있었습니다. 안타깝게도 호스트 애플리케이션은 glibc가 기본 속성을 가진 스레드를 생성하도록 하려는 경우 여기에 NULL 값을 전달할 수 있습니다. 이 경우 glibc는 pthread_attr_destroy에서 NULL 포인터를 역참조하여 전체 프로세스의 충돌로 이어질 수 있습니다.
책임 있는 공개 가이드라인에 따라 취약점과 코드 수정 사항을 모두 glibc 담당 팀에 제출했으며, Mitre에 CVE를 요청했습니다(CVE-2021-38604). glibc에서는 버그 28213으로 지정되었습니다. 이 버그는 이미 업스트림 glibc에 통합되었습니다.
이 상황을 포착하고 앞으로 이런 일이 발생하지 않도록 하기 위해 glibc의 자동화된 테스트 스위트에 새로운 테스트도 제출했습니다. 때때로 관련 없는 코드 경로의 변경으로 인해 코드의 다른 곳에서 동작이 변경되지만 프로그래머는 이를 인지하지 못할 수 있습니다. 이 테스트는 이러한 상황을 포착합니다.
맥락을 설명하자면, "mq_" 함수군은 POSIX 호환 메시지 큐 API 기능과 수신 메시지에 대한 비동기 알림을 제공하며 일반적으로 프로세스 간 통신에 사용됩니다.
관련 링크:
https://sourceware.org/git/?p=glibc.git;a=commit;h=42d359350510506b87101cf77202fefcbfc790cb