PolKit 취약점으로 인해 대부분의 Linux 배포판에서 루트 액세스 권한 획득

최근에 품질 라는 소식을 발표했다. 취약점을 식별했습니다 (CVE-2021-4034) en 시스템 구성 요소 폴킷 (이전 PolicyKit) 권한이 없는 사용자가 높은 액세스 권한이 필요한 작업을 수행할 수 있도록 배포에 사용됩니다.

취약점 권한이 없는 로컬 사용자가 자신의 권한을 루트 사용자로 승격할 수 있습니다. 시스템을 완전히 제어할 수 있습니다. 이 문제는 코드명 PwnKit이며 대부분의 Linux 배포판에서 기본 설정으로 실행되는 작업 익스플로잇을 생성하는 것으로 유명합니다.

언급된다 PolKit에 포함된 pkexec 유틸리티에 문제가 있습니다., SUID 루트 플래그와 함께 제공되며 PolKit 규칙에 따라 다른 사용자의 권한으로 명령을 실행하도록 설계되었습니다.

잘못된 인수 처리로 인해 pkexec에 전달된 명령줄에서 권한이 없는 사용자는 인증을 우회하고 코드를 루트로 실행할 수 있습니다., 설정된 액세스 규칙에 관계없이. 공격의 경우 PolKit에 어떤 설정과 제한이 설정되어 있든 pkexec 유틸리티로 실행 파일의 SUID 루트 속성을 설정하면 충분합니다.

Pkexec는 정확성을 확인하지 않습니다 프로세스를 시작할 때 전달된 명령줄 인수(argc)의 개수입니다. pkexec 개발자는 argv 배열의 첫 번째 항목이 항상 프로세스 이름(pkexec)을 포함하고 두 번째 항목이 NULL이거나 pkexec를 통해 실행되는 명령 이름이라고 가정했습니다.

인수 개수는 배열의 실제 내용과 비교되지 않고 항상 1보다 큰 것으로 가정되었으므로 Linux의 execve 함수가 허용하는 빈 argv 배열이 프로세스에 전달되면 pkexec는 NULL을 첫 번째 인수( process 이름), 버퍼 메모리 부족 이후 다음 배열 내용으로.

문제는 메모리의 argv 배열 뒤에 환경 변수가 포함된 envp 배열이 있다는 것입니다. 따라서 빈 argv 배열을 사용하여 pkexec는 환경 변수가 있는 배열의 첫 번째 요소(argv[1]이 envp[0]와 동일하게 됨)에서 상승된 권한으로 실행되는 명령에 대한 데이터를 추출합니다. 공격자.

argv[1] 값을 받은 pkexec는 PATH의 파일 경로를 사용하여 실행 파일의 전체 경로를 결정하려고 시도하고 전체 경로가 있는 문자열에 대한 포인터를 다시 argv[1]에 씁니다. 그러면 값을 덮어쓰게 됩니다. argv[1]이 envp[0]과 동일하기 때문에 첫 번째 환경 변수도 마찬가지입니다. 첫 번째 환경 변수의 이름을 조작함으로써 공격자는 pkexec에서 다른 환경 변수를 대체할 수 있습니다. 예를 들어 suid 프로그램에서 허용되지 않는 "LD_PRELOAD" 환경 변수를 대체하고 프로세스가 프로세스에서 공유 라이브러리를 로드하도록 할 수 있습니다. .

작업 익스플로잇은 GCONV_PATH 변수 대체를 사용합니다. 이것은 코드에서 iconv_open()을 사용하는 g_printerr() 함수가 호출될 때 동적으로 로드되는 기호 트랜스코딩 라이브러리의 경로를 결정하는 데 사용됩니다.

GCONV_PATH의 경로를 재정의함으로써 공격자는 정상적인 iconv 라이브러리가 아니라 자신의 라이브러리를 로드할 수 있습니다. 이 라이브러리의 드라이버는 pkexec가 여전히 루트로 실행 중인 단계에서 오류 메시지가 표시되는 동안 시작 권한을 확인하기 전에 실행됩니다.

관찰되는 것은, 문제는 메모리 손상으로 인한 것이지만 안정적이고 반복적으로 악용될 수 있습니다., 사용된 하드웨어 아키텍처에 관계없이.

준비된 익스플로잇 Ubuntu, Debian, Fedora 및 CentOS에서 성공적으로 테스트되었습니다., 하지만 다른 배포판에서도 사용할 수 있습니다. 원래 익스플로잇은 아직 공개적으로 사용 가능하지 않아 사소하고 다른 연구원이 쉽게 다시 만들 수 있으므로 다중 사용자 시스템에 가능한 한 빨리 핫픽스 업데이트를 설치하는 것이 중요합니다.

Polkit은 BSD 및 Solaris 시스템에서도 사용할 수 있지만 악용을 위해 탐색되지 않았습니다. 알려진 것은 OpenBSD 커널이 execve()를 호출할 때 null argc 값을 전달하는 것을 허용하지 않기 때문에 OpenBSD에서 공격을 수행할 수 없다는 것입니다.

이 문제는 pkexec 명령이 추가된 2009년 XNUMX월부터 있었습니다. PolKit의 취약점에 대한 수정은 여전히 ​​패치로 제공되지만(수정 버전이 형성되지 않음) 배포판 개발자에게 미리 문제를 통보했기 때문에 대부분의 배포판에서 동시에 업데이트를 릴리스했습니다. 취약점 정보.

최종적으로 그것에 대해 더 많이 알고 싶다면에서 세부 정보를 확인할 수 있습니다. 다음 링크.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.