2023년 3월 20일 태평양 시간 오전 1시, OpenAI는 ChatGPT 서버에 변경을 도입했고 이로 인해 Redis 요청 취소가 급증했다. OpenAI는 모든 요청마다 데이터베이스를 조회하지 않도록 사용자 정보를 캐시하는 데 Redis를 사용하며, Python 서버는 요청 간에 연결을 재사용하는 redis-py 라이브러리를 통해 캐시와 통신한다.

Asyncio 환경에서는 요청이 대기열에 들어간 후 응답이 도착하기 전에 취소되면 연결이 손상되며, 그다음의 무관한 요청이 그 연결에 남아 있던 데이터를 받을 수 있다. 일부 경우 반환된 데이터가 요청자가 기대한 것과 일치했기 때문에 한 사용자가 다른 활성 사용자의 채팅 기록 제목을 보게 되었고, 9시간의 구간 동안 일부 ChatGPT Plus 구독자는 다른 사용자의 이름, 이메일, 결제 주소, 카드 유형, 만료일 및 카드 번호 마지막 네 자리를 볼 수 있었다. 전체 카드 번호는 결코 노출되지 않았다.

OpenAI는 ChatGPT를 오프라인으로 전환하고 redis-py의 버그를 패치했으며, 요청별 데이터에 대한 중복 검사를 추가하고 로깅을 개선했으며 영향을 받은 사용자에게 통지했다. OpenAI는 노출된 결제 정보가 해당 구간 동안 활성 상태였던 ChatGPT Plus 구독자의 1.2%에 해당한다고 추정했으며, 데이터가 실제로 다른 사람에게 공개된 사용자의 수는 극히 적었다고 밝혔다.

ChatGPT가 오프라인으로 전환되었고, 9시간의 구간 동안 활성 ChatGPT Plus 구독자의 1.2%에 해당하는 결제 관련 정보가 노출되었다. 전체 카드 번호는 노출되지 않았다.

공유 연결 풀이 취소된 요청이 이후의 응답을 손상시킬 수 없다고 가정했다. 이것이 redis-py의 경쟁 조건이다.

3월 20일의 변경으로 취소가 급증하면서 드문 버그가 현실적인 노출 사고로 바뀌었다.

ChatGPT의 캐시에는 개인 정보와 결제 데이터가 있었기 때문에 캐시 버그가 프라이버시 사고가 되었다.

캐시 경로에서는 반환된 데이터가 요청한 사용자의 것인지 확인하는 검증이 전혀 없었다.

풀링된 캐시 연결이 여러 사용자에게 서비스를 제공할 때는 모든 응답이 요청자에 대해 검증되어야 하며, 취소를 급증시키는 변경은 단순한 장애가 아니라 잠재적인 격리 위반이다.

OpenAI는 며칠 안에(몇 시간 분량을 제외하고) 채팅 기록을 복구했고 Redis 유지관리자들은 패치를 배포했다. 이 사건은 즉각적인 규제 당국의 주목을 받았다. 3월 31일 이탈리아의 가란테(Garante)는 3월 20일의 데이터 침해를 비롯한 여러 우려를 이유로 ChatGPT를 일시적으로 금지했으며, OpenAI는 최대 2천만 유로 또는 전 세계 매출의 4%에 달할 수 있는 벌금에 직면한 가운데 이탈리아에서 서비스를 비활성화했다. 이 사건은 AI 서비스의 캐싱 계층이 얼마나 빠르게 확장 문제를 데이터 보호 위기로 바꿀 수 있는지를 보여주는 참조 사례가 되었다.

근거 확인하기

출처

  1. March 20 ChatGPT outage: Here's what happened OpenAI · web.archive.org ·
  2. A bug revealed ChatGPT users' chat history, personal and billing data Help Net Security · helpnetsecurity.com ·
  3. Italy curbs ChatGPT, starts probe over privacy concerns Reuters · tech.yahoo.com ·