
CVE-2025-10035_GoAnywhere RCE 획득

설명
GoAnywhere 인스턴스가 CVE‑2025‑10035에 취약한지 감지하는 경량 Python 점검기입니다.
이 도구는 무작위 User-Agent(fake-useragent와 대체 목록 사용)로 조작된 GET 요청을 보내고, 리디렉션을 따르지 않으며, Location 헤더를 검사하여 인스턴스를 패치되지 않음(취약) 또는 **패치됨(취약하지 않음)**으로 분류합니다.
참고: 이 저장소는 현재 점검기만 포함하고 있습니다. PoC는 추후 적절한 경우 별도로 명확히 표시된 위치에 추가될 수 있습니다 — 현재 이 프로젝트는 탐지만을 위한 것입니다.
CVE‑2025‑10035 (이 점검기를 위한 요약)
패치되지 않은 GoAnywhere AdminErrorHandlerServlet은 유효한 라이선스 요청 토큰을 생성하여 리디렉션 URL에 포함시켜 반환할 수 있습니다. 이 토큰은 일반적으로 Location 헤더에서 bundle 쿼리 매개변수로 나타납니다(종종 my.goanywhere.com으로 리디렉션됨).
bundle 쿼리 매개변수가 포함된 my.goanywhere.com(또는 다른 호스트)로의 HTTP 리디렉션을 초래합니다. bundle의 존재 = 취약.bundle 없이 /license/Unlicensed.xhtml과 같은 로컬 경로로 리디렉션하거나, 리디렉션하지 않습니다.윤리적 알림: 오직 자신이 소유하거나 명시적으로 테스트 권한을 부여받은 시스템에 대해서만 이 점검기를 실행하십시오. 무단 스캔은 불법적이거나 혼란을 초래할 수 있습니다.
User-Agent (fake-useragent + 대체 목록).allow_redirects=False)으로 Location 헤더를 검사할 수 있습니다.multiprocessing.dummy.Pool을 통한 다중 스레드 스캔.colorama를 사용한 색상화된 터미널 출력.requestsfake-useragentcoloramaurllib3 (보통 requests와 함께 설치됨)requirements.txt
python -m venv .venv # optional but recommended source .venv/bin/activate # macOS / Linux .venv\Scripts\activate # Windows pip install -r requirements.txt
다음은 다양한 시나리오에서 점검기를 실행하기 위해 복사/붙여넣기할 수 있는 실제 예제입니다: 단일 대상 빠른 테스트, 배치 스캔, 프로덕션 안전을 위한 저속 스캔, Docker 내 실행, 그리고 정기적으로 또는 푸시 시 점검기를 실행하기 위한 최소 GitHub Actions 스니펫.
이 예제들은 스크립트 파일 이름이
check_goanywhere.py이고python check_goanywhere.py로 실행 가능하다고 가정합니다. 파일 이름, 경로 및 스레드 수를 환경에 맞게 조정하십시오.
# Scan targets listed in examples/targets.txt and append vulnerable hosts to results.txt
python check_goanywhere.py examples/targets.txt results.txt
# Use 10 worker threads for faster scanning (be careful with concurrency against production)
python check_goanywhere.py examples/targets.txt results.txt 10
----
## 샘플 출력
다음은 점검기를 실행할 때 볼 수 있는 실제 샘플 출력입니다. 모든 예제는 시작 시 기본 배너가 출력된다고 가정합니다. `[]` 안의 줄은 스크립트가 터미널에 출력하는 색상화된 상태 메시지를 보여줍니다. 스캔 후 취약한 호스트가 결과 파일에 추가됩니다.
- [-] Not Vulnerable: https://0.0.0.0:443 - n/N
- [-] Erorr: http://0.0.0.0:8000 - n/N
- [-] Erorr: https://0.0.0.0:443 - n/N
- [-] Erorr: https://0.0.0.0:443 - n/N
- [-] Erorr: https://0.0.0.0:443 - n/N
- [-] Not Vulnerable: https://0.0.0.0:443 - n/N
- [+] Vulnerable: https://0.0.0.0:443 - n/N