Неделей ранее мы вынуждены были временно отключить сервис ChatGPT из-за ошибки в открытом исходном коде библиотеки, которая позволяла некоторым пользователям видеть заголовки из истории чата другого активного пользователя. Также возможно, что первое сообщение во вновь созданном разговоре было видно в чат-истории другого пользователя, если оба пользователи были активны примерно в одно и то же время.
Однако ошибка теперь устранена. Мы восстановили работу сервиса ChatGPT и позже возможность просмотра чат-истории, за исключением нескольких часов истории. Как и обещали, мы публикуем более подробную техническую информацию об этой проблеме ниже.
При более глубоком исследовании мы также обнаружили, что та же ошибка могла вызвать непреднамеренную видимость информации, связанной с оплатой, у 1,2% пользователей ChatGPT Plus, которые были активны в течение определенного девятичасового периода. В часы перед тем, как мы временно отключили ChatGPT в понедельник, было возможно для некоторых пользователей видеть имя и фамилию другого активного пользователя, адрес электронной почты, адрес для оплаты, только последние четыре цифры номера кредитной карты и срок ее действия. Полные номера кредитных карт в любое время не были доступны.
Мы считаем, что количество пользователей, чьи данные на самом деле были раскрыты кому-то еще, чрезвычайно низко. Чтобы получить доступ к этой информации, подписчику ChatGPT Plus было необходимо сделать одно из следующих действий:
Открыть электронное письмо с подтверждением подписки, отправленное в понедельник, 20 марта, между 1 и 10 часами тихоокеанского времени. Из-за ошибки некоторые подтверждения подписок, созданные в течение этого периода, были отправлены не тем пользователям. В этих электронных письмах содержались только последние четыре цифры номера кредитной карты другого пользователя, полные номера кредитных карт не отображались.
Возможно, что некоторые письма с подтверждением подписки могли быть неправильно адресованы до 20 марта, хотя мы не подтвердили такие случаи.
Если вы являетесь пользователем ChatGPT Plus и были активны в указанный промежуток времени, мы рекомендуем следующие меры предосторожности:
Ошибка была обнаружена в библиотеке с открытым исходным кодом Redis-клиента, redis-py. Как только мы выявили эту ошибку, мы связались с разработчиками Redis с патчем для её исправления. Вот как работала эта ошибка:
По завершении нашего расследования, нашей главной задачей стало поддерживать и информировать наших пользователей.
Мы предприняли следующие действия для улучшения наших систем:
Дальнейшие шаги
Сохранение наших пользователей и улучшение наших систем остаются нашими главными приоритетами. Мы постоянно работаем над улучшением наших систем, чтобы обеспечить максимальную безопасность и конфиденциальность для наших пользователей.
Мы также планируем сотрудничать с сообществом Redis, чтобы обеспечить надежную работу и безопасность Redis-кластера. Мы планируем внести свой вклад в сообщество Redis, чтобы поддерживать и улучшать их открытое программное обеспечение и продолжать использовать Redis в нашей работе.
Мы благодарны всем нашим пользователям за их понимание и терпение во время этого процесса. Мы принимаем к сведению все комментарии и обратную связь от наших пользователей и обязуемся продолжать делать все возможное, чтобы обеспечить наилучший опыт использования ChatGPT.
Однако ошибка теперь устранена. Мы восстановили работу сервиса ChatGPT и позже возможность просмотра чат-истории, за исключением нескольких часов истории. Как и обещали, мы публикуем более подробную техническую информацию об этой проблеме ниже.
При более глубоком исследовании мы также обнаружили, что та же ошибка могла вызвать непреднамеренную видимость информации, связанной с оплатой, у 1,2% пользователей ChatGPT Plus, которые были активны в течение определенного девятичасового периода. В часы перед тем, как мы временно отключили ChatGPT в понедельник, было возможно для некоторых пользователей видеть имя и фамилию другого активного пользователя, адрес электронной почты, адрес для оплаты, только последние четыре цифры номера кредитной карты и срок ее действия. Полные номера кредитных карт в любое время не были доступны.
Мы считаем, что количество пользователей, чьи данные на самом деле были раскрыты кому-то еще, чрезвычайно низко. Чтобы получить доступ к этой информации, подписчику ChatGPT Plus было необходимо сделать одно из следующих действий:
Открыть электронное письмо с подтверждением подписки, отправленное в понедельник, 20 марта, между 1 и 10 часами тихоокеанского времени. Из-за ошибки некоторые подтверждения подписок, созданные в течение этого периода, были отправлены не тем пользователям. В этих электронных письмах содержались только последние четыре цифры номера кредитной карты другого пользователя, полные номера кредитных карт не отображались.
Возможно, что некоторые письма с подтверждением подписки могли быть неправильно адресованы до 20 марта, хотя мы не подтвердили такие случаи.
Если вы являетесь пользователем ChatGPT Plus и были активны в указанный промежуток времени, мы рекомендуем следующие меры предосторожности:
- Проверьте последние транзакции на своей кредитной карте, чтобы убедиться, что нет незнакомых платежей.
- Будьте бдительны по отношению к любой подозрительной электронной почте, которую вы можете получить, которая может содержать запрос на вашу личную или финансовую информацию.
- Если вы заметили подозрительную активность в своей учетной записи ChatGPT или на своей кредитной карте, немедленно свяжитесь с нами по адресу support@chatgpt.com, чтобы мы могли помочь вам решить эту проблему.
Технические подробности:
Ошибка была обнаружена в библиотеке с открытым исходным кодом Redis-клиента, redis-py. Как только мы выявили эту ошибку, мы связались с разработчиками Redis с патчем для её исправления. Вот как работала эта ошибка:
- Мы используем Redis для кэширования информации о пользователе на нашем сервере, чтобы нам не нужно было проверять нашу базу данных для каждого запроса.
- Мы используем Redis Cluster для распределения этой нагрузки на несколько экземпляров Redis.
- Мы используем библиотеку redis-py для взаимодействия с Redis из нашего сервера Python, который работает с Asyncio.
- Библиотека поддерживает общий пул соединений между сервером и кластером, и перерабатывает соединение, чтобы использовать его для другого запроса, как только запрос закончен.
- При использовании Asyncio запросы и ответы с redis-py работают как две очереди: вызывающий помещает запрос во входящую очередь, а затем получает ответ из исходящей очереди, и затем возвращает соединение в пул.
- Если запрос отменяется после того, как запрос был помещен во входящую очередь, но перед тем, как ответ был извлечен из исходящей очереди, мы видим нашу ошибку: соединение становится испорченным, и следующий ответ, который извлекается для другого запроса, может получить данные, оставленные в соединении.
- В большинстве случаев это приводит к неустранимой ошибке сервера, и пользователю придется повторить свой запрос.
- Но в некоторых случаях испорченные данные оказываются соответствующими типу данных, который ожидал запрашивающий, и то, что возвращается из кэша, выглядит действительным, даже если оно принадлежит другому пользователю.
- В 1 час по тихоокеанскому времени в понедельник 20 марта мы случайно внесли изменение в наш сервер, которое вызвало всплеск отмен запросов к Redis. Это создало небольшую вероятность того, что каждое соединение вернет неверные данные.
Эта ошибка появлялась только в асинхронном клиенте redis-py для Redis Cluster и сейчас исправлена.
Принятые меры
По завершении нашего расследования, нашей главной задачей стало поддерживать и информировать наших пользователей.
Мы предприняли следующие действия для улучшения наших систем:
- Тщательно протестировали исправление основной ошибки.
- Добавили резервные проверки, чтобы гарантировать, что данные, возвращаемые нашим кэшем Redis, соответствуют запрашивающему пользователю.
- Программно изучили наши журналы, чтобы убедиться, что все сообщения доступны только правильному пользователю.
- Сопоставили несколько источников данных, чтобы точно определить затронутых пользователей и уведомить их.
- Улучшили ведение журналов, чтобы идентифицировать случаи возникновения этой проблемы и подтвердить, что она была устранена.
- Улучшили надежность и масштабируемость нашего кластера Redis, чтобы снизить вероятность ошибок соединения при экстремальных нагрузках.
Дальнейшие шаги
Сохранение наших пользователей и улучшение наших систем остаются нашими главными приоритетами. Мы постоянно работаем над улучшением наших систем, чтобы обеспечить максимальную безопасность и конфиденциальность для наших пользователей.
Мы также планируем сотрудничать с сообществом Redis, чтобы обеспечить надежную работу и безопасность Redis-кластера. Мы планируем внести свой вклад в сообщество Redis, чтобы поддерживать и улучшать их открытое программное обеспечение и продолжать использовать Redis в нашей работе.
Мы благодарны всем нашим пользователям за их понимание и терпение во время этого процесса. Мы принимаем к сведению все комментарии и обратную связь от наших пользователей и обязуемся продолжать делать все возможное, чтобы обеспечить наилучший опыт использования ChatGPT.