Firecracker VM 탈출: PwnEscape 2부

3 days ago 8

기존에 확보한 호스트 메모리 접근 수단으로 게스트 내부에서 호스트의 Firecracker 스레드를 장악하고 호스트 root 권한으로 코드를 실행함 KVM_RUN 복귀 시점을 겨냥해 커널에 저장된 사용자 공간 레지스터를 변경하고, 지정한 함수와 인자로 Firecracker가 실행을 이어가도록 함 게스트 페이지의 식별 패턴을 출발점으로 EPT와 호스트 페이지 테이블을 추적해 Firecracker 주소 공간, ASLR 적용 위치, 활성 vCPU의 저장 레지스터를 찾아냄 Firecracker의 표준 오류에 8바이트 식별 문자열을 출력한 뒤 임시 스택 변경을 복원했으며, 프로세스와 게스트 SSH는 계속 정상 응답함 실험은 jailer 없이 root로 실행한 Firecracker v1.16.1에서 수행함. 권한 축소, 네임스페이스, seccomp를 적용한 배포 환경에서 탈취 후 가능한 권한과 자원은 별도 평가가 필요함 공격의 출발점과 실행 환경 PwnEscape Part 1에서 확보한 호스트 메모리 접근 수단을 이용해, 게스트 내부에서 Firecracker를 찾고 실행 중인 스레드를 장악하는 후속 단계임 Firecracker 환경에서 CVE-2026-99999를 시연하는 연속 작업이며, 이미 게스트 매핑을 통해 선택된 호스트 물리 메모리에 접근할 수 있다는 전제에서 시작함 대상은 x86-64의 Firecracker v1.16.1이며, 호스트 커널은 7.0.0-1011-aws, 게스트 커널은 6.18.44+임 systemd-run으로 Firecracker를 root 권한으로 직접 실행하고 taskset으로 CPU 실행 위치를 고정함 탈취한 함수 호출은 Firecracker 자체 권한을 사용하므로 이 환경에서는 호스트 root 권한으로 실행됨 제어권을 가져올 지점: KVM에서 사용자 공간으로 복귀 Firecracker의 내부 아키텍처에서는 각 vCPU에 호스트 프로세스의 스레드가 대응함 스레드는 ioctl(vcpu_fd, KVM_RUN, 0)으로 게스트를 실행하고, 사용자 공간에서 처리할 이벤트가 발생하면 Firecracker로 돌아옴 시스템 호출 중에는 호스트 커널의 pt_regs 에 사용자 공간 레지스터가 저장됨 명령어 포인터는 복귀 후 실행 위치를, 스택 포인터는 사용할 사용자 공간 스택을 가리킴 저장 프레임을 찾아 변경하면 다음 사용자 공간 복귀 시 실행할 코드를 선택할 수 있으며, 게스트 동작으로 복귀를 유발할 수 ...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵