반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

March 20 ChatGPT outage: Here’s what happened

2023. 3. 27. 21:44 | Posted by 솔웅


반응형

An update on our findings, the actions we’ve taken, and technical details of the bug.

우리가 발견한 사항, 우리가 취한 조치, 버그에 대한 기술적 세부 사항에 대한 업데이트입니다.

 

 

March 20 ChatGPT outage: Here’s what happened (openai.com)

 

March 20 ChatGPT outage: Here’s what happened

An update on our findings, the actions we’ve taken, and technical details of the bug.

openai.com

 

We took ChatGPT offline earlier this week due to a bug in an open-source library which allowed some users to see titles from another active user’s chat history. It’s also possible that the first message of a newly-created conversation was visible in someone else’s chat history if both users were active around the same time.

 

일부 사용자가 다른 활성 사용자의 채팅 기록에서 제목을 볼 수 있도록 허용하는 오픈 소스 라이브러리의 버그로 인해 이번 주 초에 ChatGPT를 오프라인으로 전환했습니다. 두 사용자가 거의 같은 시간에 활성화된 경우 새로 만든 대화의 첫 번째 메시지가 다른 사람의 채팅 기록에 표시되었을 수도 있습니다.

 

The bug is now patched. We were able to restore both the ChatGPT service and, later, its chat history feature, with the exception of a few hours of history. As promised, we’re publishing more technical details of this problem below.

 

이제 버그가 패치되었습니다. 우리는 몇 시간의 기록을 제외하고 ChatGPT 서비스와 나중에 채팅 기록 기능을 모두 복원할 수 있었습니다. 약속한 대로 이 문제에 대한 자세한 기술 정보를 아래에 게시하고 있습니다.

 

Upon deeper investigation, we also discovered that the same bug may have caused the unintentional visibility of payment-related information of 1.2% of the ChatGPT Plus subscribers who were active during a specific nine-hour window. In the hours before we took ChatGPT offline on Monday, it was possible for some users to see another active user’s first and last name, email address, payment address, the last four digits (only) of a credit card number, and credit card expiration date. Full credit card numbers were not exposed at any time. 

 

심층 조사 결과 동일한 버그로 인해 특정 9시간 동안 활성화된 ChatGPT Plus 가입자의 1.2%가 의도하지 않게 결제 관련 정보를 볼 수 있었던 것으로 나타났습니다. 월요일에 ChatGPT를 오프라인으로 전환하기 몇 시간 전에 일부 사용자가 다른 활성 사용자의 이름과 성, 이메일 주소, 지불 주소, 신용 카드 번호의 마지막 4자리(만) 및 신용 카드 만료를 볼 수 있었습니다. 날짜. 전체 신용 카드 번호는 노출되지 않았습니다.

We believe the number of users whose data was actually revealed to someone else is extremely low. To access this information, a ChatGPT Plus subscriber would have needed to do one of the following:

실제로 다른 사람에게 데이터가 공개된 사용자의 수는 극히 적다고 생각합니다. 이 정보에 액세스하려면 ChatGPT Plus 가입자가 다음 중 하나를 수행해야 합니다.

 

  • Open a subscription confirmation email sent on Monday, March 20, between 1 a.m. and 10 a.m. Pacific time. Due to the bug, some subscription confirmation emails generated during that window were sent to the wrong users. These emails contained the last four digits of another user’s credit card number, but full credit card numbers did not appear. It’s possible that a small number of subscription confirmation emails might have been incorrectly addressed prior to March 20, although we have not confirmed any instances of this.

 

  • 태평양 표준시로 3월 20일 월요일 오전 1시에서 오전 10시 사이에 전송된 구독 확인 이메일을 엽니다. 버그로 인해 해당 기간 동안 생성된 일부 구독 확인 이메일이 잘못된 사용자에게 전송되었습니다. 이 이메일에는 다른 사용자의 신용 카드 번호의 마지막 4자리가 포함되어 있었지만 전체 신용 카드 번호는 나타나지 않았습니다. 3월 20일 이전에 소수의 구독 확인 이메일 주소가 잘못 지정되었을 수 있지만 아직 확인된 바는 없습니다.

 

  • In ChatGPT, click on “My account,” then “Manage my subscription” between 1 a.m. and 10 a.m. Pacific time on Monday, March 20. During this window, another active ChatGPT Plus user’s first and last name, email address, payment address, the last four digits (only) of a credit card number, and credit card expiration date might have been visible. It’s possible that this also could have occurred prior to March 20, although we have not confirmed any instances of this.

 

  • ChatGPT에서 3월 20일 월요일 오전 1시에서 오전 10시(태평양 표준시 기준) 사이에 "내 계정"을 클릭한 다음 "내 구독 관리"를 클릭합니다. 이 기간 동안 다른 활성 ChatGPT Plus 사용자의 성과 이름, 이메일 주소, 지불 주소, 신용 카드 번호의 마지막 네 자리(만) 및 신용 카드 만료 날짜가 표시되었을 수 있습니다. 3월 20일 이전에 이 일이 발생했을 가능성도 있지만 아직 확인된 바는 없습니다.

 

We have reached out to notify affected users that their payment information may have been exposed. We are confident that there is no ongoing risk to users’ data. 

 

영향을 받는 사용자에게 결제 정보가 노출되었을 수 있음을 알리기 위해 연락했습니다. 우리는 사용자 데이터에 대한 지속적인 위험이 없다고 확신합니다.

 

Everyone at OpenAI is committed to protecting our users’ privacy and keeping their data safe. It’s a responsibility we take incredibly seriously. Unfortunately, this week we fell short of that commitment, and of our users’ expectations. We apologize again to our users and to the entire ChatGPT community and will work diligently to rebuild trust.

 

OpenAI의 모든 사람은 사용자의 개인 정보를 보호하고 데이터를 안전하게 유지하기 위해 최선을 다하고 있습니다. 그것은 우리가 믿을 수 없을 정도로 심각하게 생각하는 책임입니다. 안타깝게도 이번 주에 우리는 그 약속과 사용자의 기대에 미치지 못했습니다. 사용자와 전체 ChatGPT 커뮤니티에 다시 한 번 사과드리며 신뢰를 회복하기 위해 열심히 노력하겠습니다.

 

Technical details

The bug was discovered in the Redis client open-source library, redis-py. As soon as we identified the bug, we reached out to the Redis maintainers with a patch to resolve the issue. Here’s how the bug worked: 

이 버그는 Redis 클라이언트 오픈 소스 라이브러리인 redis-py에서 발견되었습니다. 버그를 확인하자마자 우리는 문제를 해결하기 위한 패치와 함께 Redis 관리자에게 연락했습니다. 버그의 작동 방식은 다음과 같습니다.

 

  • We use Redis to cache user information in our server so we don’t need to check our database for every request. 
  • Redis를 사용하여 서버의 사용자 정보를 캐시하므로 모든 요청에 대해 데이터베이스를 확인할 필요가 없습니다.
  • We use Redis Cluster to distribute this load over multiple Redis instances. 
  • Redis 클러스터를 사용하여 이 로드를 여러 Redis 인스턴스에 분산합니다.
  • We use the redis-py library to interface with Redis from our Python server, which runs with Asyncio. 
  • redis-py 라이브러리를 사용하여 Asyncio와 함께 실행되는 Python 서버에서 Redis와 인터페이스합니다.
  • The library maintains a shared pool of connections between the server and the cluster, and recycles a connection to be used for another request once done.
  • 라이브러리는 서버와 클러스터 간의 연결 공유 풀을 유지 관리하고 완료되면 다른 요청에 사용할 연결을 재활용합니다.
  • When using Asyncio, requests and responses with redis-py behave as two queues: the caller pushes a request onto the incoming queue, and will pop a response from the outgoing queue, and then return the connection to the pool.
  • Asyncio를 사용할 때 redis-py를 사용한 요청 및 응답은 두 개의 대기열로 작동합니다. 호출자는 요청을 수신 대기열에 푸시하고 발신 대기열에서 응답을 팝한 다음 연결을 풀로 반환합니다.
  • If a request is canceled after the request is pushed onto the incoming queue, but before the response popped from the outgoing queue, we see our bug: the connection thus becomes corrupted and the next response that’s dequeued for an unrelated request can receive data left behind in the connection. 
  • 만약 요청이 incoming queue에 푸시된 후 요청이 취소되었고 outgoing queue에서 응답이 팝되기 전, 그 사이에서 버그가 나타납니다. 따라서 connection 은 손상이 되고 다음 response 가 관련 없는 request와 dequeued 됨으로서 그 connection에 그대로 남은 데이터를 받을 수 있게 되는 겁니다. 
  • In most cases, this results in an unrecoverable server error, and the user will have to try their request again. 
  • 대부분의 경우 이로 인해 unrecoverable server error가 발생하고 사용자는 request 다시 시도해야 합니다.
  • But in some cases the corrupted data happens to match the data type the requester was expecting, and so what gets returned from the cache appears valid, even if it belongs to another user.
  • 그러나 경우에 따라 손상된 데이터 타입이 요청자가 기대하고 있는 데이터 타입과 일치하게 되고 그로 인해서 cache에 반환된 데이터가 다른 사용자에 속해 있는 데이터 임에도 불구하고 유효한 것으로 나타납니다. 
  • At 1 a.m. Pacific time on Monday, March 20, we inadvertently introduced a change to our server that caused a spike in Redis request cancellations. This created a small probability for each connection to return bad data.
  • 3월 20일 월요일 오전 1시(태평양 표준시)에 우리는 실수로 Redis  request cancellations 급증을 초래하는 변경을 서버에 행했습니다. 이로 인해 각 연결이 잘못된 데이터를 반환할 가능성이 적습니다. 이 변경으로 인해 각 연결들은 잘못된 데이터를 return 할 가능성이 더 줄어 들었습니다.

This bug only appeared in the Asyncio redis-py client for Redis Cluster, and has now been fixed.

이 버그는 Redis Cluster용 Asyncio redis-py 클라이언트에서만 나타났으며 이제 수정되었습니다.

 

Actions we’ve taken

As our investigation wraps up, supporting and informing our users is our top priority. 

조사가 마무리됨에 따라 이제 사용자를 지원하고 알리는 것이 우리의 최우선 과제입니다.

 

We have taken the following actions to improve our systems:

시스템 개선을 위해 다음과 같은 조치를 취했습니다.

  • Extensively tested our fix to the underlying bug.
  • 기본 버그에 대한 수정 사항을 광범위하게 테스트했습니다.
  • Added redundant checks to ensure the data returned by our Redis cache matches the requesting user.
  • Redis 캐시에서 반환된 데이터가 요청한 사용자와 일치하는지 확인하기 위해 중복 검사를 추가했습니다.
  • Programatically examined our logs to make sure that all messages are only available to the correct user.
  • 모든 메시지가 올바른 사용자에게만 제공되는지 확인하기 위해 프로그래밍 방식으로 로그를 검사했습니다.
  • Correlated several data sources to precisely identify the affected users so that we can notify them.
  • 영향을 받는 사용자를 정확하게 식별하여 알릴 수 있도록 여러 데이터 소스를 연관시켰습니다.
  • Improved logging to identify when this is happening and fully confirm it has stopped.
  • 이러한 일이 발생하는 시기를 식별하고 중지되었는지 완전히 확인하기 위해 로깅이 개선되었습니다.
  • Improved the robustness and scale of our Redis cluster to reduce the likelihood of connection errors at extreme load.
  • Redis 클러스터의 견고성과 규모를 개선하여 극한 부하에서 연결 오류 가능성을 줄였습니다.

Where we go from here

The Redis open-source maintainers have been fantastic collaborators, swiftly addressing the bug and rolling out a patch.

Redis 오픈 소스 유지 관리자는 버그를 신속하게 해결하고 패치를 출시하는 환상적인 협력자였습니다.

 

Redis, along with other open-source software, plays a crucial role in our research efforts. Their significance cannot be understated—we would not have been able to scale ChatGPT without Redis.

 

Redis는 다른 오픈 소스 소프트웨어와 함께 우리의 연구 노력에서 중요한 역할을 합니다. Redis가 없었다면 ChatGPT를 확장할 수 없었을 것입니다.

 

We’re dedicated to continually supporting and contributing to the Redis community.

우리는 Redis 커뮤니티를 지속적으로 지원하고 기여하기 위해 최선을 다하고 있습니다.

반응형