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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-2825 — CVE-2025-2825에 대한 상세 분석 및 PoC 익스플로잇, CrushFTP의 인증 우회 취약점입니다. 포함: nuclei 템플릿, 멀티스레드 스캐너, 침투 테스트용 사용자 생성 스크립트. | Kitploit
도구/GitHubGitHub/iteride/cve-2025-2825
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingPayload Development
GitHubiteride/cve-2025-2825

CVE-2025-2825

CVE-2025-2825에 대한 상세 분석 및 PoC 익스플로잇, CrushFTP의 인증 우회 취약점입니다. 포함: nuclei 템플릿, 멀티스레드 스캐너, 침투 테스트용 사용자 생성 스크립트.

저장소 보기
111개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-2825/CVE-2025-31161

소개

이 문서에서는 CrushFTP 서버 부분에 영향을 미치는 CVE-2025-2825 취약점에 대한 연구를 제시합니다. CrushFTP는 파일 전송 및 저장을 위한 상용 솔루션입니다(FTP, SFTP, HTTP/S, S3 유사 인터페이스 등).

이 결함은 **인증 우회(authentication bypass)**로 분류되며, 원격 인증되지 않은 공격자가 관리자 권한을 획득할 수 있게 합니다. 성공적인 익스플로잇은 crushadmin 권한으로 액세스하여 파일 보기 및 수정, 계정 관리, CrushFTP 웹 인터페이스 및 API를 통한 관리 작업 수행을 가능하게 합니다.

보고된 영향을 받는 버전(공개 권고 및 연구자 보고서 기준):

  • CrushFTP 10.0.0 — 10.8.3
  • CrushFTP 11.0.0 — 11.3.0

⚠️ 참고: 일부 게시물에서는 CVE 식별자(예: CVE-2025-31161)의 중복 및 중첩이 발생합니다.


보고 목적

단계별로 취약점을 분석하고 전체 연구 주기를 시연합니다:

  1. 자료 수집 및 분석 — CVE-2025-2825에 대한 권고, PoC, 기술 분석 및 게시물 체계화; 결함의 본질과 영향 정리.
  2. CPE 및 조건 식별 — 취약점이 재현되는 관련 CPE/버전 및 구성 목록(웹 인터페이스, S3 호환 엔드포인트 등).
  3. PoC/Exploit 개발 — 통제된 테스트 환경에서 재현 가능한 PoC 준비; 아키텍처 및 피해 최소화 조치 설명.
  4. 대량 검사 방법 — 취약한 호스트를 안전하게 찾는 세 가지 접근 방식:
    • 활성 nuclei 스캔;
    • 수동 nuclei (버전 및 간접 표시를 통한 익스플로잇 없이);
    • 자체 스크립트(Python/Go)를 통한 통제된 확인.
  5. 권장 사항 및 완화 — 인스턴스 탐지, 패치 및 보호를 위한 실용적인 조언.
  6. 안전한 테스트 관행 — 승인된 환경에서만 테스트를 수행하기 위한 체크리스트.

실질적 영향

공개 보고서에 따르면 이 취약점은 심각한 위험을 가지고 있습니다:

  • 익스플로잇을 통해 CrushFTP 인스턴스에 대한 관리자 액세스 권한을 얻을 수 있습니다.
  • 결과: 파일 도난/변경, 사용자 생성/삭제, 백도어 설치, 추가 공격을 위한 서버 사용.
  • CVSS 점수는 심각(약 9.8)으로 평가됩니다.
  • 커뮤니티에서 PoC 및 '야생에서'의 익스플로잇 징후가 확인되었습니다.

대상 CPE / 구성

다음 특성을 가진 인스턴스가 중요합니다:

  • 제품: CrushFTP (웹 인터페이스가 있는 모든 에디션).
  • 버전: 10.0.0 — 10.8.3, 11.0.0 — 11.3.0.
  • 위험도가 높은 구성:
    • 공개 웹 관리 인터페이스(HTTP/S)가 활성화된 경우.
    • S3 호환 API 엔드포인트가 활성화된 경우.
    • 추가 보호 조치(IP 필터링, 2FA)가 없는 경우.
    • 프록시/로드 밸런서의 잘못된 구성으로 내부 엔드포인트가 외부에서 접근 가능한 경우.

취약점 이해

CrushFTP는 S3 유사 API를 지원합니다. 인증을 위해 다음과 같은 Authorization 헤더가 사용됩니다:

root@kitploit:~
Authorization: AWS4-HMAC-SHA256 Credential=<AccessKey>/<Date>/<Region>/s3/aws4_request, SignedHeaders=<Headers>, Signature=<Signature>

서버는 Credential에서 AccessKey를 추출하고 서명을 확인해야 합니다. 그러나 코드에서 lookup_user_pass 플래그 처리에 오류가 발생했습니다.

  • 취약한 코드 (단순화된 조각):
root@kitploit:~
// ServerSessionHTTP.java, метод loginCheckHeaderAuth()
if (this.headerLookup.containsKey("AUTHORIZATION") &&
    this.headerLookup.getProperty("AUTHORIZATION").trim().startsWith("AWS4-HMAC")) {
    
    boolean lookup_user_pass = true;   // ← критическая ошибка
    
    if (s3_username3.indexOf("~") >= 0) {
        user_pass = user_name.substring(user_name.indexOf("~") + 1);
        user_name = user_name.substring(0, user_name.indexOf("~"));
        lookup_user_pass = false;
    }
    
    if (this.thisSession.login_user_pass(
            lookup_user_pass,
            false,
            user_name,
            lookup_user_pass ? "" : user_pass)) {
        // Успешная аутентификация
    }
}
  • 추가 로직:

lookup_user_pass 플래그가 anyPass로 직접 전달됩니다:

root@kitploit:~
if (anyPass && user.getProperty("username").equalsIgnoreCase(the_user)) {
    return user;  // аутентификация без проверки пароля
}

따라서:

  • 사용자 이름에 ~ 문자가 없으면 플래그는 true로 유지됩니다.
  • 비밀번호 확인이 수행되지 않습니다.
  • 공격자는 기존 사용자 이름(예: crushadmin)만 지정하여 인증을 통과할 수 있습니다.
  • 공식적으로 유효한 CrushAuth 쿠키 및 c2f 매개변수와 함께 이를 통해 인증을 우회하고 관리자 액세스 권한을 얻을 수 있습니다.

수정

버전 11.3.1 이상에서 개발자는:

  • 취약한 시나리오를 차단하는 s3_auth_lookup_password_supported 매개변수(기본값 false)를 추가했습니다.
  • ~를 사용한 사용자 이름의 초기 확인을 도입했습니다.
  • 플래그 로직을 분리하여 lookup_user_pass → anyPass 대체를 제거했습니다.
  • 권장 사항: CrushFTP를 11.3.1+로 즉시 업데이트하거나 s3_auth_lookup_password_supported를 비활성화한 해결 방법을 적용하십시오.

POC/Exploit

CVE-2025-2825의 익스플로잇은 매우 간단하며 복잡한 준비가 필요하지 않습니다. 공격자는 두 가지 핵심 요소가 포함된 특수하게 조작된 HTTP 요청을 보내기만 하면 됩니다:

  • AWS S3 형식의 Authorization 헤더: 올바른 기존 사용자 이름(Credential 필드의 AccessKey/username)을 포함합니다.
  • 예상 형식의 CrushAuth 쿠키 및 c2f 매개변수: URL/요청 본문에 있으며, 그 값이 논리적으로 일치해야 합니다(쿠키 형식은 서버가 예상하는 구조와 일치해야 합니다).

서버가 취약한 경우(버전이 10.0.010.8.3 또는 11.0.011.3.0 범위에 있고 수정 패치가 적용되지 않은 경우), 이러한 조합으로 인해 인증 핸들러가 취약한 경로를 따르게 됩니다. 여기서 비밀번호 조회 플래그(lookup_user_pass)는 '모든 비밀번호 허용'으로 해석되어, 사용자는 비밀번호 확인 없이 이름만으로 인증됩니다.

중요 참고 사항:

이 취약점의 익스플로잇은 일반적으로 두 개의 연속된 요청을 보내야 합니다. 첫 번째, 소위 '준비(warm-up)' 요청은 서버에서 취약한 인증 프로세스를 시작합니다. 서버가 필요한 상태에 진입했다는 특징적인 신호는 502 Bad Gateway 오류 응답 또는 단순한 시간 초과(timeout)입니다. 그 직후 두 번째 주요 요청이 전송되며, 서버가 공격에 취약한 상태인 동안 유용한 작업(예: 사용자 생성)을 수행합니다.

root@kitploit:~
GET /WebInterface/function/?command=getUserList&serverGroup=MainUsers&c2f=1111 HTTP/1.1
Host: target-server:8080
Cookie: CrushAuth=1743113839553_vD96EZ70ONL6xAd1DAJhXMZYMn1111
Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/

테스트를 위해 최근 출시된 HTB의 Soulmate 랩을 사용했습니다. 이 랩에서는 CrushFTP 익스플로잇이 필요합니다.

crush

추가 진행:

이 취약점을 통해 setUserItem 명령을 사용하여 관리자 권한이 있는 새 사용자를 추가할 수 있습니다. 이를 위해 new_user.py를 실행하십시오.

root@kitploit:~
python3 new_user.py --target_host http://ftp.soulmate.htb/ --port 80 --target_user crushadmin --new_user literide --password literide

작동 원리

  1. Authorization 헤더 파싱: 서버가 S3 유사 형식(AWS4-HMAC...)의 인증 헤더를 보면 Credential 필드에서 클라이언트 식별자(AccessKey/username)를 추출합니다. 이 단계에서 서버는 사용자 이름이라고 간주하는 문자열을 얻습니다. 이 식별 값은 이후 인증 로직에서 사용됩니다.

  2. lookup_user_pass 플래그 및 그 역할: 코드에는 확인 시 어디서 비밀번호를 가져올지 나타내는 부울 플래그 lookup_user_pass가 있습니다.

  • 정상 시나리오에서는 플래그가 요청에 전달된 비밀번호를 사용할지, 사용자 저장소에서 비밀번호를 가져올지 결정하는 데 도움을 줍니다.
  • 그러나 구현 오류로 인해 동일한 플래그가 검증 함수로 전달되어 다르게 해석됩니다. 즉, 비밀번호 확인을 건너뛰는 신호(본질적으로 'anyPass')로 사용됩니다.
  1. 호출 체인을 통한 플래그 전달: 대략적인 경로: ServerSessionHTTP.loginCheckHeaderAuth() → Session.login_user_pass(...) → UserTools.ut.verify_user(...). 입력에서 플래그가 동작을 설정하고, verify_user에서 이름이 일치하면 비밀번호 비교 없이 발견된 사용자 객체를 조기에 반환하게 됩니다. 이로 인해 인증 확인이 우회됩니다. 서버는 이름으로 사용자를 '인식'하고 인증된 것으로 간주합니다.

  2. 관련 요소(cookie / c2f): 공개 분석에서 핸들러가 요청을 세션/컨텍스트와 일치시키기 위해 올바른 쿠키/매개변수 형식을 기대한다고 언급되었습니다. 그러나 핵심 결함은 lookup_user_pass 처리의 논리적 오류에 있습니다. 다른 요소는 요청이 표준 처리 경로를 통과하도록 도울 뿐입니다.

핵심 원인

  • 플래그의 의미 과부하: '어디서 비밀번호를 가져올지' 결정해야 하는 플래그가 '모든 비밀번호 허용'으로 사용되었습니다. 이것이 단순화된 Credential 파싱과 결합되어 올바른 사용자 이름만 있으면 비밀번호 확인 없이 사용자 자격 증명을 얻을 수 있게 되었습니다.

Nuclei 템플릿

  • 수동 템플릿:

    대부분의 웹 서비스에서 정확한 CrushFTP 버전 확인이 불가능하므로, 이 템플릿은 서비스가 CrushFTP를 사용하는지만 확인합니다.

    활성 템플릿과 함께 사용하는 것이 가장 좋습니다. passive_nuclei

  • 활성 템플릿:

    활성 템플릿은 getUserList 명령이 가능한지 확인합니다.

    active_nuclei

  • 멀티스레드 스크립트

    스크립트는 활성 템플릿과 거의 동일하게 작동하지만 훨씬 빠르며 여러 호스트를 동시에 확인할 수 있습니다.

    root@kitploit:~
    python3 scan.py -t http://ftp.soulmate.htb/ -p 80 -u crushadmin
    

    scan


제거 및 보호 권장 사항

CVE-2025-31161과 관련된 위험을 줄이기 위해 다음 단계를 수행하는 것이 좋습니다 :

  1. 즉시 업데이트:

    • 모든 CrushFTP 인스턴스를 버전 11.3.1 이상으로 업데이트하십시오. 이것이 취약점을 완전히 제거하는 가장 안정적인 방법입니다.
  2. 해결 방법 적용(업데이트가 불가능한 경우):

    • 서버 구성에서 s3_auth_lookup_password_supported 매개변수를 false로 설정하십시오. 이렇게 하면 전체 제품을 업데이트하지 않고도 취약한 인증 로직이 비활성화됩니다.
  3. 위험 완화 조치:

    • 액세스 제한: 방화벽 또는 리버스 프록시(NGINX, Caddy)를 사용하여 CrushFTP 웹 인터페이스에 대한 액세스를 신뢰할 수 있는 IP 주소(예: 회사 네트워크 또는 VPN)로만 제한하십시오.
    • 로그 모니터링: CrushFTP 액세스 로그를 정기적으로 분석하여 Authorization 헤더에 AWS4-HMAC-SHA256이 포함된 의심스러운 요청이 있는지 확인하십시오. 특히 S3 통합을 사용하지 않는 경우 더욱 주의하십시오.
    • 웹 애플리케이션 방화벽(WAF) 사용: S3 API용이 아닌 엔드포인트에 비정상적인 Authorization 헤더가 포함된 요청을 차단하도록 WAF를 구성하십시오.

도구 다운로드