
Apple이 10월 13일 iCloud 로그인 요청을 거부하면서 AirTag 정보를 가져오는 오픈소스 도구와 airtaghistory.com의 신규 로그인이 막혔다. airtaghistory.com 운영자는 AI 코딩 에이전트 두 개와 유휴 맥북을 활용해 약 45시간 만에 서비스 측 우회책을 배포했다고 밝혔다.
운영자에 따르면 오류 코드 -80045는 처음에 잘못된 자격 증명으로 표시돼 이용자들이 Apple ID 비밀번호가 틀렸다고 안내받았다. 이미 연결된 사용자는 백그라운드 위치 갱신을 계속 받았지만, 새로 로그인하거나 만료된 세션을 복구하려는 사용자는 접속할 수 없었다.
문제는 Apple 인증에 쓰이는 기기 증명 헤더인 anisette에서 시작됐다. 여러 오픈소스 도구는 Apple Music의 안드로이드용 라이브러리를 이용해 Linux 서버에서 헤더를 생성해 왔다. 운영자는 Apple이 화요일부터 Apple 기기라고 주장하는 클라이언트의 에뮬레이션된 안드로이드 anisette를 거부하기 시작했다고 설명했다. Find My는 Apple 하드웨어에서만 작동하므로 클라이언트가 안드로이드 기기라고 표시하는 방법도 쓸 수 없었다.
운영자는 Claude Code와 Codex에 문제를 나눠 맡겼다. Claude Code는 GitHub 이슈와 포럼을 조사하고 인증 단계에서 요청이 실패하는 지점을 추적했다. 이 과정에서 도출한 원인은 강한 가설일 뿐 확정된 사실은 아니라고 선을 그었다. Codex는 처음에는 안드로이드 anisette를 살리려 했지만, Apple 로그인 뒤 CloudKit과 키체인에 접근하는 3단계에서 계속 막혔다.
수요일 Codex는 macOS의 비공개 프레임워크를 통해 기기 고유 anisette를 얻는 시험 프로그램을 만들었다. 이어 키체인 신뢰 관계를 설정하는 5단계에서 인증 오류가 났고, Rust 인증 라이브러리가 Mac으로 로그인한 뒤 요청의 클라이언트 정체성을 iPhone으로 바꾸는 문제를 찾아 수정했다. 회귀 테스트를 추가한 뒤 운영자가 직접 실행한 결과, AirTag 액세서리 파일 10개를 내보냈고 로그인 절차의 일곱 단계가 모두 통과했다.
개발용 Mac에서 성공한 것만으로는 Railway의 Linux 컨테이너에서 운영되는 서비스에 적용할 수 없었다. 운영자는 개인 Apple ID와 비밀번호를 클라우드 VNC 세션에 입력하라는 Codex의 제안을 거부했다. 대신 macOS Ventura가 설치된 2017년형 15인치 MacBook Pro를 계정에 연결하지 않은 채 서버로 사용했다. Claude Code는 이 Mac에서 anisette 헤더를 제공하는 작은 HTTP 서비스, Railway가 안전하게 연결하도록 하는 Cloudflare Tunnel, 상태 확인과 알림, 그리고 선택적으로 헤더 URL을 지정하는 --anisette-headers-url 플래그를 구성했다. 헤더 제공 URL을 아는 사람이 해당 Mac으로 로그인할 수 있으므로 긴 비밀 경로를 사용했고, 요청 URL에 포함된 비밀 정보를 로그에서 가리는 조치도 추가했다.
변경 사항은 수요일 세 개의 풀 리퀘스트로 배포됐으며, Apple이 로그인을 차단한 뒤 약 45시간 만에 이용자들이 다시 연결할 수 있었다. 운영자는 오픈소스 도구들이 다양한 하드웨어에서 수많은 이용자를 지원해야 하는 반면, 자신의 제품은 유휴 Mac 한 대를 사용하는 선택이 가능했다고 밝혔다. 또한 개인 계정 정보를 클라우드 세션에 넣지 않고, 서버 Mac을 iCloud 계정에 연결하지 않는 등 보안과 신뢰에 관한 결정은 사람이 내려야 했다고 강조했다.
운영자는 장애 초기부터 비밀번호 오류로 안내한 점이 특히 나빴다며, 첫 번째로 병합된 풀 리퀘스트는 근본 원인을 고친 것이 아니라 이용자에게 책임을 돌리는 메시지를 바로잡은 변경이었다고 전했다. 앞선 글에서도 비슷한 교훈을 다뤘다고 덧붙였다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요