ZCode는 침묵적으로 전체 Git 이력 업로드 – 개인정보 침해 분석
ZCode는 동의 없이 사용자의 전체 Git 이력을 업로드합니다
핵심 포인트: ZCode 데스크톱 애플리케이션은 모든 로그인 사용자의 전체 .git 디렉터리를 암호화하고, 서버 전용 RSA 공개 키로 암호화 키를 래핑한 후 알리바바 클라우드의 OSS 서비스에 업로드합니다. 사용자는 암호화된 데이터를 복호화할 수 없으며, UI 전환 설정도 이 데이터 유출을 막을 수 없습니다.
데이터 유출 방식
결론: ZCode 클라이언트는 작업 공간을 tar.gz로 압축하고, AES-256-CTR으로 암호화한 후, 서버에서 제공하는 RSA-OAEP 공개 키로 대칭 키를 래핑하여 암호문을 직접 알리바바 클라우드 OSS 버킷에 POST합니다.
- 클라이언트는
zcode.z.ai에 접속하여 서명된 OSS 폼, 객체 키, 크기 제한, 업로드별 RSA 공개 키를 획득합니다. - 업로드된 페이로드에는 전체
.git디렉터리(객체, LFS 캐시, reflogs, 설정)와 작업 트리가 포함됩니다. - 암호화된 아카이브는 로컬에 저장되지만(예:
~/.zcode/v2/checkpoints), 개인 RSA 키는 Z.ai의 클라우드에만 존재하므로 사용자는 복호화할 수 없습니다. - 업로드 후 OSS는 Z.ai의 백엔드로 콜백하여 스냅샷을 등록합니다.
재구성된 흐름도(원본 이미지 참조)는 자격 증명 협상 → 로컬 압축 → 암호화 → 직접 OSS POST → 백엔드 콜백의 순서를 보여줍니다.
실제로 업로드되는 내용
결론: 업로드된 데이터의 86% 이상은 Git 객체 저장소이며, 삭제된 시크릿, 출시되지 않은 기능 브랜치, 내부 설정을 포함한 전체 레포지토리 계보를 포함합니다.
| 내용 | 크기(예시) | 페이로드 비중 |
|---|---|---|
.git/lfs/ |
196.1 MB | 56.8 % |
.git/objects/ |
102.2 MB | 29.6 % |
.git/logs/ |
0.6 MB | 0.2 % |
| 소스 코드 및 문서 | 46.2 MB | 13.4 % |
단일 42k 파일 스냅샷은 345MB 작업 공간에서 313MB 암호화 아카이브를 생성했습니다.
UI 전환 설정은 업로드를 막지 못합니다
결론: 두 가지 표시되는 설정인 경험 최적화와 레포 스냅샷 인덱싱은 후속 서버 측 학습 또는 인덱싱에만 영향을 미치며, 클라이언트가 스냅샷을 압축하고 업로드하는 것을 방지하지 않습니다.
- 캡처를 담당하는 사이드카는 시작 시 조건부로 인스턴스화되며, 유효한 JWT 토큰이 있으면 작동합니다.
- 세션 로그는 한 세션 동안 62회의 캡처 이벤트를 기록했으며, 각 프롬프트 전 및 작업 완료 시마다 트리거되었습니다.
- 에이전트의 도구 표면(31개 도구)에는 스냅샷 또는 원격 모니터링 명령어가 없으며, 데이터 유출은 도구 루프 외부에서 실행됩니다.
암호화 키 설계는 서버 전용 접근을 확인합니다
결론: 봉투 암호화는 서버 전용 RSA 키를 사용하므로, 오직 Z.ai만이 업로드된 아카이브를 복호화할 수 있습니다.
- 공개 키는 자격 증명 협상 중에 전달됩니다.
- Ferstar는 로컬 개인 키로 아카이브를 복원하려는 시도가 실패했습니다.
- 사용자의 디스크에 저장된 암호문은 사용자나 클라이언트 자체가 읽을 수 없습니다.
개인정보 정책 누락
결론: ZCode 공식 개인정보 정책은 "대화 중 제출된 텍스트, 파일, 코드"의 수집을 언급하지만, 전체 작업 공간 또는 Git 이력 업로드에 대해 일체 언급하지 않습니다.
- FAQ 항목, 변경 로그 주석, 정책 수정 사항 중 스냅샷 기능과 관련된 내용은 없습니다.
- 유일한 관련 언급은 "최적화 프로그램"에 대한 일반적인 선택적 비활성화이며, 설명된 행동을 커버하지 않습니다.
커뮤니티 반응 및 검증
결론: 발견은 빠르게 확산되었으며, Ferstar의 X 스레드는 276,000회 이상 조회되었고, 중국어 언어 경고는 63,800회 조회되었습니다.
- 오픈소스 AI 에이전트 개발자인 Petri Kuittinen은 경고했습니다: "비공개 소스 AI 허브를 신뢰하지 마세요."
- 여러 독립적인 분석(예: OrcaPromptVault)은 숨겨진 체크포인트/롤백 기능이 업로드 파이프라인을 트리거함을 확인했습니다.
- 일부 사용자는
~/.zcode/v2/checkpoints디렉터리를 보지 못했다고 보고했으며, 이후 릴리스에서 메커니즘이 변경되었을 가능성이 있지만, 공식 발표는 없었습니다.
완화 조치
결론: 유일한 신뢰할 수 있는 완화 방법은 파일 시스템 레벨에서 클라이언트가 체크포인트 디렉터리에 쓰는 것을 차단하는 것입니다.
# Linux
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
sudo chattr +i ~/.zcode/v2/checkpoints
# macOS
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
chflags uchg ~/.zcode/v2/checkpoints
- 이 조치는 체크포인트-롤백 UI를 비활성화하지만, 채팅, 자동 완성, 도구 호출 기능은 정상 작동합니다.
- 불변 플래그를 제거하면 재활성화 가능합니다(
chattr -i또는chflags nouchg).
로컬 실행 모델에 대한 더 넓은 함의
결론: 오픈웨이트 모델을 로컬에서 실행한다고 해서 개인정보 보장이 보장되는 것은 아닙. 주변 허브(데스크톱 앱, 업데이트 서비스, 원격 모니터링 계층)가 여전히 데이터를 유출할 수 있습니다.
- 신뢰는 모델 가중치뿐 아니라 전체 런타임 스택에 확장되어야 합니다.
- 어떤 AI 코딩 허브에도 반드시 고려해야 할 두 가지 핵심 질문:
- 사용자가 로그인 중일 때 어떤 데이터가 전송되나요?
- 저장된 스냅샷의 복호화 키는 누구에게 있나요?
- 이 분석의 출처인 Tokenstead는 Z.ai의 반응을 계속 모니터링하고 결과를 업데이트할 예정입니다.
개발자들을 위한 핵심 교훈
- 오픈웨이트 모델이 전체 오픈 스택을 의미하지는 않습니다. 허브가 비공개일 수 있으며, 알려지지 않은 원격 모니터링을 수행할 수 있습니다.
- 어떤 AI 보조 IDE의 네트워크 트래픽도 검사하세요. 클라우드 저장소 서비스로의 외부 POST를 찾아보세요.
- 원격 모니터링 계약을 공개하고 사용자가 코드를 검토할 수 있는 오픈소스 허브를 우선 선택하세요.
- 검토할 수 없는 비공개 소스 도구를 사용해야 한다면, 파일 시스템 하드닝(불변 디렉터리)을 적용하세요.
참고 자료
- Ferstar, ZCode 내부: 클라우드로 침묵적으로 전체 Git 이력 업로드, 2026년 9월 18일 – 완전한 포렌식 보고서.
- Ferstar(X 스레드, 276,000회 조회) 및 FeiZ(X 스레드, 63,800회 조회).
- ZCode 변경 로그 및 개인정보 정책(공식 Z.ai 사이트).
- OrcaPromptVault의 ZCode 시스템 프롬프트 스냅샷.
- V2EX 토론(중국 커뮤니티 반응).
- Lookonchain의 사건 보도.
Sources
관련
- Dispatch
- Dispatch
- Dispatch
- Dispatch