
CVE-2026-14628 경로 탐색(path traversal) 취약점의 교육용 재현본으로, 취약한 코드와 안전한 코드 예제, 수정 설명, 그리고 CWE-22 학습을 위한 실행 가능한 데모를 포함합니다.
최근 공개된 CVE-2026-14628을 실제 사례 참조점으로 사용하여 경로 탐색(CWE-22) 취약점 클래스를 보여주는, 실행 가능한 최소한의 데모입니다.
CVE-2026-14628은 'NousResearch/hermes-agent'(< 2026.5.16)에 영향을 미칩니다.
gateway/platforms/base.py의 extract_media 함수는 들어오는 웹훅 페이로드에서 검증 없이 파일 시스템 경로를 구성하므로, 원격의 인증되지 않은 공격자가 의도된 미디어 디렉터리 외부의 파일을 읽을 수 있습니다.
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:Nhermes-agent 코드베이스를 대상으로 하거나 악용하지 않습니다. 대신, 작고 자체 포함된 예제에서 정확한 취약점 패턴을 재현하여, 결함과 수정 방법을 쉽게 연구하고 다른 코드를 검토할 때 참조 자료로 재사용할 수 있게 합니다.| 파일 | 용도 |
|---|
vulnerable_example.py | 결함이 있는 로직 재현: 검증 없이 단순 문자열 연결로 경로 구성 |
secure_example.py | 수정 버전: 확인된 절대 경로가 의도된 루트 디렉터리 내에 유지되는지 검증 |
python3 vulnerable_example.py
출력은 "공격자"가 ../secret_outside_media_root.txt와 같은 입력을 사용하여 의도된 media_storage/ 디렉터리 외부에 있는 파일(secret_outside_media_root.txt)을 성공적으로 읽는 모습을 보여줍니다.
python3 secure_example.py
동일한 악의적인 입력이 명확한 PathTraversalError와 함께 거부됩니다.
secure_example.py에는 두 가지 보완 방어가 적용되어 있습니다.
.. 또는 경로 구분 기호를 포함하는 파일 이름은 파일 시스템에 전혀 접근하기 전에 거부됩니다(빠른 실패, 정당한 호출자에게 명확한 오류 제공).candidate_path = os.path.abspath(os.path.join(MEDIA_ROOT, filename))
if not candidate_path.startswith(MEDIA_ROOT + os.sep):
raise PathTraversalError(...)
경로 탐색은 파일 업로드, 다운로드 또는 사용자가 제어하는 파일 이름을 처리하는 소프트웨어에서 가장 흔하고 가장 피하기 쉬운 취약점 클래스 중 하나입니다. 웹훅 핸들러, 미디어 프로세서, 로그 뷰어, 템플릿 엔진, 파일 제공 API가 빈번한 대상입니다. 수정 비용은 저렴하며(몇 줄에 불과), 생략할 경우의 비용은 임의 파일 공개이고, 더 나쁜 경우(쓰기 권한과 결합될 때) 원격 코드 실행입니다.
이 프로젝트는 교육 목적으로만 제공됩니다. 알려진 취약점 클래스의 일반적인 재현이며, 특정 라이브 또는 패치되지 않은 소프트웨어를 대상으로 하는 실제 익스플로잇이 아닙니다. 소유하지 않았거나 테스트에 대한 명시적 권한이 없는 시스템에 이러한 기술을 사용하지 마십시오.