메인 콘텐츠로 건너뛰기
블로그 안전 Linode 시큐리티 다이제스트 3월 7일 - 2022년 14일

Linode Security Digest - 2022년 3월 7일~14일

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

이번 주, 우리는 리눅스 커널에서 높은 심각도 취약점을 논의 할 것이다.

더러운 파이프 – 리눅스 로컬 권한 에스컬레이션

CVE-2022-0847 을 사용하면 권한이 없는 Linux 사용자가 임의의 읽기 전용 파일을 덮어쓸 수 있습니다. 사용자는 루트 프로세스에 코드를 삽입하여 이 취약점을 활용하고 권한을 루트 사용자가 되도록 확대할 수 있습니다. 

유비쿼터스 "더러운 소" 취약점과 마찬가지로 공격자는 더러운 파이프 악용을 실행하고 파일에 텍스트를 쓸 수 있습니다. Dirty Pipe를 악용하기 쉬운 결함으로 만드는 이유는 사용자가 임의파일에 텍스트를 쓸 수 있으며 경우에 따라 SUID 바이너리를 통해 권한을 쉽게 에스컬레이션할 수 있다는 것입니다. 

근본 원인 – 더러운 파이프 취약점은 초기화되지 않은 pipe_buffer.flags 변수로 인해 발생합니다. 파이프는 프로세스 간 통신에 사용되는 도구이며, 한쪽 끝은 데이터를 푸시하는 반면 다른 쪽 끝은 해당 데이터를 가져올 수 있습니다. 커밋을 통해 초기화되지 않은 파이프 버퍼가 심각도가 높습니다. 페이지 캐시 참조에 PIPE_BUF_FLAG_CAN_MERGE 삽입할 때는 특별한 방법으로 준비된 파이프에 새 데이터를 작성하기만 하면 페이지 캐시의 데이터를 덮어쓸 수 있습니다.

이 취약점에는 몇 가지 주의 사항이 있습니다. 

  • 공격자는 파일에 대한 읽기 권한이 있어야 합니다.
  • 간격띄우기는 페이지 경계에 없어야 합니다. 
  • 쓰기는 페이지 경계를 넘을 수 없습니다. 
  • 파일크기를 조정할 수 없습니다. 

현재 이 취약점에 대한 기존 완화는 없습니다. 5.8보다 큰 Linux 커널 버전에 있는 경우 공급업체는 5.16.11, 5.15.25 및 5.10.102의 다음 버전에 패치를 권장합니다.

업데이트 2022년 3월 14일: 최신 리노드 커널을 사용할 수 있으며, 이 커널은 더러운 파이프를 수정합니다.

cgroups를 통한 컨테이너 이스케이프

제어 그룹 또는 cgroups는 프로세스에 대한 컴퓨터 리소스 사용을 할당하고 할당하는 Linux 커널 기능입니다. 경우에 따라 이러한 프로세스는 그룹에 따라 리소스 할당이 할당되는 계층 그룹으로 구성됩니다.

Cgroup은 함께 그룹화해야 하는 컨테이너에서 실행되는 여러 프로세스가 있기 때문에 Linux 컨테이너에서 일반적으로 사용됩니다. 

CVE-2022-0492 는 사용자가 컨테이너를 탈출하고 호스트 기계로 피벗할 수 있는 컨테이너 탈출 취약점입니다. 이는 cgroup 아키텍처 v1에만 영향을 줍니다. 

근본 원인 - 취약점에는 release_agent 파일이 포함되며, 이는 cgroups v1의 기능입니다. release_agent 파일을 사용하면 관리자가 cgroup의 프로세스가 완료되면 실행되는 "릴리스 에이전트"를 구성할 수 있습니다. release_agent 루트 cgroup 디렉터리에서만 표시되며 모든 자식 그룹에 영향을 줍니다. 프로세스가 다될 때마다 커널은 notifiy_on_release 활성화되었는지 확인하고, 그렇게 하면 구성된 release_agent 이진이 생성됩니다. 컨테이너 탈출은 linux가 release_agent 파일을 설정하는 프로세스가 관리 권한이 있는지 확인하지 않았기 때문에 발생합니다(예. CAP_SYS_ADMIN 기능). 

이 취약점은 다음을 수행하여 완화될 수 있습니다.

  • AppArmor, SELinux 또는 Seccomp 보안 프로필 사용 
  • 필요하지 않은 경우 권한이 없는 사용자 네임스페이스 비활성화
  • 컨테이너를 권한이 없는 사용자로 실행

팔로 알토의 보안 연구원들은 컨테이너 환경이 CVE-2022-0492에 취약한지 여부를 확인하는 테스트를 만들었습니다.

이 취약점 뒤에몇 가지 주의 사항이 있습니다. 이 취약점을 성공적으로 악용하려면 성공적인 악용을 위해 다음 조건을 충족해야 합니다. 

  • 컨테이너를 권한 있는 사용자(루트 또는 no_new_privs 플래그가 있는 사용자)로 실행해야 합니다.
  • AppArmor, SELinux 또는 Seccomp를 비활성화해야 합니다.
  • 호스트는 권한이 없는 사용자 네임스페이스를 사용하도록 설정해야 합니다.
  • 컨테이너는 루트 v1 cgroup에 있어야 합니다. 

netfilter 로컬 권한 에스컬레이션 힙 아웃-아웃-오브 바운드 쓰기를 통해

Netfilter는 다양한 네트워킹 관련 작업을 수행할 수 있는 Linux 커널의 프레임워크입니다. 패킷 필터링, 네트워크 주소(및 포트) 번역, 패킷 로깅 및 사용자 공간 패킷 큐를 사용할 수 있습니다. 상태 비정수 및 상태 별 패킷 필터링을 기반으로 인터넷 방화벽을 빌드할 수도 있습니다. 

CVE-2022-25636은 로컬 사용자가 함수 nft_fwd_dup_netdev_offload (nf_dup_netdev.c) 에 쓰기를 수행하고 권한을 얻을 수 있는 취약점입니다. 이 취약점은 현재 커널 버전 5.4-rc1에서 5.6.10까지 영향을 미칩니다. 

근본 원인 – nft_fwd_dup_netdev_offload 함수에서 ctx->num_actions++는 하드웨어 오프로드가 활성화된 체인에서 dup 또는 fwd 흐름 규칙을 설정할 때 흐름 >rule->action.entry 배열(nf_dup_netdev.c:67)으로 오프셋하는 데 사용됩니다. 증분이 호출되는 수와 할당된 항목 수 사이에 불일치가 발생합니다. 할당된 배열 크기는 expr.offload_flags&NFT_OFFLOAD_F_ACTION (nf_tables_offload.c:97)가 있는 nftables 식 의 수를 기반으로 하지만 즉각적인 식 형식만 이(dup 또는 fwd 가 아님)만 있습니다. 이러한 불일치를 통해 다른 사람이 해당/앞의 즉시 없이 dup/fwd 식으로 규칙을 만들 수 있으며, 이는 크기가 작은 항목 배열로 이어지고 임의로 범위를 벗어난 배열이 씁니다. 누군가는 스크립트를 작성하고 커널 ROP / 로컬 권한 에스컬레이션으로 전환 할 수있는 OOB 쓰기를 수행 할 수 있습니다.

커널을 최신 버전에 패치하는 것이 좋습니다. 


내용

댓글 남기기

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