[하루한줄] Privilege escalation in firejail overlayfs
URL
Firejail: root privilege escalation in OverlayFS code
Target
Firejail 0.9.30
Explain
Firejail은 Linux 환경에서 애플리케이션의 실행 환경을 제한하는 SUID 샌드박싱 애플리케이션입니다. Linux용 통합 마운트 파일 시스템인 overlayfs 기능이 활성화된 Firejail에서 race condition을 통해 root 권한으로 임의 파일을 수정할 수 있는 취약점이 발견되었습니다.
아래는 fs_overlayfs()
함수의 취약점이 발생하는 소스코드입니다
943 void fs_overlayfs(void) {
...
969 // we disable overlayfs for now, pending fixing
970 if (major >= 4 &&minor >= 19) {
971 fprintf(stderr, "Error: OverlayFS disabled for Linux kernels 4.19 and newer, pending fixing.\\n");
972 exit(1);
973 }
...
1033 if (mkdirat(basefd, "odiff", 0755) == -1 && errno != EEXIST) {
1034 perror("mkdir");
1035 fprintf(stderr, "Error: cannot create overlay directory %s\\n", odiff);
1036 exit(1);
1037 }
1038 ASSERT_PERMS(odiff, 0, 0, 0755);
...
1065 else { // kernel 3.18 or newer
1066 if (asprintf(&option, "lowerdir=/,upperdir=%s,workdir=%s ", odiff, owork) == -1)
1067 errExit("asprintf");
1068 if (mount("overlay", oroot, "overlay", MS_MGC_VAL, optio n) < 0) {
Firejail은 overlayfs를 사용하기 위해 사용자 홈 디렉터리에서 시작하는 마운트 대상 디렉터리를 찾아 이동하며 root 소유이고, 다른 사용자/그룹 권한이 없는지 확인한 뒤 마운트 합니다. 이때 디렉터리 참조에 파일 디스크립터를 사용하지 않고 절대 경로를 사용하는데, 권한 체크와 마운트 사이 시간 동안 마운트 대상 디렉터리를 해커가 조작한 디렉터리로 교체할 수 있습니다.
이를 악용하면 교체된 디렉터리의 심볼릭 링크를 통해 root 권한으로 샌드박스 외부 시스템 파일을 임의로 수정할 수 있습니다.
Firejail 개발사는 overlayfs 기능을 일시적으로 비활성화 한 업데이트를 릴리스했으며, 해당 패치는 https://github.com/netblue30/firejail/commit/97d8a03cad19501f017587cc4e47d8418273834b에서 확인할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.