Devlery
Blog/AI

codexui-android 2만9000 다운로드, Codex 토큰 탈취

codexui-android npm 패키지가 Codex 인증 토큰을 훔쳤습니다. AI 코딩 에이전트 보안의 install·runtime·egress 점검선을 봅니다.

codexui-android 2만9000 다운로드, Codex 토큰 탈취
AI 요약
  • 무슨 일: codexui-android npm 패키지가 Codex 인증 파일을 읽어 외부 서버로 보냈다는 보고가 나왔습니다.
    • Aikido는 GitHub 소스에는 없는 코드가 npm 배포본에 있었고, TechRadar는 주간 2만9000 다운로드 규모를 보도했습니다.
  • 의미: AI 코딩 에이전트 보안 범위가 prompt injection을 넘어 npm install, 배포본 검증, egress 감시로 넓어집니다.
  • 주의점: 패키지 삭제만으로는 부족합니다. Codex/OpenAI token 재발급, 세션 점검, 네트워크 로그 확인이 함께 필요합니다.

Aikido Community Japan이 2026년 5월 28일 공개한 보고서는 npm 패키지 codexui-android가 OpenAI Codex 인증 토큰을 훔치는 코드를 포함했다고 설명합니다. 이 패키지는 OpenAI Codex용 원격 웹 UI로 소개됐고, GitHub 저장소도 있었습니다. 그러나 Aikido가 지적한 부분은 저장소의 소스가 아니라 npm에 올라간 빌드 산출물입니다. 보고서에 따르면 npm 배포본에는 GitHub 소스에는 없는 코드가 들어갔고, 실행 시 Codex 인증 파일을 읽어 외부 서버로 전송했습니다.

TechRadar는 2026년 6월 1일 보도에서 codexui-android가 2만9000건 이상 주간 다운로드를 기록했다고 전했습니다. 같은 보도는 Aikido 연구자 Charlie Eriksen의 설명을 인용해, 탈취된 refresh token이 장기간 계정 접근, Codex session 접근, API credit 소비, OpenAI 서비스에서의 사용자 impersonation으로 이어질 수 있다고 정리했습니다. 공격 대상은 모델 prompt가 아니라 개발자의 로컬 인증 파일이었습니다.

이번 사건을 일반적인 npm 악성 패키지 사건으로만 보면 절반만 보입니다. Codex, Claude Code, Cursor, Copilot CLI 같은 AI 코딩 도구는 개발자가 직접 입력한 명령뿐 아니라 에이전트가 선택한 패키지 설치, 샌드박스 실행, 브라우저 검증, Git 작업까지 연결합니다. 패키지 하나가 개발자 계정의 refresh token에 닿으면, 피해 범위는 해당 패키지의 기능 버그가 아니라 에이전트가 접근할 수 있는 계정과 저장소, API credit, 작업 기록으로 확장됩니다.

확인 지점이번 사건의 관찰값개발팀 점검 질문
소스와 배포본Aikido는 GitHub에는 없고 npm 배포본에 있는 코드를 지적했습니다.우리는 저장소 소스가 아니라 실제 설치된 tarball을 검사합니까?
설치 시점보고서는 Android 앱이 pnpm add codexui-android@latest를 실행했다고 설명합니다.@latest 동적 설치를 에이전트 실행 환경에서 막고 있습니까?
인증 파일~/.codex/auth.json 또는 $CODEX_HOME/auth.json이 확인 대상입니다.에이전트 런타임이 장기 인증 파일을 직접 읽을 수 있습니까?
외부 송신Aikido는 sentry.anyclaw.store로의 전송을 언급했습니다.개발자 장비와 샌드박스의 egress 로그를 보존합니까?

npm registry metadata도 사건의 운영 감각을 보여줍니다. codexui-android 패키지는 2026년 4월 10일 생성됐고, registry JSON에는 2026년 5월 27일 수정 기록이 남아 있습니다. 여러 버전의 metadata에는 A lightweight web interface for Codex that runs on top of the Codex app-server라는 설명, codex, openai, web-ui, remote, cli 같은 키워드, GitHub 저장소 링크가 보입니다. 겉으로는 Codex 사용자에게 자연스러운 패키지 이름과 설명입니다.

Aikido 보고서가 특히 강조한 부분은 "GitHub를 봐도 찾을 수 없다"는 점입니다. 많은 팀은 새 패키지를 검토할 때 저장소 README, star, issue, 소스 파일, package.json을 봅니다. 그러나 공격자가 악성 코드를 npm tarball에만 넣으면 저장소 기반 SAST는 놓칩니다. npm pack --dry-run, lockfile integrity, registry tarball diff, 실제 설치 후 파일 목록 검사가 필요한 이유입니다.

패키지 설치 시점도 달라졌습니다. Aikido는 같은 작성자의 Android 앱이 시작 시 pnpm add codexui-android@latest를 실행했다고 설명합니다. 이 방식은 사용자가 앱을 실행하는 순간 그 시점의 최신 npm 배포본을 가져옵니다. 버전 고정이 없으면 악성 버전이 공개된 뒤 탐지 데이터베이스에 올라가기 전까지의 짧은 시간도 공격자에게 충분한 창이 됩니다.

AI 코딩 에이전트가 이 문제를 키우는 이유는 설치 판단이 사용자 손에서 점점 멀어지기 때문입니다. 사람이 직접 pnpm add를 입력하면 패키지 이름, 유지관리자, README, 의존성 정도라도 한 번 봅니다. 반면 에이전트가 "remote UI를 붙여 달라", "테스트를 자동화해 달라", "브라우저에서 확인해 달라"는 요청을 처리하면서 도구를 찾아 설치하면, 개발자는 최종 diff와 결과 화면만 볼 수 있습니다. 설치된 tarball의 실제 파일과 네트워크 송신을 확인하지 않는 팀에서는 사람이 빠진 검토 공백이 생깁니다.

이번 사건의 공격 경로는 복잡한 LLM 취약점이 아닙니다. 패키지가 실행되고, Codex 인증 파일을 읽고, 외부로 보냅니다. 보안팀이 복잡한 prompt injection 방어만 논의하고 개발자 장비의 패키지 설치와 egress를 보지 않으면, 계정 탈취는 훨씬 단순한 경로로 일어납니다.

개발자 또는 앱이 codexui-android 설치

npm 배포본 코드가 로드되며 Codex 인증 파일 접근

auth.json의 토큰이 외부 서버로 전송

공격자가 Codex session, API credit, 계정 권한을 악용할 수 있음

OpenAI의 공식 보안 문맥도 이 기사와 맞물립니다. OpenAI는 2026년 4월 30일 Advanced Account Security를 발표하며 ChatGPT 계정이 Codex와 민감한 정보를 포함할 수 있다고 설명했습니다. 이 설정은 ChatGPT와 Codex login에 적용되고, passkey 또는 physical security key를 요구하며, email/SMS 복구를 비활성화하고, 세션을 짧게 하며, active session 관리를 제공합니다. OpenAI는 Trusted Access for Cyber 참여자에게 2026년 6월 1일부터 Advanced Account Security를 요구한다고도 밝혔습니다.

다만 계정 보안 설정만으로 패키지 실행 환경이 해결되지는 않습니다. passkey는 로그인 피싱을 줄입니다. active session 관리는 의심 세션을 끊는 데 도움을 줍니다. 그러나 이미 로컬 auth.json을 읽을 수 있는 코드가 실행됐다면, 팀은 세션 관리 화면뿐 아니라 개발자 장비의 설치 기록, shell history, package manager cache, DNS/HTTP 로그, EDR alert, Codex credential rotation까지 봐야 합니다.

OpenAI는 2026년 6월 1일 AWS 발표에서 Codex on Amazon Bedrock을 "매주 500만 명 이상이 사용하는 software engineering agent"라고 소개했습니다. 이 숫자는 Codex가 실험적 CLI를 넘어 기업 조달, AWS 보안 제어, 개발 workflow로 들어가고 있음을 보여줍니다. 사용자가 많아질수록 Codex 주변의 unofficial UI, helper app, wrapper, mobile bridge, remote control 도구도 늘어납니다. 공격자는 공식 제품 자체보다 이런 주변 도구의 이름과 편의성을 노릴 수 있습니다.

TechRadar 보도는 같은 작성자 계정의 Android 앱 2개도 언급했습니다. 하나는 OpenClaw Codex Claude AI Agent로, 보도 기준 5만 건 이상 다운로드가 있었고 PRoot sandbox 안에서 npm 패키지를 실행했다고 전했습니다. 다른 하나는 Codex라는 앱으로 1만 건 이상 다운로드가 있었다고 합니다. 이 수치는 독립 검증이 필요한 보도값이지만, 공격자가 "공식처럼 보이는 AI 코딩 앱"과 "편리한 원격 UI"를 동시에 노렸다는 해석에는 충분한 근거가 됩니다.

커뮤니티 반응은 아직 작습니다. Hacker News와 GeekNews에서 이 사건 자체에 대한 큰 토론은 확인하지 못했습니다. Reddit에는 OpenAI Codex Authentication Tokens Stolen in codexui-android npm Supply Chain Attack 같은 보안 공유 글과, OpenAI Codex app 검색 결과에 가짜 악성 사이트가 보였다는 게시물이 올라왔습니다. 표본은 작지만 사용자가 공식 앱, unofficial wrapper, 광고 결과, npm 패키지를 구분하기 어렵다는 문제를 드러냅니다.

개발팀의 첫 대응은 설치 여부 확인입니다. Aikido는 ~/.codex/auth.json, $CODEX_HOME/auth.json, sentry.anyclaw.store, codexui-android, 같은 작성자의 Android 앱을 확인 대상으로 제시했습니다. npm 프로젝트라면 pnpm-lock.yaml, package-lock.json, yarn.lock, global install 목록, shell history, CI cache에서 패키지 이름을 찾아야 합니다. Android 앱을 사용했다면 앱 삭제와 함께 해당 환경에서 접근한 Codex/OpenAI 계정의 세션과 토큰을 점검해야 합니다.

rg -i "codexui-android|anyclaw|sentry\\.anyclaw" .
npm ls -g --depth=0 | rg -i "codexui"
pnpm list -g --depth 0 | rg -i "codexui"

두 번째 대응은 토큰 재발급입니다. 패키지 삭제는 이미 유출된 refresh token을 회수하지 않습니다. OpenAI 계정에서 active session을 확인하고 의심 세션을 로그아웃해야 합니다. API key를 쓴 환경이라면 key rotation과 usage 확인이 필요합니다. Codex login credential이 어떤 파일에 저장되는지 조직별 표준 문서로 남겨야 합니다. 개발자별 로컬 경로가 제각각이면 사고 후 조사 속도가 늦어집니다.

세 번째 대응은 에이전트 실행 환경의 권한 분리입니다. Codex나 Claude Code 같은 도구를 로컬 장비에서 장기 인증 파일과 같은 홈 디렉터리로 실행하면 편합니다. 그러나 편의성은 유출 범위를 키웁니다. 에이전트용 전용 계정, 짧은 수명의 token, read-only 기본 권한, 작업별 sandbox, per-run egress allowlist, install approval이 있어야 합니다. 특히 @latest 설치와 postinstall script 실행은 에이전트가 직접 진행하기 전에 사람 또는 policy gate를 거쳐야 합니다.

네 번째 대응은 배포본 검증입니다. GitHub 저장소만 보는 검토는 이번 유형에 약합니다. 실제 npm tarball의 파일 목록과 checksum을 lockfile과 비교하고, 새 버전이 올라올 때 GitHub tag와 registry publish artifact가 맞는지 확인해야 합니다. 내부 package proxy를 쓰는 팀은 신규 publish 후 일정 시간 quarantine을 걸 수 있습니다. AI 에이전트가 도구를 설치하는 workflow에서는 "검증되지 않은 최신 버전 금지"가 기본값이어야 합니다.

다섯 번째 대응은 egress 로그입니다. 에이전트는 테스트를 위해 브라우저를 열고, 패키지를 설치하고, remote API를 호출합니다. 이 활동을 모두 막을 수는 없습니다. 대신 낯선 domain으로 인증 파일이 나가는 징후를 잡아야 합니다. Aikido가 언급한 sentry.anyclaw.store처럼 telemetry처럼 보이는 domain도 예외로 두면 안 됩니다. 개발자 장비와 CI runner, sandbox VM의 DNS/HTTP 로그를 최소한 사고 조사 기간 동안 남겨야 합니다.

이번 사건은 AI 코딩 도구의 모델 품질 논쟁과 다른 종류의 숙제입니다. 모델이 더 좋은 코드를 쓰는지, 더 긴 context를 읽는지, 더 싼 token을 쓰는지와 별개로, 에이전트가 설치하고 실행하는 코드가 개발자 identity에 닿습니다. "AI가 만든 diff를 리뷰한다"는 단계만으로는 부족합니다. diff 밖에서 설치된 도구, 실행된 package, 열린 network connection, 읽힌 credential file이 함께 리뷰 범위에 들어와야 합니다.

Codex와 경쟁 도구가 기업 workflow로 들어갈수록 이 문제는 더 자주 반복될 수 있습니다. unofficial UI, mobile bridge, remote control helper, MCP server, browser automation adapter는 모두 편의성을 팔 수 있습니다. 그중 일부는 실제로 유용하고, 일부는 악성일 수 있습니다. AI 에이전트가 "필요한 도구"를 찾아주는 시대에는 package reputation, artifact attestation, runtime egress, credential scoping이 개발 생산성 도구의 일부가 됩니다.

지금 팀이 할 일은 거창한 새 보안 프로그램보다 작고 확인 가능한 목록입니다. codexui-android 설치 흔적을 찾고, Codex/OpenAI 세션과 token을 재발급하고, @latest 동적 설치를 막고, 에이전트가 읽을 수 있는 홈 디렉터리와 credential 파일을 줄이고, sandbox egress 로그를 켭니다. 이 다섯 가지는 이번 사건 하나를 넘어서 AI 코딩 에이전트 운영의 기본 통제선이 됩니다.