
CVE-2026-79984에 대한 실행 가능한 개념 증명 재현 도구로, Apache Camel camel-mina-sftp의 경로 순회 취약점을 다루며, 악성 SFTP 서버 픽스처와 취약 빌드 및 수정 빌드를 포함합니다.
Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현 프로그램으로, 여기서 mina-sftp consumer는 — 다른 원격 파일 consumer들과 동일한 RemoteFileConsumer 기본 클래스에서 파생되며 — 폴링된 각 파일의 절대 원격 경로를 구성할 때 구성된 디렉터리와 서버의 디렉터리 목록에서 보고된 이름을 연결하며, 어휘적 정규화도, 격리 검사도 수행하지 않습니다. 그 경로는 이후 검색(항상)의 피연산자가 되며, delete=true, move, preMove, moveFailed 또는 readLock=rename이 구성된 경우 삭제 또는 이름 변경의 피연산자가 됩니다.
SFTP 디렉터리 항목 이름은 서버가 제공하는 원시 프로토콜 문자열이므로, 침해되었거나 악의적이거나 멀티테넌트인 서버는 단일 경로 세그먼트가 아닌 이름을 보고할 수 있습니다.
이는 CVE-2026-79983(
camel-ftp)의mina-sftp형제 항목입니다. 둘 다 동일한 근본 원인과 동일한 수정을 공유합니다.
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mina-sftp 4.22.0 (영향받음; 수정됨 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-mina-sftp 3.39.0 (Camel 4.22.0, 영향받음; 수정된 대조군 3.40.0 / Camel 4.22.1) |
camel-mina-sftp는 Camel 4.18.0에서 도입되었으므로, 가장 높은 번호의 Camel Quarkus에 번들된 Camel 4.15.0에는 이 컴포넌트가 존재하지 않습니다. 이 재현 프로그램은 Camel Quarkus 3.39.0(Camel 4.22.0, 영향받음)을 사용하며, 3.40.0(Camel 4.22.1)을 패치된 대조군으로 사용합니다. 따라서 두 모듈 모두 영향받는 동작 및 수정된 동작을 보여줍니다.
이 앱은 의도적으로 악의적인 SFTP 서버(Apache MINA SSHD)를 내장합니다. 실제 임시 디렉터리 트리를 제공하지만, SSH_FXP_READDIR 응답에서 폴링된 디렉터리 /upload에 있는 한 파일의 이름을 getShortName 재정의를 통해 경로 순회 문자열 d/../../outside.txt로 다시 씁니다. 이 이름은 점으로 시작하지 않으므로 Camel의 숨김 파일 규칙에 걸리지 않으며, /upload + d/../../outside.txt는 폴링된 디렉터리보다 한 단계 위인 /outside.txt로 해석됩니다. 일반 mina-sftp consumer가 /upload를 폴링합니다.
normal.txt와 탈출하는 /outside.txt를 모두 검색합니다.normal.txt를 유지하고 탈출하는 항목을 건너뛰며,
Skipping file as it resolves outside the starting directory: upload/d/../../outside.txt를 기록합니다.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
영향을 받은 빌드에서 예상되는 출력:
name=[d/../../outside.txt] <<< FILE FROM OUTSIDE THE POLLED DIRECTORY
content: OUTSIDE-SECRET (/outside.txt, a file the consumer should never reach)
name=[normal.txt] (inside)
| 속성 | 값 |
|---|---|
| 구성 요소 | camel-mina-sftp (mina-sftp 스킴) |
| CWE | CWE-22 (경로명에 대한 부적절한 제한 - 제한된 디렉터리) |
| 심각도 | HIGH |
| 공격 벡터 | 단일 경로 세그먼트가 아닌 READDIR 항목 이름(서버 제공) |
| 영향 | 엔드포인트의 자격 증명을 사용하여 폴링된 디렉터리 외부의 파일을 읽고, delete/move/readLock=rename과 함께 사용 시 삭제 또는 이름 변경 |
| 영향받는 버전 | 4.18.0부터 4.18.5 이전, 4.19.0부터 4.22.1 이전 |
| 수정된 버전 | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24487 |
| 크레딧 | Dilrevx from NSSL, SJTU |
권고문: https://camel.apache.org/security/CVE-2026-79984.html
GenericFileConsumer.isWithinStartingDirectory(RemoteFileConsumer에 의해 재정의되며, mina-sftp
컨슈머가 파생되는 클래스)는 확인된 경로를 압축하고, 경로 세그먼트 경계에서 해당 경로가 폴링된 디렉터리
내부에 유지되는지 검증합니다. 외부로 확인되는 항목은 경고와 함께 건너뛰며, 정상적인 항목은 계속
처리됩니다.
서버 호스트 키를 검증하고, filter/antInclude/include를 사용하여 컨슈머가 단일 세그먼트 이름만
허용하도록 제한하며, 목록이 완전히 신뢰되지 않는 서버에 대해 delete/move/preMove/moveFailed/readLock=rename을
사용하지 마십시오. 가능한 경우 서버 계정을 폴링된 디렉터리로 제한하십시오.
이 저장소는 교육 및 방어 목적으로 게시됩니다. Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하며, 업그레이드가 문제를 해결하는지 검증할 수 있도록 돕기 위한 것입니다. 악성 서버와 "secret"은 동작하지 않는 로컬 픽스처입니다. 소유하거나 운영하지 않는 시스템에 이 자료를 사용하지 마십시오.