핵심 요약
- 한 보안 연구원이 구글 개발자 포털의 쿠키 세션 서명 키가 쿠키 내부에 평문으로 노출되어 있는 결함을 발견했습니다.
- 서명 키 유출과 파이썬 피클(pickle) 역직렬화 취약점이 맞물려 인증 없이도 구글 서버에서 임의 코드를 실행할 수 있는 치명적인 상태였습니다.
- 구글은 이 취약점을 최상위 심각도(S0 RCE)로 인정하고 보고서 품질 가산점을 더해 총 9만 달러(약 1억 2천만 원)의 포상금을 지급했습니다.
요약 보안 연구원 사이먼 쾨크(Simon Koeck)가 구글의 개발자 문서 사이트 전체를 아우르는 심각한 원격 코드 실행(RCE) 취약점을 발견하고 구글로부터 9만 달러(한화 약 1억 2천만 원)의 포상금을 받은 상세 과정을 공개했습니다.
그는 계정 로그인 없이 접속 가능한 구글 개발자 포털의 OAuth 인증 엔드포인트(/oauth2authorize)를 테스트하던 중, 발급되는 플라스크(Flask) 세션 쿠키의 크기가 무려 1,200바이트에 달한다는 점에 주목했습니다. 플라스크 세션 쿠키는 암호화가 아닌 서명 방식이기 때문에 페이로드를 압축 해제하자 내부 구조가 그대로 드러났습니다.
쿠키 안에는 파이썬 객체를 직렬화한 피클(pickle) 데이터가 포함되어 있었는데, 이를 디컴파일해 확인한 결과 구글의 OAuth client_id와 client_secret이 평문 형태로 담겨 있었습니다. 심지어 연구원이 이 client_secret을 세션 서명 키(SECRET_KEY)로 대입해 오프라인에서 재계산하자 원본 쿠키 서명과 정확히 일치했습니다. 즉, 서명에 사용되는 비밀키가 서명 대상 데이터 안에 그대로 노출되어 있던 것입니다.
이로 인해 공격자는 임의의 값을 담은 위조 세션 쿠키를 생성할 수 있게 되었습니다. 더 심각한 것은 구글 서버의 콜백 로직이 세션 쿠키에서 가져온 데이터를 그대로 pickle.loads를 통해 역직렬화(unpickle)한다는 점이었습니다. 파이썬의 pickle 모듈은 역직렬화 과정에서 임의의 함수 호출을 실행할 수 있어, 서명 키 유출과 결합될 경우 인증 없이도 즉시 원격 코드 실행(RCE)이 가능했습니다.
연구원은 프로덕션 환경에 피해를 주지 않기 위해 time.sleep(N) 함수를 호출하는 페이로드를 제작해 테스트했습니다. 요청 지연 시간이 설정한 수치(3초, 5초, 8초 등)에 정확하게 맞춰 응답하는 것을 확인하여 코드 실행 취약점을 입증했습니다. 이 취약점은 단일 웹사이트에 그치지 않고 개발자 포털 플랫폼을 공유하는 developers.google.com, firebase.google.com, developer.android.com 등 다수의 핵심 구글 도메인 전반에 영향을 미쳤습니다.
구글 측은 보고를 접수한 뒤 위험도를 S0 등급으로 분류하고 기본 포상금 7만 5천 달러에 탁월한 보고서 품질 보너스 20%를 더해 총 9만 달러의 보상금을 지급했으며, 시크릿 교체 및 피클 직렬화 제거 등의 패치를 완료했습니다.
Sponsored · 광고