Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-3899_PoC — apport의 경쟁 조건으로 인해 Ubuntu에서 로컬 권한 상승이 발생합니다 | Kitploit
도구/GitHubGitHub/liumuqing/cve-2021-3899_poc
Privilege EscalationVulnerability AnalysisExploitationPenetration Testing
GitHubliumuqing/cve-2021-3899_poc

CVE-2021-3899_PoC

apport의 경쟁 조건으로 인해 Ubuntu에서 로컬 권한 상승이 발생합니다

저장소 보기
34년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-3899 PoC

재현

  1. apport의 이전 버전을 설치하세요: sudo apt-get install apport=2.20.11-0ubuntu27 (2.20.11-0ubuntu27.10 이하의 모든 버전은 괜찮지만, 소스 코드를 직접 내려받아야 합니다.)
  2. (선택 사항) pid_max를 작게 설정하세요. 그렇지 않으면 pid 롤백을 준비하는 데 더 오랜 시간이 걸립니다. echo 10000 | sudo tee /proc/sys/kernel/pid_max
  3. 아무나 root로 ping을 실행할 수 있게 허용하세요: /etc/sudoers에 ALL ALL=(root) NOPASSWD: /usr/bin/ping를 추가하세요.
  4. ulimit -c unlimited; ./exploit을 여러 번 실행하세요.
  5. /etc/logrotate.d/core에 파일이 생성된 것을 확인할 수 있습니다.
  6. 다른 셸을 열고 nc -lvcp 1234를 실행하세요.
  7. logrotate가 실행될 때까지 기다리세요. 다음 중 하나를 할 수 있습니다:
  8. crontab-daily 트리거보다 1분 일찍 시계를 조정하고 기다리세요. (/etc/crontab 확인)
  9. sudo logrotate -vf /usr/sbin/logrotate /etc/logrotate.conf를 실행하여 logrotate를 즉시 실행하세요. (/etc/cron.daily/logrotate와 동일합니다.)
  10. 127.0.0.1:1234로 연결되는 루트 리버스 셸이 열립니다.

상세

Apport는 프로세스의 시작 시간이 apport 자신보다 이후인지 확인하여 pid가 재사용되었는지 검사합니다:

root@kitploit:~
  # /usr/share/apport/apport
  594 apport_start = get_apport_starttime()
  595 process_start = get_process_starttime()
  596 if process_start > apport_start:
  597 error_log('process was replaced after Apport started, ignoring')
  598 sys.exit(0)

하지만 이 pid는 apport가 실행된 직후 재사용될 수 있습니다. 이 경우 get_apport_starttime() == get_process_starttime()입니다.

따라서 uid==0으로 실행되는 다른 프로세스로 이 PID를 다시 점유할 수 있다면, apport가 -rw------- root:root 권한의 코어 파일을 떨어뜨리게 할 수 있습니다:

  1. pid가 A인 충돌할 프로세스 X를 준비하세요.
  2. 현재 pid가 A - 2에 도달할 때까지 fork 프로세스를 반복하세요.
  3. 프로세스 X를 충돌시키면, 커널에 의해 apport가 pid A - 1로 실행됩니다. 프로세스 X를 종료하면 pid A가 비게 됩니다.
  4. cwd를 /etc/logrotate.d/로 한 상태에서 sudo ping 8.8.8.8 명령을 실행하세요. root:root로 실행되는 프로세스가 pid A를 다시 점유합니다.
  5. sudo와 apport의 시작 시간이 같으므로 596행의 검사가 우회됩니다. 그러면 apport는 프로세스 X의 코어 파일을 /etc/logrotate.d에 떨어뜨립니다.
도구 다운로드