보안동향

최신 보안정보를 신속하게 전해드립니다.

[보안동향] CVE-2019-14287 Potential bypass of Runas user restrictions

2019-12-18
  1. 개요

sudo 는 superuser do 의 약자로 일반 사용자가 superuser(root) 사용자의 권한을 빌려 명령어를

실행 시킬 수 있도록 하는 유닉스, 리눅스 시스템의 패키지 입니다. sudo 설정 파일에 등록된 일반 사용자에게

root 권한을 제한했을 때 signed 값 혹은 integer overflow를 이용해 root 권한으로 명령어를 실행 시킬 수 있습니다.

 

  1. 취약한 버전

sudo < 1.8.28

 

  1. 취약점 설명 및 분석

Runas는 Run as a user의 뜻으로 Runas specification은 사용자로 명령을 실행할 수 있는 사양을 뜻합니다.

즉, sudo -u#uid [command] 와 같이 sudo를 이용해 다른 사용자의 권한을 사용할 때 그 사용자를 Runas user라고 칭합니다.

 

 tester 계정을 sudoers 파일에 root 권한은 제외하고 등록합니다.

 

tester 사용자는 등록해놓은 대로 다른 사용자의 권한을 사용할 수 있지만 root 권한은 사용할 수 없습니다.

 

아래와 같이sudo -u 옵션을 이용해 root 권한으로 명령어를 실행시킬 수 있습니다.

 

setresuid 시스템 콜은 sudo 명령을 실행하기 전 사용자의 uid를 재정의 하기 위해 사용됩니다.

사용자 uid 가 -1 혹은 4294967295(unsigned -1)로 지정했을 때 사용자 uid 값을 변경하지 않습니다.

sudo 자체가 uid 0으로 실행되기 때문에 uid가 재정의 되지 않아 그대로 uid 0의 권한으로 명령어를 실행시킬 수 있습니다.

 

아래와 같이 auth log에도 uid 0이 아닌 -1 혹은 4294967295인 것을 확인할 수 있습니다.

 

위와 같은 uid는 root 권한으로 실행되지만 log에 보이듯이 0 값이 아니므로

PAM(Linux Pluggable Authentication Modules)모듈이 동작하지 않습니다.

 

일반적으로 sudo를 이용해서 명령어를 실행할 때 아래와 같이 PAM 세션 모듈이 작동하며 PAM에 정의된 설정으로 권한 제한을 합니다.

 

즉, 해당 취약점을 이용해 sudo를 실행시키면 권한 제한에 걸리지 않습니다.

 

  1. 위협요소

공격자가 sudo를 사용하는 일반 사용자의 계정으로 서버의 root 권한을 획득할 수 있습니다.

 

  1. 대응방안

1) Sudo 최신 버전 업데이트

 

목록