Skip to content

fix(security): versionId/experimentId Path Traversal 취약점 #94

@greenheadHQ

Description

@greenheadHQ

Summary

storage.tsgetVersion, saveVersion, deleteVersion, getExperiment 등에서 versionId/experimentIdpath.join에 직접 사용하여 Path Traversal 가능.

Context

  • const filePath = join(VERSIONS_PATH, \${versionId}.json`)` 패턴으로 파일 경로 구성
  • ../../etc/passwd 같은 값으로 디렉토리 탈출 가능
  • 서버 API 라우트(GET /api/prompts/versions/:id)에서 URL 파라미터가 직접 전달됨
  • Tailscale 내부 네트워크이지만, 방어 계층 추가 필요

Proposed Changes

  • safePath(base, id) 유틸 함수 추가: .., /, \ 포함 시 거부 + resolved path가 base 내에 있는지 검증
  • getVersion, saveVersion, deleteVersion, getExperiment, createExperiment, completeExperiment에 적용

Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:core핵심 도메인 로직 및 공통 라이브러리area:security보안, 인증, 비밀정보, 데이터 보호bugSomething isn't workingpriority:high즉시 대응이 필요한 작업

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions