🇰🇷 한글 설명
praktor는 Telegram 입력/출력, Docker 격리, Mission Control UI를 갖춘 다중 에이전트 Claude Code 오케스트레이터입니다. 0.9.1 이전 버전에서는 Telegram 문서 업로드 시 공격자가 제어하는 파일명이 정제 없이 경로에 결합되며, path.Join이 상위 디렉터리 순회(../)를 해석하여 uploads/ 외부 쓰기가 가능합니다. 이로 인해 원격 사용자가 영속 에이전트 작업공간(/workspace/agent)의 CLAUDE.md나 지침/스킬/훅/설정 파일을 덮어써 저장형 명령 주입이 발생할 수 있습니다.
💡 쉬운 설명
Telegram으로 파일을 올릴 때 파일 이름을 속여 허용되지 않은 위치에 파일을 저장할 수 있습니다. 이렇게 저장된 악성 설정 파일이 이후 AI 에이전트의 동작을 몰래 바꿀 수 있습니다.
🇺🇸 원문 (English)
praktor is a multi-agent Claude Code orchestrator with Telegram input and output, Docker isolation, and a Mission Control UI. Prior to 0.9.1, both Telegram upload sites in `internal/telegram/bot.go` concatenate the attacker-controlled document filename into a destination path without sanitization, and `path.Join` collapses parent-directory traversal. A remote Telegram user who can message the bot can therefore write outside `uploads/` within the persistent agent workspace mounted at `/workspace/agent`. Because `allow_from: []` permits all senders by default, no prior authentication or privilege is required in that configuration. The attacker can plant or overwrite `CLAUDE.md`, instruction, skill, hook, or configuration files that the Claude agent reads and operates on across later runs, turning a document upload into stored instruction injection. The demonstrated arbitrary-write scope is the persistent agent workspace volume, not an unrestricted host-filesystem write. This issue is fixed in version 0.9.1.
📍 영향받는 시스템
praktor 0.9.1 미만 버전 (internal/telegram/bot.go 업로드 처리 로직)
⚔️ 공격 벡터
Telegram 봇에 조작된 경로(../)가 포함된 파일명으로 문서를 업로드하여 작업공간의 CLAUDE.md 등 지침 파일을 덮어씀
🛡️ 대응 방법
praktor를 0.9.1 이상으로 업데이트하고, 신뢰할 수 있는 사용자만 허용하도록 allow_from 설정을 제한
🔧 검증 코드
출력된 버전이 0.9.1 이상이면 패치 적용된 것이며, 0.9.1 미만이거나 버전 확인이 불가능하면 업데이트가 필요합니다.
praktor --version 2>/dev/null || grep -rn 'version' $(which praktor 2>/dev/null) 2>/dev/null | head -1