RHSB-2021-006 커널 및 systemd의 마운트 지점에 있는 긴 경로 이름에서의 보안 취약점 (CVE-2021-33909, CVE-2021-33910)
갱신됨
요약
Red Hat은 긴 경로 이름을 잘못 처리하여 발생하는 두 가지 취약점에 대해 인지하고 있습니다. 첫 번째 취약점은 Linux 커널에서 발견된 것으로 이를 통해 로컬 공격자가 권한을 상승시킬 수 있으며 이러한 취약점은 CVE-2021-33909으로 지정되어 있습니다. 두 번째 취약점은 로컬 공격자가 systemd와 전체 시스템을 충돌시킬 수 있는 systemd에서 발견되며 CVE-2021-33910으로 지정되어 있습니다.
이러한 두 가지 취약점의 심각도 영향 등급은 중요입니다.
CVE-2021-33909의 직접적인 영향을 받는 Red Hat 제품 버전은 다음과 같습니다.
Red Hat Enterprise Linux 8
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 6
CVE-2021-33910의 직접적인 영향을 받는 Red Hat 제품 버전은 다음과 같습니다.
Red Hat Enterprise Linux 8
Red Hat Enterprise Linux (RHEL CoreOS 포함)에서 지원되는 모든 Red Hat 제품도 잠재적으로 영향을 받을 수 있습니다. 여기에는 다음이 포함됩니다.
RHEL 또는 UBI 컨테이너 이미지를 기반으로 하는 제품 컨테이너. 기본 이미지는 이러한 취약점에 대한 수정 사항을 포함하도록 업데이트됩니다. 컨테이너가 최신 상태인지 확인하십시오. Red Hat Container Catalog의 일부인 Container Health Index를 사용하여 Red Hat 컨테이터의 보안 상태를 확인할 수 있습니다.
RHEL 채널에서 패키지를 가져오는 제품. (OpenShift Container Platform, OpenStack, Red Hat Virtualization 등과 같은 제품 포함) 이러한 제품 환경에서 기본 RHEL 커널 및 systemd 패키지가 최신 버전인지 확인하십시오.
현재 사용 중인 시스템에 보안 취약점이 있는지 확인하려면 아래의 진단 섹션을 참조하십시오.
기술 요약
이 두 가지 취약점은 모두 경로가 긴 파일이 올바르게 처리되지 않을 때 발생하는 문제를 악용합니다.
첫 번째 취약점(CVE-2021-33909)은 Linux 커널을 공격하는 데 악용될 수 있습니다. 권한이 없는 로컬 공격자는 총 경로 길이가 1GB를 초과하는 딥 디렉터리 구조를 생성, 마운트 및 삭제하여 이 취약점을 악용할 수 있습니다. 공격이 성공하면 권한 상승이 발생합니다.
두 번째 취약점(CVE-2021-33910)은 systemd(시스템 및 서비스 관리자)를 공격하는 데 악용될 수 있으며 로컬 공격자가 경로가 긴 파일 시스템을 마운트할 수 있어야 합니다. 이 공격으로 인해 systemd, systemd가 관리하는 서비스 및 전체 시스템이 충돌하고 응답을 중지하게 됩니다.
완화 방법
Red Hat은 이 문제에 대해 완화 가능한 솔루션이 있는지 조사했지만 아직 실질적인 솔루션을 찾지 못했습니다. 영향을 받는 패키지를 가능한 한 빨리 업데이트하십시오.
기술적 세부 사항
다음과 같은 두 가지 취약점이 연구원으로 부터 보고되었습니다. 다음은 각 취약점에 대한 간략한 설명과 그에 따른 영향에 대해 나열되어 있습니다.
CVE-2021-33909
파일 시스템 계층에 있는 Linux 커널의 seq_file에서 아웃 오브 바운드(out-of-bound) 쓰기 보안 취약점이 발견되었습니다. 이러한 취약점을 통해 사용자 권한을 가진 로컬 공격자가 아웃 오브 바운드 메모리에 액세스하여 시스템이 손상되거나 내부 커널 정보를 누출시킬 수 있습니다. 이 문제는 작업을 수행하기 전에 size_t-to-int 변환의 유효성을 검사하지 않기 때문에 발생하는 것입니다.
이 취약점은 Linux 커널의 파일 시스템 계층에 있는 유형 변환 취약점입니다. 유형 변환 취약점은 두 유형 간에 변환하는 경우 발생하며 오버플로로 이어져 큰 음수 값을 생성할 수 있습니다.
이 취약점을 악용하려면 공격자가 다음을 수행할 수 있어야 합니다.
긴 경로 만들기
해당 위치에 파일 시스템 마운트
마운트 지점 삭제
/proc/<pid>/mountinfo 파일 읽기
이 문제가 트리거되어 결과적으로 제어 가능한 오프셋에서 커널 메모리를 덮어쓸 수 있습니다.
mountinfo 파일은 커널이 일련의 레코드를 표시하는데 사용되는 가상 파일인 seq_file의 예입니다. 각 레코드는 seq_file 버퍼에 맞아야 하며 버퍼 크기는 size_t(64비트 부호 없는 값)를 사용하여 추적됩니다. show_mountinfo 함수에서 매우 긴 마운트 지점 경로가 사용되는 경우 문제가 발생합니다.
이 프로세스는 아래와 같이 버퍼 길이(32비트 부호 있는 값)로 int 값이 필요합니다.
show_mountinfo() -> seq_dentry() -> dentry_path((.. , .. , int buflen)
"buflen"은 size_t-to-int 변환 문제를 일으켜 숫자를 음수 값으로 변환하고 결과적으로 아웃 오브 바운드 액세스 보안 문제를 일으킬 수 있습니다.
마운트 지점이 아직 사용 중이지만 경로가 삭제된 경우 잘못 계산된 값이 오프셋으로 사용되어 할당된 버퍼 외부에 "//deleted" 문자열이 기록됩니다. 값이 음수이므로 예상 버퍼 위치보다 2GB에서 10바이트 사이에 기록됩니다.
특정 메모리 위치의 경우 이 오프셋 위치를 사용하여 기록하면 서비스 거부, 시스템 중단, 메모리 손상 또는 권한 상승 문제가 발생할 수 있습니다.
CVE-2021-33910
systemd에서 취약점이 발견되었습니다. unit_name_path_escape 함수에서 제어되지 않는 크기의 alloca 함수를 사용하면 로컬 공격자가 매우 긴 경로에 파일 시스템을 마운트할 수 있어 스택에 매우 큰 공간을 할당하고 systemd 및 전체 시스템을 충돌시킬 수 있습니다.
이것은 systemd에서 공격자가 제어하는 alloca()이며, 이를 통해 로컬 공격자가 systemd 서비스(PID 1)와 전체 시스템을 충돌시킬 수 있습니다. Alloca()는 스택에서 프로그램이 필요로 하는 공간을 할당하는 데 사용됩니다. 요청된 크기가 사용자에 의해 제어되거나 너무 큰 경우에는 사용하지 않아야 합니다. 그렇지 않으면 프로그램이 할당된 스택 공간 외부에 쓰기 작업을 수행하여 시스템이 충돌할 수 있습니다.
Systemd는 마운트된 파일 시스템에 대한 세부 정보를 얻기 위해 /proc/self/mountinfo 파일을 지속적으로 모니터링하고 alloca()를 사용하여 마운트 지점 문자열을 내부적으로 복제합니다. 공격자가 매우 긴 경로에 파일 시스템을 마운트할 수 있는 경우(예: FUSE 사용) 이 문제를 트리거하여 시스템을 손상시킬 수 있습니다.
이 문제는 Red Hat Enterprise Linux 7과 함께 제공되는 systemd 버전에는 영향을 미치지 않았습니다. 이 버전은 alloca()를 사용하는 strdupa()를 사용하지 않고 unit_name_path_escape() 함수에서 문자열을 복제하기 위해 힙 영역을 할당하는 strdup()을 사용하기 때문입니다.
CVE의 영향을 받는 Red Hat 제품
CVE-2021-33909 (kernel) 중요 | CVE-2021-33910 (systemd) 중요 | |
Red Hat Enterprise Linux 8 | 영향을 받음 - 모든 활성 스트림에 수정 사항이 제공됩니다. | 영향을 받음 - 모든 활성 스트림에 수정 사항이 제공됩니다. |
Red Hat Enterprise Linux 7 | 영향을 받음 - 모든 활성 스트림에 수정 사항이 제공됩니다. | 영향을 받지 않음 |
Red Hat Enterprise Linux 6 | 영향을 받음 - 모든 활성 스트림에 수정 사항이 제공됩니다. | 영향을 받지 않음 |
영향을 받는 제품의 업데이트
영향을 받는 Red Hat 제품 버전을 실행 중인 모든 Red Hat 고객은 에라타를 사용할 수 있는 즉시 해당 제품을 업데이트할 것을 권장합니다. 사용 가능한 업데이트를 즉시 적용하고 필요에 따라 완화 조치를 활성화하십시오.
제품 | 구성 요소 | 권고/업데이트 [1] |
Red Hat Enterprise Linux 8 | kernel | |
kernel-rt | ||
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 8.2.0 Extended Update Support [2] | kernel | |
kernel-rt | ||
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 8.1.0 Extended Update Support [2] | kernel | |
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 7 | kernel | |
kernel-rt | ||
kpatch | ||
Red Hat Enterprise Linux 7.7 Extended Update Support [2] | kernel | |
kpatch | ||
Red Hat Enterprise Linux 7.6 Extended Update Support [2] | kernel | |
kpatch | ||
Red Hat Enterprise Linux 7.4 Update Services for SAP Solutions, Advanced Update Support [3],[4] | kernel | |
Red Hat Enterprise Linux 7.3 Advanced Update Support [4] | kernel | |
Red Hat Enterprise Linux 7.2 Advanced Update Support [4] | kernel | |
Red Hat Enterprise Linux 6 Extended Life-cycle Support [5] | kernel | |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 8 | redhat-virtualization-host | RHSA-2021:2736 |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 7 | redhat-virtualization-host |
[1] 업데이트가 릴리스된 후 권고/업데이트 링크가 추가됩니다.
[2] Red Hat Enterprise Linux Extended Update Support (EUS)서브스크립션이란 무엇입니까?
[3] Advanced mission critical Update Support (AUS)이란 무엇입니까?
[4] Red Hat Enterprise Linux SAP Solutions 서브스크립션이란 무엇입니까?
[5] 이 패치에 액세스하려면 활성 ELS (Extended Life-cycle Support) 서브스크립션이 필요합니다. 해당 계정에 활성 ELS 서브스크립션이 없는 경우 Red Hat 영업 부서 또는 영업 담당자에게 문의하십시오.
진단
진단 스크립트를 사용하여 현재 사용 중인 시스템에 보안 취약점이 있는지 확인합니다. 정규 스크립트임을 확인하려면 GPG 분리 서명을 다운로드합니다. GPG 서명을 확인하는 방법은 고객 포털에서 확인할 수 있습니다.
감사 인사
Red Hat은 이러한 취약점을 보고해 준 Qualys Research Team에 감사드립니다.
참고 자료
https://access.redhat.com/security/cve/cve-2021-33909
https://access.redhat.com/security/cve/cve-2021-33910
https://www.qualys.com/2021/07/20/cve-2021-33909/sequoia-local-privilege-escalation-linux.txt
https://www.qualys.com/2021/07/20/cve-2021-33910/denial-of-service-systemd.txt
How to use GPG to verify signed content from Product Security
Comments