GLM 코딩 에이전트 ZCode, 사용자 Git 전체 이력을 동의 없이 암호화해 업로드

Hacker News22일 전조회 4

Z.ai의 GLM 모델을 앞세운 데스크톱 코딩 에이전트 ZCode가 사용자 워크스페이스 전체를 동의 없이 암호화해 자사 클라우드로 올린다는 분석이 나왔다. 개발자 ferstar가 2026년 9월 18일 공개한 리버스 엔지니어링 결과에 따르면, 앱에 로그인한 상태라면 ZCode는 작업 디렉터리의 .git 이력, LFS 자산 캐시, reflog, 전역 앱 설정까지 하나로 묶어 tar.gz로 만든 뒤 암호화해 알리바바 클라우드의 오브젝트 스토리지인 알리윤 OSS로 전송한다.

규모도 구체적이다. 연구자가 확보한 스냅샷은 345MB짜리 상용 워크스페이스에서 42,411개 파일을 모아 만든 313MB 암호문이었고, 조사 과정에서 실패한 업로드 시도가 564건 기록됐다. 패키징 매니페스트는 로컬에 평문으로 남는데, 이 스냅샷에서 .git 디렉터리 하나가 전체 페이로드의 86.6%를 차지했다. 작업 트리의 현재 파일이 아니라 저장소가 만들어진 첫 커밋부터의 전체 계보가 올라간다는 뜻이다. 나중 커밋에서 지운 API 키, 아직 푸시하지 않은 브랜치 이름, .git/config에 남은 내부 호스트명과 저장소 경로가 모두 포함된다.

핵심은 암호화 방식이다. ZCode는 봉투 암호화를 쓴다. 페이로드는 대칭키로 암호화하고, 그 대칭키를 다시 RSA-OAEP 공개키로 감싼다. 공개키는 업로드 자격 증명을 협상할 때 서버가 내려주며, 대응하는 개인키는 Z.ai 클라우드에만 있다. 연구자가 로컬 시스템의 모든 개인키로 복호화를 시도했지만 실패했다. 사용자 디스크에 놓인 313MB 암호문은 사용자도, ZCode 클라이언트 자신도 풀 수 없다.

업로드 경로는 클라이언트의 app.asar에서 복원됐다. 클라이언트가 zcode.z.ai에 자격 증명을 요청하면 OSS 폼 서명, 오브젝트 키, 크기 상한, 회차별 RSA 공개키가 돌아온다. 클라이언트는 워크스페이스를 tar.gz로 묶고 AES-256-CTR로 암호화한 뒤 대칭키를 감싸, 완성된 아카이브를 알리윤 OSS에 직접 POST한다. OSS는 다시 Z.ai 백엔드에 콜백해 스냅샷을 등록한다. 테스트 중 실행된 클라이언트는 zcode.z.ai와 알리윤 OSS 노드 두 곳에 지속 연결을 유지하고 있었다.

설정 화면을 뒤져도 끌 수 없다. "Optimize Experience"(optimizeAgentExperienceEnabled)는 모델 학습용 데이터 제공 여부만 제어하고, 스냅샷 수집과 업로드는 그대로 진행된다. "Repo Snapshot Indexing"(repoSnapshotIndexingEnabled)은 서버가 업로드된 스냅샷을 인덱싱할지 여부만 정한다. 로컬 패키징과 전송은 계속된다. 호스트 조립 단계에서 캡처 사이드카는 시작 시 무조건 인스턴스화되며, 토큰 제공자가 유효한 JWT를 발급할 수 있기만 하면 된다. 한 세션에서 62건의 캡처 이벤트가 기록됐고, 매 프롬프트 직전과 작업 완료 시점에 트리거됐다.

에이전트 도구 목록에는 스냅샷·업로드·텔레메트리 도구가 하나도 없다. 데이터 유출 파이프라인이 에이전트 도구가 아니라 도구 루프 바깥의 호스트 레벨 사이드카로 돌아가기 때문이다. 그래서 어떤 권한 설정으로도 막히지 않고, 에이전트 자신도 그 존재를 인지하지 못한다. 공개된 AI 하네스 프롬프트 모음인 OrcaPromptVault에 보관된 ZCode의 131KB 시스템 프롬프트와 31개 도구 표면에도 알리윤, OSS, 업로드, 프라이버시에 대한 언급은 없다. 대신 체크포인트/리와인드 기능이 시스템 프롬프트에 연결돼 있고, 사용자에게 보이는 이 기능이 파일시스템 잠금으로 비활성화되는 지점이다. 별도로 ZCode는 세션 ID로 다른 ZCode 세션의 저장 내용을 읽는 ReadSessionContext 도구를 포함한다.

배경을 보면 신뢰를 전면에 내세운 제품이라는 점이 걸린다. ZCode는 2026년 7월 출시됐고, Z.ai는 앤트로픽의 Claude Code 숨은 텔레메트리 논란 직후 오픈 웨이트를 킬 스위치 문제의 탈출구로 내세우며 자사 하네스를 밀었다. 한 임원은 X에서 ZCode에 감시 기능이 들어가느냐는 질문에 웹사이트에 적힌 것 외에는 아무것도 구현하지 않겠다고 답했다. 워크스페이스 스냅샷은 ZCode 웹사이트 어디에도 적혀 있지 않다. Z.ai는 2026년 1월 홍콩거래소에 상장했으며, 공식 X 계정은 이 사안에 응답하지 않았다. ZCode 팀과 연결된 계정의 반응은 부인 대신 사과에 가까웠다. 개인정보 처리방침도 대화 중 제출된 텍스트·파일·코드 수준만 언급할 뿐, 워크스페이스와 Git 이력 전체의 패키징·업로드는 다루지 않는다.

개발자 입장에서 이 사건이 남기는 구분선은 명확하다. 모델 가중치가 공개돼 있다는 사실과 그 모델을 감싸는 하네스가 투명하다는 사실은 전혀 별개다. GLM을 로컬에서 돌리는 사람도 그 위에 얹는 코딩 에이전트가 어떤 권한으로 무엇을 읽고 어디로 보내는지 따로 확인해야 한다. 폐쇄형 하네스는 도구 호출 단위의 동의만으로는 통제되지 않는다. 호스트 레벨에서 파일시스템과 네트워크를 관찰하는 것이 가장 확실한 검증 수단이다.

대기 중인 아카이브를 지우는 것으로는 해결되지 않는다. 연구자에 따르면 클라이언트는 30분 안에 313MB 아카이브를 새로 만들어 재시도 카운터를 올렸다. 실효가 있는 조치는 파일시스템 수준 차단이다. 리눅스에서는 체크포인트 디렉터리에 불변 속성을 걸고, macOS에서는 사용자 불변 플래그를 지정하는 방식이다. 대가는 체크포인트 롤백 기능을 포기하는 것이다.

한 가지 전제는 분명히 해둘 필요가 있다. 이번 분석은 한 연구자가 클라이언트 바이너리를 리버스 엔지니어링해 얻은 결과이며, Z.ai가 공식적으로 메커니즘을 설명하거나 확인한 문서는 없다. 다만 ZCode 팀 연관 계정의 반응과 로컬에 남는 평문 매니페스트, 재현된 업로드 흐름은 분석의 신뢰도를 뒷받침한다.

관련 글