BrunnerCTF : WordPressed to Ro... 노트

BrunnerCTF : WordPressed to Root Writeup

이 챌린지는 PHP 8.2 / Apache의 스톡 WordPress 7.0.0 설치를 Debian Trixie 기반 이미지에서 실행하는 Docker/Kubernetes 배포를 포함했습니다. 초기 액세스는 알려진 취약한 플러그인인 wp2shell을 통해 www-data 쉘을 제공받아 이루어졌습니다. 주요 목표는 일반적인 컨테이너 탈출 및 SUID 트릭에 의도적으로 강화된 권한 상승이었으며, 이는 최근의 sudo CVE를 가리켰습니다.정찰 결과 특정 버전을 고정하는 Dockerfile이 발견되었는데, 특히 런타임 이미지에 gcc와 libc6-dev가 존재하여 권한 상승을 위한 온박스 컴파일을 시사했습니다. sudo의 존재는 초점을 sudo 로컬 루트 버그로 좁혔습니다. docker-compose.yml은 기본 WordPress 데이터베이스 자격 증명을 노출했습니다.docker/entrypoint.sh 스크립트는 첫 부팅 시 무작위 WordPress 관리자 자격 증명을 생성하고 컨테이너 환경으로 내보내 Apache/PHP 워커와 같은 자식 프로세스에서 액세스할 수 있도록 했기 때문에 중요했습니다. 테마 디렉토리인 brunnerne-docs는 의도적으로 root 소유였지만 모든 사용자가 읽을 수 있었으며, 루트 실행 후크에 대한 잠재적인 오해의 소지가 있었습니다.초기 액세스는 WordPress 7.0.0에 대한 공개 익스플로잇 체인인 wp2shell-poc를 활용했으며, 이는 CVE-2026-63030(인증되지 않은 블라인드 SQL 인젝션) 및 CVE-2026-60137(관리자 자격 증명 복구 후 플러그인 업로드를 통한 RCE)을 포함했습니다. 이를 통해 www-data로 리버스 쉘을 얻었습니다.www-data로서의 열거는 비정상적인 SUID 바이너리, 기능 또는 모든 사용자가 쓸 수 있는 루트 소유 파일이 없는 강화된 환경을 보여주었습니다. sudo 버전 1.9.15p5는 중요한 정보로 식별되었습니다./proc/*/environ에서 자격 증명 검색을 통해 WordPress 관리자 자격 증명을 발견했지만, 이는 sudo에 대한 시스템 자격 증명이 아니었습니다. 이를 사용하거나 기본 암호를 sudo와 함께 사용하려는 시도는 실패했습니다.권한 상승은 sudo 1.9.14부터 1.9.17까지 영향을 미치는 CVE-2025-32463을 사용하여 달성되었습니다. 이 취약점은 모든 로컬 사용자가 --chroot/-R 옵션을 활용하여 자체 제공 chroot에서 공격자가 제어하는 NSS 공유 라이브러리를 로드하여 sudoers 항목이나 암호 없이 루트로 임의 코드를 실행할 수 있도록 했습니다.익스플로잇은 루트 쉘을 드롭하는 악성 NSS 모듈을 컴파일하고, 이 모듈을 가리키는 사용자 지정 nsswitch.conf와 함께 가짜 chroot 디렉토리를 스테이징한 다음, 'sudo -R woot woot'으로 트리거하는 것을 포함했습니다. 이를 통해 루트 쉘을 성공적으로 얻어 플래그에 액세스할 수 있었습니다.근본 원인은 초기 액세스를 위한 RCE로 이어진 WordPress 코어의 인증되지 않은 SQL 인젝션과 권한 상승을 위한 sudo 1.9.15p5 취약점(CVE-2025-32463)이었습니다. 수정 사항에는 sudo를 버전 >= 1.9.17p1로 업그레이드하는 것이 포함됩니다. 주요 교훈에는 특권 바이너리 버전을 조기에 확인하고 온타겟 컴파일을 위한 gcc/libc6-dev 존재와 같은 힌트를 인식하는 것이 포함되었습니다.