Утечка данных: как ChatGPT исправил ошибку в 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.
 
Назад
Сверху Снизу