오픈코드 해킹, 콘솔에 맡긴 AI 키가 샜다

코딩 에이전트에 오픈AI 키나 앤스로픽 키를 넣어 쓰는 사람이라면 이 글을 먼저 읽는 게 좋다. 터미널에서 AI에게 코딩을 시키는 오픈소스 도구 오픈코드(OpenCode)의 운영사가 2026년 10월 17일(협정세계시 기준) 보안 사고를 공개했다. 스타트업 포춘(Startup Fortune)에 따르면 운영사는 애노멀리 이노베이션스(Anomaly Innovations, 옛 SST)다. 사용자가 오픈코드 콘솔에 저장해 둔 외부 AI 서비스 키가 노출됐을 수 있다는 내용이다.
숫자부터 적는다. 공식 게시물이 밝힌 영향 범위는 오픈코드 콘솔 사용자의 1.4%다. 외부 AI 서비스를 콘솔에 연결해 둔 일부 사용자만 해당하고, 해당자에게는 이미 이메일을 보냈다. 공식 게시물은 “메일을 받지 못했다면 영향받지 않은 것”이라고 적었다. 다만 사고가 아직 진행 중이라서 경위는 대부분 공개되지 않았다.
이 글은 오픈코드 해킹 사고를 처음 듣는 사람, API 키가 뭔지 아직 헷갈리는 사람도 따라올 수 있게 썼다. 순서는 이렇다. 먼저 지금까지 확인된 사실과 확인되지 않은 것을 가른다. 그다음 메일을 받았다면 오늘 할 일을 순서대로 적고, 메일을 못 받았어도 키 하나가 새는 일이 생겼을 때 피해가 정해진 선에서 멈추게 만드는 설정을 정리한다.
자료는 오픈코드 공식 X 게시물 두 건, 해커뉴스 스레드(10월 18일 아침 기준 650점대·댓글 100여 개), 스타트업 포춘·크립토 브리핑(Crypto Briefing) 보도, 그리고 오픈코드·앤스로픽·오픈AI·구글의 공식 문서다. 사고 자체는 내가 재현할 수 있는 종류가 아니라서 직접 시험한 것은 없다. 확인하지 못한 것은 확인하지 못했다고 적었다.
이 사고에 나오는 말 여섯 개
| 말 | 한 줄 풀이 |
|---|---|
| API 키 | AI 서비스를 프로그램에서 쓰게 해 주는 비밀번호 같은 문자열. 이 키로 쓴 만큼 키 주인 계정에 요금이 붙는다 |
| 오픈코드 콘솔 | 오픈코드 운영사가 여는 서비스. 팀 워크스페이스를 만들어 모델을 쓰고 예산을 정한다. 공식 문서에 따르면 오너·관리자는 자기 외부 서비스를 연결할 수도 있다 |
| 외부 공급자 연결 | 내가 가진 오픈AI·앤스로픽·구글 키를 다른 서비스에 맡겨 그 서비스가 대신 호출하게 하는 방식. 이번 사고의 대상이다 |
| 증류(distillation) | 한 AI 모델이 내놓은 답을 대량으로 모아 다른 모델을 가르치는 기법. 공식 게시물은 이 사고를 ’대규모 증류 공격’과 연결했다 |
| 폐기(revoke) | 키를 무효로 만드는 일. 폐기하면 그 키로 하는 호출은 전부 실패한다 |
| 지출 한도 | 월 사용액이 정해진 금액에 닿으면 호출을 멈추는 설정. 알림만 보내는 예산과는 다르다 |
한국 시각 10월 18일 새벽, 오픈코드 해킹 공지가 올라오기까지
공식 게시물의 시각은 협정세계시(UTC) 10월 17일 17시 56분, 한국 시각으로는 10월 18일 새벽 2시 56분이다. 그 앞뒤를 확인된 것만 시간순으로 놓으면 이렇다.
| 시각 | 일 | 출처 |
|---|---|---|
| 게시물 기준 “어젯밤” | 침입이 있었다. 정확한 시각은 공개되지 않았다 | 오픈코드 공식 게시물 |
| 게시물 기준 “오늘 아침” | 영향받은 사용자에게 이메일 발송. 매체마다 17일이라는 쪽과 18일이라는 쪽이 갈린다 | 공식 게시물, 스타트업 포춘 |
| UTC 10월 17일 17:50 | 한 사용자가 “오픈코드 해킹, 키 도난”이라는 글을 해커뉴스에 올렸다(점수 12) | 해커뉴스 |
| UTC 10월 17일 17:56 | 첫 공식 게시물 | X의 오픈코드 계정 |
| UTC 10월 17일 18:01 | 한 사용자가 “내 오픈AI·앤스로픽 잔액이 소진됐고 구글 계정이 제한됐다. 오픈코드에서 메일도 받았다”고 확인 글을 올렸다 | X |
| UTC 10월 17일 18:01 | 공식 게시물을 가리키는 해커뉴스 글이 올라와 650점대까지 올랐다 | 해커뉴스 |
| UTC 10월 17일 18:08 | 같은 문장에 “메일을 못 받았다면 영향이 없다. 외부 공급자를 연결한 일부 사용자였다”를 더한 두 번째 게시물 | X의 오픈코드 계정 |
공식 게시물의 핵심 문장은 이렇다. “어젯밤 대규모 증류 공격과 관련된 보안 침해가 있었고, 오픈코드 콘솔 사용자의 1.4%가 영향을 받았다. 오늘 아침 모두에게 이메일로 알렸다.”
첫 게시물은 “사고가 진행 중이라 지금은 더 자세히 말할 수 없고, ○○와 협력하고 있다”는 문장에서 끊긴다. 협력 상대는 게시물에 적혀 있지 않다. 스타트업 포춘과 크립토 브리핑은 앤스로픽·오픈AI·구글과 협력 중이라고 전했는데, 공식 게시물에서는 확인하지 못했다.
이메일에 적힌 내용과, 공식 글에 없는 일곱 가지
해커뉴스의 한 댓글은 ’오픈코드 팀’이 보낸 메일이라며 전문을 옮겨 놓았다. 스타트업 포춘도 같은 문장의 일부를 인용해서 서로 맞아떨어진다. 내용을 우리말로 옮기면 이렇다.
폐기 예정이던 옛 시스템에서 무단 접근이 확인됐다. 워크스페이스에 저장해 둔 외부 공급자 키(예: 오픈AI, 앤스로픽)가 노출됐을 수 있다. 각 공급자 대시보드에서 키를 폐기하고 새로 바꾸고, 그 키를 쓰는 앱을 갱신하고, 최근 사용 내역에 이상이 없는지 살펴 달라.
여기까지가 확인된 부분이다. 반대로 공식 글과 이메일 어디에도 없는 것들을 스타트업 포춘이 미해결 질문으로 정리했다. 내가 읽은 한도에서도 같은 빈칸이 보인다.
- 1.4%가 몇 계정인지. 사용자 수가 공개되지 않아 규모를 가늠할 수 없다.
- 침입 경로. “옛 시스템”이라는 말뿐이고 어떻게 들어왔는지는 없다.
- 키 말고 다른 데이터가 나갔는지. 스타트업 포춘에 따르면 이메일은 “지금까지 조사로는 다른 데이터가 유출됐다는 증거를 찾지 못했다”고 적었다.
- 처음 접근을 언제 알아챘는지.
- 내 컴퓨터의 설정 파일에 둔 키는 영향이 있었는지. 여러 사용자가 직접 물었는데 답이 없다.
- 왜 ’증류 공격’이라는 이름이 붙었는지(아래에서 따로 다룬다).
- 이미 발생한 요금을 누가 어떻게 책임지는지.
마지막 항목이 왜 중요한지 보자. 한 X 계정은 “키가 밤새 400달러 넘게 쓰였다는 사용자가 있고 1,700달러라는 사용자도 있다”고 전했다. 이것은 다른 사람들의 말을 옮긴 글이고 우리가 확인한 숫자가 아니다. 스타트업 포춘도 요금이 “수백 달러에 이른다”는 보고를 전하면서 개별 사례는 검증하지 못했다고 적었다. 피해 액수는 아직 확정된 사실이 아니다.
키는 어디에 있었나: 콘솔에 맡긴 것과 내 컴퓨터에 둔 것
이번 사고를 이해하는 열쇠는 키가 놓인 자리다. 오픈코드 공식 문서에 따르면 콘솔은 “다른 공급자처럼 오픈코드에 연결하는 선택 사항”이고, 선불 충전(쓴 만큼 결제) 방식이다. 팀 워크스페이스에서는 오너와 관리자가 모델을 켜고 예산을 정하고 자기 외부 공급자를 연결할 수 있다. 이번에 영향받았다고 공식 게시물이 말한 사람이 바로 이 ‘외부 공급자를 연결한’ 사용자다.
같은 문서에는 다른 길도 있다. /connect 명령으로 공급자 키를 넣으면 내 컴퓨터의 ~/.local/share/opencode/auth.json 파일에 저장된다고 적혀 있다. 이 두 저장 방식이 이번 사고와 어떤 관계인지 정리하면 다음과 같다.
| 키가 있던 곳 | 방식 | 이번 사고와의 관계 |
|---|---|---|
| 오픈코드 콘솔 워크스페이스(외부 공급자 연결) | 서비스 서버에 보관 | 공식 게시물 기준 영향 범위. 해당자는 메일을 받았다 |
내 컴퓨터 auth.json |
/connect 로 넣으면 저장(공식 문서) |
공식 발표에 언급 없음. 질문으로 남았다 |
| 내 컴퓨터 환경 변수 | 셸 설정이나 실행 때 지정 | 공식 발표에 언급 없음 |
| 콘솔의 오픈코드 자체 크레딧 | 선불 충전 잔액 | 공식 발표에 언급 없음 |
“공식 발표에 언급 없음”은 안전하다는 뜻이 아니라 모른다는 뜻이다. 공식 게시물은 메일이 오지 않았다면 영향이 없다고 말했으니, 지금 가장 믿을 만한 기준은 메일함이다. 다만 스팸함도 뒤져 보는 게 좋다. 못 받은 사람이 자기 상태를 확인할 방법은 지금 공식 게시물의 이 한 문장뿐이다.
콘솔에 키를 맡기는 건 편리해서 하는 일이다. 여러 기기와 팀원이 같은 키를 직접 만지지 않고 쓸 수 있고, 한 곳에서 예산을 정할 수 있다. 대신 그 서비스의 서버가 뚫리면 내 키도 같이 샌다. 이번 사고는 이 거래의 반대편을 보여 준 일이다.
’증류 공격’이라는 말이 어색한 이유
공식 게시물은 이 사고를 ’대규모 증류 공격’과 관련 있다고 적었다. 증류는 한 모델의 답을 대량으로 모아 다른 모델을 가르치는 기법이다. 정상적인 연구에서도 쓰이지만, 남의 키로 비싼 모델에 질문을 쏟아부어 답을 긁어 가는 일에도 같은 말이 붙는다.
그런데 이메일은 “옛 시스템에 무단 접근이 있었고 키가 노출됐을 수 있다”고 설명한다. 키가 어떻게 빠져나갔는지를 말하는 문장이지, 증류가 어떻게 일어났는지를 말하는 문장이 아니다. 스타트업 포춘은 연구자 네이선 램버트(Nathan Lambert)가 “이것이 하위 모델을 훈련시키는 의미의 증류인지, 불법으로 얻은 토큰을 쓰는 다른 수상한 패턴인지 대중은 알 자격이 있다”는 취지로 물었다고 전했다. 해커뉴스에서도 한 댓글이 “고객 키가 뚫렸다. 아마 증류에 쓰였을 것이다. 이건 증류 공격이 아니다”라고 적었다.
두 설명이 동시에 사실일 수도 있다. 옛 시스템이 뚫려 키가 나갔고, 그 키로 모델 답변을 대량으로 긁어 갔다는 순서다. 스타트업 포춘도 이 순서를 가능성으로 적었고 운영사가 확인했다고는 하지 않았다. 지금 공개된 정보로는 ’키 노출’은 확인된 사실이고 ’증류에 쓰였다’는 아직 가설이다.
메일을 받았다면 오늘 이 순서로
이메일의 요청과 각 서비스 문서를 합치면 순서가 나온다. 급한 일부터 적었다.
- 메일 속 링크를 누르지 않는다. 키를 바꾸러 가는 사이트는 주소창에 직접 쳐서 들어간다. 스타트업 포춘도 같은 조언을 전했다. 사고 소식이 퍼지면 그 이름을 베낀 가짜 메일이 따라오기 쉽다.
- 새 키를 만들어 쓰던 곳을 바꾸고, 옛 키를 폐기한다. 오픈AI 문서는 새 키가 제대로 도는지 확인한 뒤에 옛 키를 폐기하라고 권한다. 반면 유출된 키는 “즉시 폐기하고 새 키로 바꾸라”고 적혀 있다. 서비스가 멈춰도 되면 폐기를 먼저 하고, 멈추면 안 되는 곳은 새 키 교체 직후에 바로 폐기한다.
- 사용 내역을 거슬러 올라가 본다. 기사들은 10월 17일부터 보라고 했다. 하지만 공식 게시물은 침입 시각을 “어젯밤”이라고만 했고 메일이 17일 아침에 나갔다면 침입은 16일 밤이었을 수 있다. 내 판단으로는 하루 앞선 10월 16일부터 보는 게 안전하다.
- 모르는 요금이 보이면 각 공급자 지원 채널에 문의한다. 이미 생긴 요금을 어떻게 처리할지는 이 글을 쓰는 시점에 공개된 정책이 없다. 모르는 것을 약속하지 않는다.
- 지출 한도를 건다. 다음 절의 표를 본다.
- 그 키를 쓰던 곳을 전부 찾는다. 내 노트북 말고도 CI(자동 빌드 서버), 팀원의 개인 설정, 다른 도구의 설정 파일, 오래 안 열어 본 스크립트가 있다. 이메일에도 “그 키를 쓰는 앱을 모두 갱신하라”고 적혀 있다.
- 오픈코드 콘솔에서 외부 공급자 연결을 끊는다. 운영사가 원인을 밝히기 전까지는 다시 연결하지 않는 편이 낫다.
서비스별 지출 한도, 어디서 거는가
공식 문서에서 확인한 값만 적는다. 화면 이름은 문서 기준이라 콘솔 개편으로 달라질 수 있다.
| 서비스 | 설정 | 위치(문서 기준) | 한도에 닿으면 |
|---|---|---|---|
| 앤스로픽 | 조직 월 지출 한도 | 콘솔 결제(Billing) 페이지의 Spend limits | 요청이 HTTP 400 invalid_request_error로 거절된다. 티어마다 상한이 있다(Start 월 500달러, Build 1,000달러, Scale 20만 달러) |
| 앤스로픽 | 워크스페이스별 월 지출 한도·알림 | Workspaces 페이지에서 워크스페이스 선택 후 Spend limits. 기본 워크스페이스에는 걸 수 없다 | 워크스페이스 한도 도달을 알리는 400 응답 |
| 오픈AI | 프로젝트별 요율·지출 한도 | 프로젝트 설정. 문서는 스테이징·프로덕션 프로젝트를 나누라고 권한다 | 문서에 따르면 “하드 지출 한도는 추적된 지출이 한도에 닿으면 해당 API 트래픽을 멈춘다” |
| 구글 | 키를 Gemini API 전용으로 제한 | AI Studio의 키 설정, Cloud 콘솔의 API·IP 제한 | 금액 상한이 아니라 키로 할 수 있는 일을 줄인다. 문서는 제한을 걸면 키가 유출됐을 때 피해를 최소화한다고 적었다 |
| 구글 | 클라우드 예산 | Cloud Billing | 알림 전용 예산은 “사용이나 지출을 자동으로 막지 않는다”. 지출 한도(spend cap) 예산을 쓰면 지원되는 서비스가 사람이 풀 때까지 멈춘다 |
표에서 가장 중요한 줄은 마지막 줄이다. 알림만 오는 예산을 걸어 놓고 안심하는 경우가 많다. 알림은 새벽에 터진 청구를 막지 못한다. 지출을 실제로 멈추는 것은 한도(cap)를 건 설정뿐이다. 앤스로픽 문서의 티어 상한도 알아 둘 만하다. 따로 한도를 걸지 않아도 월 지출에는 티어마다 천장이 있지만, 그 천장이 500달러에서 20만 달러까지 벌어져 있다. 개인 계정에 20만 달러 천장은 사실상 없는 것과 같다.
메일을 못 받았어도 해 둘 일: 키 하나의 최대 피해를 정해 두기
이번 사고에서 개발자가 가져갈 것은 오픈코드를 쓰느냐 마느냐가 아니다. 어떤 도구든 키를 맡기는 순간 그 도구의 보안 수준이 내 키의 보안 수준이 된다. 사고가 터진 뒤에 키를 바꾸는 건 늘 늦다. 터지기 전에 ’새도 이 정도에서 멈춘다’는 선을 그어 두는 게 맞다.
- 도구마다 키를 따로 쓴다. 한 도구가 뚫리면 그 키만 폐기하면 된다. 앤스로픽 키는 워크스페이스 하나에 묶어 만들 수 있고, 오픈AI 키는 프로젝트별로 만든다.
- 키에 만료일을 둔다. 오픈AI 문서는 프로젝트 키를 만들 때 만료일을 정하라고 “강하게 권장”한다. 잊어버린 키가 몇 달씩 살아 있는 일을 막아 준다.
- 월 한도는 알림이 아니라 정지 설정으로 건다. 위 표의 하드 한도·지출 한도 쪽이다.
- 키를 코드 저장소에 넣지 않고 환경 변수나 비밀 관리 서비스에 둔다. 구글 문서가 “키를 비밀번호처럼 다루고 깃 같은 소스 관리에 올리지 말라”고 적은 것과 같은 얘기다.
- 맡기는 위치를 알아 둔다. 콘솔에 연결했는지, 내 컴퓨터 파일에 있는지, 환경 변수인지 목록을 한 번 만들어 둔다. 사고 소식이 나왔을 때 “내 키가 거기 있나?“를 3분 안에 답할 수 있어야 한다.
비용 쪽 방어선은 애플리케이션 밖에 둘 수도 있다. 요청이 AI 서비스에 닿기 전에 달러 기준 상한을 거는 방법은 Cloudflare AI Gateway로 LLM API 비용·장애 제어에서 정리했다. 키를 한 곳에 모아 두면 편하지만, 그곳이 뚫렸을 때를 대비해 한도도 같이 걸어야 한다는 점은 같다.
또 하나. 스타트업 포춘은 오픈코드 문서가 에이전트를 샌드박스(격리된 실행 환경)에 가두지 않는다고 밝히고, 진짜 격리가 필요하면 도커나 가상 머신을 권한다고 지적했다. 코딩 에이전트는 내 파일을 읽고 명령을 실행한다. 이번 사고는 서버 쪽에서 났지만 로컬 쪽에도 같은 질문이 있다. 에이전트가 읽을 수 있는 폴더에 키 파일이 있다면, 에이전트가 오작동하는 날 그 키도 같이 읽힌다. AI 에이전트가 권한 밖으로 나간 사례는 정부 사이트 뚫은 게 해커 아닌 오픈AI 에이전트였다에서 다뤘다.
해커뉴스 스레드가 붙든 자리
오픈코드 해킹 스레드는 해커뉴스에서 650점대·댓글 100여 개로 올랐다. 댓글은 크게 세 갈래였다.
하나는 경위에 대한 의문이다. “오픈코드는 오픈소스인데 왜 서버가 키를 갖고 있느냐”는 질문에는 “추론 API 요금을 청구하려면 필요하다”, “오픈라우터처럼 내 키를 가져와 쓰는 방식이다”라는 추측성 답이 붙었다. 앞에서 본 것처럼 오픈코드 공식 문서는 오너·관리자가 외부 공급자를 연결할 수 있다고만 적는다. 키를 어떻게 보관했는지는 문서에 없다.
둘은 신뢰 논쟁이다. 과거에 개인정보 문제를 지적했다는 댓글이 올라왔고, 그것은 제목 자동 생성용 무료 모델 이야기라며 반박하는 댓글이 맞섰다. 이 글은 어느 쪽도 확인하지 못했고 판정하지 않는다. 이번 사고의 사실 관계와는 별개의 논쟁이다.
셋은 증류라는 말에 대한 의문이다. 앞에서 정리했다.
주의할 점이 하나 있다. 댓글과 X 게시물은 개인의 주장이다. “잔액이 소진됐다”는 말도, “원래 믿지 못할 도구였다”는 말도, 운영사가 확인한 사실과 같은 무게로 읽으면 안 된다. 이 글에서 확인된 사실로 쓴 것은 오픈코드 공식 게시물, 이메일 인용(해커뉴스 댓글과 스타트업 포춘의 인용이 서로 맞는다), 각 서비스의 공식 문서 세 가지뿐이다.
오늘 할 일 다섯 줄과 이 글의 확인 범위
- 메일함(스팸함 포함)에서 오픈코드 메일이 있는지 본다. 있으면 위 순서 그대로 한다.
- 내가 가진 외부 AI 키가 어디에 저장돼 있는지 목록을 만든다.
- 목록 중 남의 서버에 맡긴 키는 폐기하고 새로 만든다. 지금 하기 어려우면 최소한 사용 내역부터 열어 본다.
- 서비스마다 지출 한도를 ‘정지’ 형태로 건다. 알림만 켠 상태는 한도가 아니다.
- 도구마다 키를 따로 쓰고 만료일을 둔다.
오픈코드 해킹 건에서 이 글이 확인한 범위는 이렇다. 오픈코드 공식 X 게시물 두 건의 본문과 게시 시각, 해커뉴스 스레드의 메일 인용·점수·댓글, 스타트업 포춘·크립토 브리핑의 기사, 오픈코드·앤스로픽·오픈AI·구글의 공식 문서를 직접 읽었다. 크립토 브리핑은 공식 인용을 싣지 않았고 매체의 해석이 섞여 있어 핵심 사실 확인에는 쓰지 않았다. 노트북체크(Notebookcheck) 기사는 접속이 막혀 제목만 확인했다.
확인하지 못한 것은 네 가지다. 침입 경로와 정확한 시각, 영향받은 계정 수, 내 컴퓨터에 둔 키가 영향권이었는지, 보상 방침이다. 운영사가 후속 공지를 내면 이 글의 내용이 달라질 수 있다. 사고는 아직 진행 중이라고 공식 게시물이 말했으니, 이 글도 2026년 10월 18일 아침 기준의 기록이다.