4P by GN⁺ 2일전 | ★ favorite | 댓글 3개
  • 2025년 8월 3일 DrawAFish! 웹사이트에서 약 6시간 동안 대규모 보안 사고가 발생함
  • 관리자 비밀번호 유출, 인증 누락 API, JWT 취약점 등 핵심 보안 취약점이 복합적으로 공격에 노출됨
  • 결과적으로 모든 사용자명이 모욕적 표현으로 변경되고, 불쾌한 그림이 승인됨과 동시에 기존 안전한 그림이 삭제됨
  • 수작업 복구, 인증 로직 수정, 백업의 확인 등으로 문제 해결을 진행함
  • 주된 교훈은 빠른 개발(“vibe-coding”)과 테스트·코드 리뷰 부족이 보안상 심각한 결과를 야기할 수 있다는 점

DrawAFish.com 개요 및 2025년 8월 3일 사고 요약

  • DrawAFish.com 은 사용자가 직접 물고기를 그리고 다른 사용자들과 함께 수조에서 수영시키는 재미 요소가 있는 웹사이트
  • 2025년 8월 1일, Hacker News 1위에 오르며 큰 주목을 받았음. 개발자는 Copilot 등의 도구로 빠르게 기능을 구현하는 ‘vibe-coding’ 방식을 채택
  • 그러나 2025년 8월 3일 새벽, 심각한 보안 사고가 발생함
  • 약 6시간 동안 온갖 사용자명이 저속한 표현으로 변경되고, 부적절한 그림이 승인되는 등 무질서한 상황이 발생했음
  • 결국 관리자가 수동으로 원복 작업을 수행함

취약점 상세 분석

1. 과거 유출된 6자리 관리자 비밀번호

  • 개발자는 초기에 본인 어린 시절 ID와 비밀번호(6자리)를 관리자 계정에 사용함
  • 이 비밀번호가 과거 Neopets 등 사이트 데이터 유출을 통해 이미 온라인에 공개되어 있었음
  • 개발자는 이후 Google Auth를 사용했지만, 이전 비밀번호를 삭제하지 않아 공격자에게 취약점이 남아있었음
  • 공격자는 데이터 유출된 정보를 이용해 관리자 인증에 성공했고, 모욕적 그림 승인 및 정상 그림 삭제 등의 악의적 행위를 함

2. 인증 없는 사용자명 변경 API

  • 프로필 백엔드 개발 시 ‘빠른 개발’을 위해 인증 확인 기능 없이 사용자명 변경 API를 구현함
  • 실질적으로 누구든 임의로 사용자명을 변경할 수 있었음

3. JWT 검증 미흡

  • JWT 토큰 기반 인증에서, 토큰과 userId/email의 매칭 없이 관리자 작업이 수행 가능하게 구현함
  • 즉, 공격자가 관리자 인증 정보로 발급된 토큰만 있으면 누구의 요청에도 관리자 권한으로 사용할 수 있었음
  • 흥미롭게도, 한 Hacker News 유저가 이 취약점을 이용하여 침입자보다 먼저 부적절한 자료를 삭제하며 비상 대응에 기여함

복구 과정

  • 개발자는 아침 7시 45분경 이상 상황을 인지해 즉시 데스크탑에서 대응을 시작함
  • firebase 백업을 미설정 상태여서 백업에 의존하지 못했고, 코드를 신속하게 수정해 인증 강제 적용
  • 모든 모더레이션 로그를 추적하여 악의적 작업을 취소하는 스크립트를 개발함 (이 역시 vibe-coding 방식으로 작성)
  • 비상시에 관리자 권한을 사용한 제3자(Hacker News 유저)의 접근 계정도 차단 후 연락하여 코드베이스의 시큐리티 리팩터링 관련 피드백을 받고 추가 패치 진행함

개발 문화와 교훈

  • 개발자는 “vibe-coding”, 즉 빠른 프로토타이핑과 최소한의 검토 문화가 재미와 높은 생산성을 주지만, 실제로는 심각한 보안 취약점으로 이어질 수 있음을 경험함
  • LLM(Copilot)은 빠른 코드 생산에 매우 유용하나, 코드의 품질과 보안 책임은 개발자 본인에게 있음을 역설함
  • 테스트, 인증 로직, 코드 리뷰 등 기본적인 보안 절차를 생략한 결과, 소규모 프로젝트에서도 외부 공격에 극도로 취약해질 수 있음을 입증한 사례임

결론 및 인사이트

  • DrawAFish.com 사례는 실제 서비스 운영 환경에서 흔히 간과하는 기초 보안 조치의 중요성을 보여줌
  • 오픈 소스 도구 및 빠른 개발 도구에 의존할 때에도, 반드시 테스트, 인증, 코드 리뷰, 비밀번호 관리 등 기본 이슈를 체크해야 함
  • 예상치 못한 규모의 주목(예: Hacker News 상위 랭크)에 따라 공격 표면과 리스크가 급격히 확대될 수 있음
  • Postmortem을 투명하게 기록함으로써, 향후 유사 스타트업이나 개인 개발자들에게 현실적인 보안 교훈을 전달함

vibe-coded의 "S"는 Security의 약자임

흥미롭게도, 한 Hacker News 유저가 이 취약점을 이용하여 침입자보다 먼저 부적절한 자료를 삭제하며 비상 대응에 기여함

Hacker News 의견
  • 나도 빠른 속도로 일하는 게 정말 재밌음, 코드 리뷰 같은 거 안 하고 그냥 바로바로 푸시하는 게 즐거움, 그런데 이번 포스트모템을 보니까 내 사이드 프로젝트가 왜 자주 중단됐는지 알겠음, 항상 결국에는 지루한 실제 작업에 닿게 되고 그 부분에서 멈추게 됨

  • Firebase인지 궁금해짐, 무료 티어를 계속 썼는지, 아니면 누가 악의적으로 공격해서 아침에 일어나보니 다섯 자리 숫자 요금 청구서를 받았는지 궁금함

  • 나는 슬러피쉬 사건을 직접 겪은 '운 좋은' 사람 중 한 명임, 보안 쪽에서 일하다 보니 너무 노골적인 모습에 웃으면서도, HN에는 이걸 제대로 도울 시간 있는 사람이 곧 나타날 거라는 걸 알았음, 이런 vibe-coded 프로젝트도 자세히 문서화된 포스트모템이 공개되어 좋았음, 요즘은 프로덕션에 분위기만 따르는 코드(vibe-coded)가 나의 IR(Incident Response) 업무에서 많이 보이지만, 이렇게 작은 프로젝트에서까지 잘 정리된 걸 보니 인상적임

    • 사람들이 'vibe coding'이 문제였다고만 하지만, 사실 최소 두 가지 문제—'테스트용 admin 계정 남겨두기'와 '토큰은 확인했지만 교차검증은 하지 않기'—는 AI나 vibe coding하지 않아도 일반적으로 벌어지는 현상임
    • 스와스티카 형태의 물고기(‘스와스티카프’) 스크린샷이라도 있었으면 좋았을 텐데, 실제로 못 봐서 아쉬움
  • 이 포스트모템이 특히 vibe-coded 앱이라서 더 흥미롭게 느껴짐, 혹시 Lego House에 있는 물고기 만드는 전시에서 영감을 받은 건지 궁금함, 최근에 다녀왔는데 내가 만든 물고기가 다른 물고기랑 같이 수영하는 게 정말 중독적이었음 Lego House Build-a-Fish 유튜브 영상

    • 이 전시는 몰랐음, St Louis aquarium에서 색칠한 물고기가 실제로 수영하는 것과 2016년쯤 Google의 Quickdraw에서 영감을 받았음
  • 누군가가 보안 취약점을 이용해서 실제 공격을 막으려 했다는 게 정말 놀라움

    • 이런 모습은 예전에도 종종 있었음, 어떤 웜/익스플로잇은 스스로 취약점을 패치해서 막기도 했었음
    • 몇 년 전에 FBI가 EternalBlue 익스플로잇을 막기 위해 비슷한 방식으로 움직였다는 기사를 본 적 있음(익스플로잇 이름은 정확하지 않을 수도 있음)
    • 사람들은 정말 놀라운 존재임
  • vibe-coded의 "S"는 Security의 약자임

    • "S"는 뱀... 아니면 용의 약자일지도 모름
  • 완전 새로운 아이디어를 떠올리고, 직접 만들어보고, 많은 걸 배웠으면서, 전문가답게 실패한 부분은 부끄러워하는 사람이야말로 진짜 멋진 전문가임, 만약 10만 달러를 잃지도 않고, 네트워크가 망가지지도 않고, 직장을 잃지도 않았다면, 일 년 뒤엔 이 일들을 웃으면서 추억할 수 있을 것임

  • 지금 그 사이트에 스와스티카 물고기가 올라와 있었음, 누군가 물고기 모양 안에 넣어서 필터를 우회함 문제의 그림 링크, 현재는 삭제됨

    • "Balls"라는 글씨가 써진 물고기도 있었음 이 링크에서 볼 수 있음, 이 정도면 생각보다 별로 문제될 것도 없다고 생각함
    • 저 물고기는 부처님의 손길이 느껴지는 수준임
  • 현재 인증 없이 어떤 물고기든 투표(최대 분당 20번/IP)가 가능함, POST로 다음 주소 사용 가능함 투표 API 링크 {"fishId":"xxxx","vote":"up"}

    • 사실 일부러 그렇게 설계함, 어떤 물고기는 조금만 좋아하고 어떤 건 진짜 많이 좋아할 수도 있으니, 마음껏 좋아요/싫어요 할 수 있도록 만들었음
  • vibe-coded 웹사이트에 대해 포스트모템을 남긴 것이 정말 마음에 듦, 많은 사람들이 기술을 너무 진지하게만 대하는데 이렇게 가볍고 재밌게 바라보는 시선이 신선하고, 작은 사이드 프로젝트 입장에서 굉장히 흥미롭고 의미있게 느껴짐