메인 콘텐츠로 건너뛰기
블로그 안전 Linode 시큐리티 다이제스트 1월 30일 ~ 2022년 2월 6일

Linode Security Digest - 2022년 1월 30일~2월 6일

리노드 시큐리티 다이제스트

이번 주에는 공격자가 시스템에 로컬로 액세스할 수 있는 경우 권한을 에스컬레이션할 수 있는 세 가지 심각도 취약점에 대해 설명합니다.

리눅스 커널 eBPF – 부적절한 입력 유효성 검사 취약점

CVE-2022-23222 는 커널의 eBPF 프로그램 처리에서 비롯된 취약점을 설명합니다. BPF를 실행할 수 있는 공격자는 커널컨텍스트에서 시스템을 충돌하거나 임의의 코드를 실행할 수 있습니다.

근본 원인BPF 검증자는 여러 *_OR_NULL 포인터 유형을 제대로 제한하지 않으므로 이러한 유형이 포인터 산술을 수행할 수 있습니다. 이 것을 활용하여 임의의 코드를 실행하거나 시스템을 충돌할 수 있습니다. 

중요 사항: 대부분의 배포판에서 기본적으로 권한이 없는 BPF 가 비활성화됩니다. 버그는 커널 버전 5.8.0에 도입되었고 커널 버전 5.14.17에 패치되었습니다. CVE-2022-23222가 심각한 위험을 초래하는 또 다른 이유입니다.

Linux 배포판에서 제공하는 최신 커널을 최신 상태로 유지하는 것은 이 취약점으로부터 자신을 보호하는 쉬운 방법입니다. Linode가 당사에서 제공하는 커널을 부팅하는 경우 Linode의 구성 프로필이 최신 커널을 부팅한 다음 리노드를 재부팅하도록 설정되어 있는지 확인할 수 있습니다. 

패치된 커널을 즉시 업데이트할 수 없는 경우 unprivileged_bpf_disabled 1로 설정되어 있는지 확인하여 이 취약점을 완화할 수도 있습니다. 다음 예제는 Linode가 재부팅될 때까지 임시 완화를 적용합니다. 이 설정을 sysctl 구성 파일에 작성하고 Linode를 안전하게 부팅하여 완화를 유지해야 합니다.

# sysctl -w kernel.unprivileged_bpf_disabled=1

출처: 세코더 보안 연구소의 Tr3e 왕

리눅스 커널에서 힙 오버플로를 사용하여 컨테이너 이스케이프

CVE-2022-0185 는 권한이 없는 사용자에 액세스할 수 있는 공격자가 자신의 권한을 루트로 에스컬레이션할 수 있는 힙 오버플로 버그입니다. 이렇게 하려면 공격자는 특정 Linux 기능이 있어야 CAP_SYS_ADMIN. Kubernetes 클러스터에서 Docker(또는 다른 CRI)를 사용하면 seccomp 필터가 기본적으로 비활성화되므로 이러한 경우 이 취약점이 악용될 수 있습니다.

근본 원인 - 버그는 fs/fs_context.c:legacy_parse_param 에 존재하는 정수 언더플로우로 인해 발생하므로 유효한 최대 길이오산이 발생합니다. 이렇게 하면 "파일 시스템 컨텍스트" 구성 요소에서 정수 부족이 발생합니다. 

언더플로우는 빼기 작업에서 서명되지 않은 정수의 값을 0 이하값으로 줄일 때 발생합니다. 서명되지 않은 정수는 음수를 나타낼 수 없으므로 결과 계산은 정수의 최대 값을 중심으로 래핑됩니다. 이 언더플로가 legacy_parse_param 함수 내에서 발생하면 크기 검사가 실패하고 공격자는 커널 공간에 할당된 4kb 메모리의 경계를 넘어 쓸 수 있습니다. 이 "언바운드 쓰기"를 사용하여 공격자는 커널 메모리의 값을 변경하고 예를 들어 동일한 노드에서 실행되는 다른 프로세스에 액세스 권한을 추가할 수 있습니다.

명령 "capsh –print"는 현재 사용자의 컨텍스트에서 사용 가능한 기능을 나열하는 데 사용할 수 있습니다. 착취는 CAP_SYS_ADMIN 능력에 의존합니다. 그러나 현재 네임스페이스에서만 권한을 부여해야 합니다. 권한이 없는 사용자는 공유 해제(CLONE_NEWNS | 사용할 수 있습니다. CLONE_NEWUSER) CAP_SYS_ADMIN 권한이 있는 네임스페이스를 입력한 다음 악용을 진행하여 시스템을 근절합니다. 그러나 seccomp 를 사용하면 공격자가 해당 기능을 사용하여 네임스페이스에 들어가지 못하게 됩니다.

이 취약점은 커널 5.1 에 도입되어 5.16.2로 패치되었습니다 . 악용 코드는 이미 온라인에서 표면화되고 있습니다. 다음은 결과에 대한 자세한 기술적 세부 사항에 대한 원래 작성 입니다. 

Linux 배포판에서 제공하는 최신 커널을 최신 상태로 유지하는 것은 이 취약점으로부터 자신을 보호하는 쉬운 방법입니다. Linode가 당사에서 제공하는 커널을 부팅하는 경우 Linode의 구성 프로필이 최신 커널을 부팅한 다음 리노드를 재부팅하도록 설정되어 있는지 확인할 수도 있습니다. 패치된 커널을 즉시 업데이트할 수 없는 경우 다음 완화사항을 적용할 수 있습니다.

  • CAP_SYS_ADMIN 기능에 액세스할 수 있는 권한 있는 컨테이너의 사용을 최소화합니다. 
  • 권한이 없는 컨테이너의 경우 공유 되지 않는 호출을 차단하는 seccomp 필터가 제자리에 있는지 확인하여 위험을 줄입니다.
  • 호스트 수준에서 사용자 네임스페이스를 사용하는 사용자의 기능을 비활성화하여 권한이 없는 컨테이너의 악용을 완화합니다. 다음 예제는 Linode가 재부팅될 때까지 임시 완화를 적용합니다. 이 설정을 sysctl 구성 파일에 작성하고 Linode를 안전하게 부팅하여 완화를 유지해야 합니다.
# sysctl -w kernel.unprivileged_userns_clone=0

PwnKit – Polkit의 지역 특권 에스컬레이션 취약점

Polkit은 유닉스와 같은 OS에서 시스템 전체 권한을 제어하기 위한 구성 요소입니다. 권한이 없는 프로세스가 권한 있는 프로세스와 통신할 수 있는 체계적인 방법론을 제공합니다. 또한 다른 사용자는 polkit을 사용하여 명령 pkexec(일반적으로 루트)를 사용하여 높은 권한으로 명령을 실행할 수도 있습니다. 

CVE-2021-4034는 대부분의 주요 리눅스 배포판에 기본적으로 설치된 SUID 루트 프로그램인 polkit의 pkexec의 메모리 손상 취약점입니다. 성공적인 악용을 통해 권한이 없는 사용자는 기본 구성에서 루트 권한을 쉽게 얻을 수 있습니다.

근본 원인 – pkexec 프로그램은 전달된 인수 수를 제대로 검증하지 않으므로 권한이 있는 사용자로 임의코드를 실행할 수 있습니다. 

2009년 의 모든 Polkit 버전은 폴킷 데몬 자체가 실행되지 않더라도 취약하고 악용할 수 있습니다.

Linux 배포판에서 제공하는 최신 커널을 최신 상태로 유지하는 것은 이 취약점으로부터 자신을 보호하는 쉬운 방법입니다. Linode가 당사에서 제공하는 커널을 부팅하는 경우 Linode의 구성 프로필이 최신 커널을 부팅한 다음 리노드를 재부팅하도록 설정되어 있는지 확인할 수 있습니다. 패치된 커널을 즉시 업데이트할 수 없는 경우 pkexec에서 SUID 비트를 제거하여 일시적으로 문제를 완화할 수 있습니다.

# chmod 0755 /usr/bin/pkexec

내용

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 필드가 표시됩니다 *