클로드 코드가 시스템 프롬프트에 보이지 않는 유니코드 마커를 몰래 심어온 사실이 드러났어요. 아포스트로피 문자 하나로 프록시 위치를 3비트로 인코딩해 중국 사용자를 골라냈어요. 앤트로픽은 3월부터 진행된 실험이라며 다음 버전에서 조용히 걷어내겠다고 밝혔어요.
솔직히 이 뉴스 보고 좀 소름 돋았어요. 클로드 코드를 매일 쓰는 개발자 입장에서는 더더욱요. 지난 6월 30일, 레딧 유저 LegitMichel777이라는 사람이 클로드 코드 v2.1.91 바이너리를 역분석하다가 이상한 걸 발견했다고 올렸는데, 그게 하루 만에 해커뉴스 605점을 찍으며 1위까지 올라갔어요.
뭘 발견했냐면요, 클로드 코드가 시스템 프롬프트에 넣는 "Today's date is..." 라는 문장에서 저 아포스트로피(') 글자가 매번 미묘하게 다른 유니코드 문자로 바뀐다는 거예요. 사람 눈에는 똑같이 보이지만 실제로는 4종류— 일반 아스키 아포스트로피, 오른쪽 홑따옴표(U+2019), 수정자 문자 아포스트로피(U+02BC), 수정자 문자 프라임(U+02B9) — 가 번갈아 쓰이고 있었대요. 그리고 이 4가지 조합이 사용자의 프록시 호스트네임이 알려진 중국 도메인 목록에 걸리는지, AI 랩 키워드 목록에 걸리는지, 둘 다인지, 둘 다 아닌지를 나타내는 2비트짜리 신호였다는 거죠. 여기에 날짜 포맷까지 더하면 사실상 3비트 핑거프린트가 매 요청마다 몰래 실려 있던 셈이에요. 심지어 XOR 키 91로 한 번 더 흐려놨다고 하니, 대충 발견되라고 만든 코드는 아니었던 것 같아요.
탐지 트리거는 사용자의 로컬 타임존(Asia/Shanghai, Asia/Urumqi 같은)이랑 접속 중인 프록시 URL이었어요. 즉 중국 지역에서, 혹은 중국을 경유하는 프록시로 클로드 코드를 쓰는 사람들을 조용히 구분해서 표시해뒀던 거죠.
이 코드가 처음 배포된 게 4월 2일이니까, 발각되기까지 거의 석 달 가까이 아무도 몰랐던 거예요. 논란이 커지자 클로드 코드 팀의 Thariq Shihipar가 X에 직접 나서서 해명했는데요, "3월에 시작한 실험으로 무단 리셀러의 어뷰징과 모델 증류(distillation)를 막기 위한 것"이었고 "사실 예전부터 걷어내려고 했었다"고 밝혔어요. 그리고 다음 릴리즈인 v2.1.197에서 해당 마커가 제거됐다고 해요.
근데 커뮤니티 반응을 보면요, 사람들이 화난 포인트가 재밌어요. "리셀러 어뷰징 막는다"는 목적 자체에는 다들 어느 정도 납득하는 분위기더라고요. 문제는 이걸 아무 공지도 없이, 심지어 오픈소스로 공개된 코드베이스도 아닌데 몰래 심어놨다는 점이었어요. 기업 구매 담당자들 사이에서는 "벤더가 제공하는 클로즈드소스 도구를 감사(audit)할 수 있어야 하는 이유가 바로 이런 것"이라는 얘기까지 나오고 있고요.
개인적으로는 이 사건이 꽤 상징적이라고 봐요. AI 코딩 툴이 이제 개발자의 터미널 안쪽 깊숙이 들어와 있는데, 그 안에서 무슨 일이 벌어지는지 사용자는 사실 거의 알 방법이 없거든요. 어뷰징 방지든 뭐든 목적이 정당하다면 왜 처음부터 투명하게 공개하지 않았을까 싶고, 이번 일로 다른 AI 코딩 에이전트들의 시스템 프롬프트도 한 번씩 뜯어보는 사람들이 늘어날 것 같아요.
출처