[컴] ChatGPT 에서 다른 사용자의 개인정보와 채팅제목이 노출되던 이슈, 2023-03-20

openAI 이슈 / 챗gpt /

ChatGPT 에서 다른 사용자의 개인정보와 채팅제목이 노출되던 이슈, 2023-03-20

2023년 3월 20일, chatgpt에서 특정사용자가 채팅기록 사이드바에서 다른 사용자의 대화에 대한 간략한 설명을 볼 수 있었다.(ref. 3)

redis-py library 의 이슈로 다른 사용자의 개인 정보와 채팅 제목이 노출되었다고 한다.

redis-py library 의 이슈

github issue 에 가면, 아래와 같은 재현 code를 확인할 수 있다.

import asyncio
from redis.asyncio import Redis
import sys


async def main():
    myhost, mypassword = sys.argv[1:]
    async with Redis(host=myhost, password=mypassword, ssl=True, single_connection_client=True) as r:

        await r.set('foo', 'foo')
        await r.set('bar', 'bar')

        t = asyncio.create_task(r.get('foo'))
        await asyncio.sleep(0.001)
        t.cancel()
        try:
            await t
            print('try again, we did not cancel the task in time')
        except asyncio.CancelledError:
            print('managed to cancel the task, connection is left open with unread response')

        print('bar:', await r.get('bar'))
        print('ping:', await r.ping())
        print('foo:', await r.get('foo'))


if __name__ == '__main__':
    asyncio.run(main())
$ python redis_cancel.py hostname password
managed to cancel the task, connection is left open with unread response
bar: b'foo'
ping: False
foo: b'PONG'

대략 그림으로 설명하면 이런 모습이다.

redis-py library 의 comuunicatino queue

위 그림에서 ’파란색’부분이 t에서 사용했던 부분인데, 이것이 connection 이 cancel 됐을때도 계속 남아있어서, 그 다음 command 인 r.get('bar') 를 send 할 때, r.get('foo') 가 대신 보내지는 것인 듯 하다. 그래서 결과가 하나씩 밀려서 나온다.

Reference

  1. OpenAI Reveals Redis Bug Behind ChatGPT User Data Exposure Incident, 2023-03-25
  2. Off by 1 - Canceling async Redis command leaves connection open, in unsafe state for future commands · Issue #2624 · redis/redis-py · GitHub
  3. ChatGPT Users Report Being Able to See Random People’s Chat Histories

댓글 없음:

댓글 쓰기