요약
구글 개발자 문서 사이트의 쿠키에 서명 키가 들어 있어 원격 코드 실행까지 가능했습니다.
보안 연구자 지몬 쾨크가 구글 버그 바운티(취약점 신고 포상금)에서 9만 달러를 받은 취약점을 공개했습니다. 구글 개발자 문서 사이트들이 함께 쓰는 로그인 흐름을 살피다 찾은 문제입니다. 8월 6일 신고했고 10월 7일 고쳐졌습니다.
왜 중요한가
- 서명 키를 서명 대상 안에 넣은 실수 하나가 pickle 사용과 겹쳐 로그인 없는 원격 코드 실행이 됐습니다.
- 여러 문서 사이트가 플랫폼 하나를 함께 쓰는 탓에 키 하나가 새자 Firebase, 안드로이드 개발자 사이트까지 뚫렸습니다.
- 서명된 쿠키는 위조만 막을 뿐 내용은 누구나 읽을 수 있어서 비밀을 담으면 안 된다는 점을 보여 줍니다.
핵심 내용
- 계정 없이 받은 약 1,200바이트짜리 쿠키에 OAuth 클라이언트 시크릿이 평문으로 들어 있었습니다.
- 이 시크릿이 Flask(파이썬 웹 프레임워크)의 세션 서명 키와 같아서 세션을 마음대로 위조할 수 있었습니다.
- 로그인 콜백은 세션 속 객체를 pickle(파이썬 객체 직렬화 형식)로 그대로 풀어 위조한 세션 속 코드를 실행했습니다.
- 운영 서버를 해치지 않으려고 정한 초만큼 멈추는 코드만 넣었고, 응답 시간이 그만큼 늘어 실행이 확인됐습니다.
- 저자는 시크릿 교체, 배포마다 따로 둔 서명 키, 서버 쪽 상태 보관, pickle 대신 데이터 전용 형식을 해법으로 꼽았습니다.
HN 반응
- 서명 키를 쿠키에 넣고 pickle까지 쓴 초보적 실수가 어떻게 리뷰를 통과했느냐는 반응이 많았고, 디버깅 코드를 안 지웠을 것이라는 추측도 나왔습니다.
- AI 도구 탓에 큰 포상금 시대가 끝날 것이라는 전망에는, 서버 쪽 취약점은 암시장 수요가 거의 없고 포상금의 가치는 수정 우선순위에 있다는 반론이 맞섰습니다.
블로그 글을 Claude로 쓰면 이런 문구가 눈에 띄기 시작하고, 그 뒤로는 그런 문구만 찾으며 훑어보게 돼요. 결국 글쓴이가 하려는 말은 읽지 않게 되고요.
이걸 다룬 밈을 몇 개 봤는데, 저도 똑같이 그러고 있다는 걸 인정합니다..
ai;dr
(tl;dr의 진화형)
주제가 흥미로워 보이면 저는 그냥 LLM에게 요약을 시켜요. 그러고 나서 정말 흥미롭거나 읽을 만하다 싶으면 더 깊이 들어갑니다.
저는 개인적으로 건너뛰는 쪽이 낫습니다. 요즘은 굳이 읽지 않아도 되는 글이 많고, 회사에서 Claude나 GPT가 쓴 문장을 충분히 보다 보니 다른 데서까지 보면 짜증이 나요.
사람이 쓴 책이 밀려 있어서 그쪽에 시간을 쓰고 싶습니다.
그래도 직접 손으로 쓴 좋은 기술 글은 정말 좋아합니다.
저는 아마 정반대일 것 같아요. 이 글만 해도, 이 멍청이가 겪은 무용담에는 관심 없고 그냥 익스플로잇이 뭔지, 가능하면 그 과정까지만 알고 싶거든요.
이 스레드에서 셀프 홍보 좀 해도 될까요 XD
이런 게 어떻게 코드 리뷰와 설계 리뷰를 통과하죠? 버그가 있는 저 코드, 혹시 AI가 쓴 건가요? 쿠키에 서명하는 키가 쿠키 안에 들어 있었던 것도 그렇고, 모델 가중치조차 손을 떼고 있는 pickle을 쓰고 있었다는 것도 그렇습니다. 근본 원인이 이렇게까지 초보적이라는 게 좀 어이가 없네요.
pickle이 말도 안 되는 건 맞지만, 문제를 추적하다가 객체 전체를 쿠키에 덤프해 놓고 나중에 지우는 걸 깜빡하는 상황은 충분히 상상이 갑니다.
저희 회사에서는 코드 리뷰는커녕 자동화된 테스트 단계에서부터 통과하지 못합니다.
직원의 "관심 지수"가 "조직과 그 사명에 깊이 몰입한 상태"에서 "이건 그냥 직장일 뿐이고, 적당히 쉬면서 스톡옵션 베스팅이나 기다리지 뭐"로 옮겨 가면 그렇게 되죠.
버그 바운티 헌터를 꿈꾸는 사람들에게 해 주실 조언이 있나요? 이런 취약점을 찾아내는 나름의 방법이 있으신가요, 아니면 그냥 경험이 많이 쌓여서인가요?
이런 큰 포상금의 시대는 아마 끝나가고 있을 겁니다. AI 도구가 시세를 토큰 비용 수준으로 끌어내릴 테니까요. 바운티는 연구자가 익스플로잇을 되팔기보다 신고하는 편이 명목상으로나마 더 이득이 되게 하려고 존재하는 것입니다.
그게 바운티가 존재하는 이유는 아닙니다. 바운티 제도의 양쪽 사람들 모두 그렇다고들 하지만요. 바운티가 암시장 거래를 상쇄하려는 것이라면, 시장 가치가 없는 취약점에는 바운티를 지급하지 않을 겁니다. 이번 취약점은 바운티가 아닌 어떤 시장에서도 1,000달러 미만의 가치였을 법한 좋은 사례입니다.
실제로 바운티 프로그램을 운영하는 회사가 심각한 새 취약점을 접수해서 얻는 가장 흔한 이점은 단순히 엔지니어링 우선순위 정하기입니다. 안정성이나 UX 버그는 사용자들이 알아서 신고해 주지만, 보안 결함은 그렇지 않습니다. 공격자가 억지로 파고들어야 취약점이 모습을 드러내고, 평범한 사용자는 거의 마주칠 일이 없으니까요. 버그 바운티 프로그램이 그 빈틈을 메워 줍니다.
"이번 취약점은 바운티가 아닌 어떤 시장에서도 1,000달러 미만의 가치였을 법한 좋은 사례입니다."
말도 안 되는 소리네요. 악의를 가진 쪽에는 이게 훨씬 더 값어치가 있을 텐데요.
서버 측 RCE 버그에 진짜 큰돈을 낼 사람들은 익스플로잇을 사는 게 아니라, 당신과 계약해서 강도 계획을 짜려는 겁니다. 그러니 같은 분석이 적용돼요. 당신 스스로 이 취약점으로 구글에서 뭔가를 훔칠 계획을 세울 수는 있겠죠. 하지만 우리가 취약점 가치 평가를 이야기할 때 말하는 건 그런 게 아닙니다.
이런 서버 측 취약점은 사실상 시장이 아예 없습니다.
무슨 논리인지 모르겠네요.
프로그램을 운영하는 쪽과 참여하는 쪽 모두에 따르면 버그 바운티에는 존재 이유가 있다는 말씀이라면, 어떻게 그게 존재 이유가 아니라는 겁니까?
돈을 내는 사람도 일하는 사람도 모두 그 이유로 존재한다는 데 동의하는 거잖아요.
제 논리에서 어느 부분을 이해하지 못하시겠습니까? 질문을 그렇게 하시면, 가장 간단한 답은 제 댓글 전체를 처음부터 다시 쓰는 것밖에 없습니다.
쓸데없이 무례한 답변이라고 생각합니다.
제 논리는 위에서 자세히 설명했습니다.
덧붙이자면, 저희 회사의 보안 조치 서비스 중에는 기업의 버그 바운티 프로그램 구축을 돕는 일도 있습니다. 연구자가 취약점을 팔거나 악용해 이익을 챙기는 대신 포상금을 받고 신고하도록 유인하는 것이 언제나 의도된 목표입니다.
이게 아마 제가 HN에서 가장 높은 평가를 받은 댓글일 겁니다:
https://news.ycombinator.com/item?id=43025038
바운티 쪽 사람들, FAANG/MAG7 블루팀 담당자들, 암시장 참여자들을 직접 인터뷰해서 나온 결과물입니다. 더 알고 싶으시면, NATO 정보 공동체에 가장 잘 알려진 CNE 벤더 중 한 명인 마크 다우드와 우리가 한 인터뷰도 온라인에 있습니다. 구글에서 [SCW Mark Dowd]로 검색하시면 됩니다.
더 자세히 설명해 드릴 의향은 있지만, 말씀드렸듯이 제가 덧붙여 설명할 만한 방식으로 제 댓글에 답하시지 않았습니다. 구체적으로 어디가 틀렸다고 생각하시는지 편하게 반박해 주세요.
이건 정말 단순합니다. 이 분야에서 일하신다면, 서버 측 웹 버그에는 사실상 암시장이 아예 없다는 걸 이미 아실 겁니다. 그런데 이번 건에는 9만 달러 바운티가 걸려 있었고, 다른 건에도 5자리 수 바운티가 있습니다. 이 두 사실을 어떻게 조화시킬지 설명해 보시죠.
그거 참 대단하시네요, 축하드립니다만 여기서 인터넷 포인트는 별 의미가 없어요…
취약점이 얼마에 팔리느냐와 그걸 악용했을 때 누가 얼마나 큰 피해를 입힐 수 있느냐는 별개의 문제입니다. 심각한 취약점을 찾아낼 수 있는 사람이라면 아마 스스로 악용할 수도 있을 거예요. 구매자가 필요 없는 거죠.
회사가 큰돈을 내는 것은 모순이 아닙니다. 악용당하면 훨씬 더 큰 비용이 들 수 있으니, 악용 대신 신고하도록 유도하는 거예요. 엔지니어링 우선순위 정하기는… 악용 난이도나, 입힐 수 있는 피해(이번처럼 RCE나 공개된 키라면 상당하겠죠) 같은 요소에 따라 정해지는 부차적인 부분일 뿐이고요.
이 둘이 왜 양립할 수 없다고 생각하시는지 모르겠습니다.
원래의 주장("바운티는 연구자가 익스플로잇을 되팔기보다 신고하는 편이 명목상으로나마 더 이득이 되게 하려고 존재하는 것입니다")을 포기하시고 새 주장으로 넘어가셨네요. 취약점을 찾은 해커가 그걸로 직접 강도 계획을 세울 수 있다는 주장 말입니다. 그건 맞는 말입니다. 시장 청산 가격을 정해 주는 건 아니고 교도소에 가도 괜찮다는 사람들만 걸러내긴 하지만, 현실과 맞아떨어지는 진술인 건 분명하죠.
제 원래 댓글에는 분명히 "팔거나 악용해 이익을 챙기는 것"이라고 썼습니다. 무슨 이유에선지 뒷부분은 무시하고 계시네요.
좀 진정하시고 제 댓글을 다시 읽어 보셨으면 합니다. 시비를 거는 게 아니에요. 익스플로잇이 얼마에 팔리느냐와 악용당했을 때 회사가 입을 수 있는 손해는 완전히 별개라는 말씀을 드리는 겁니다. 그 부분에서 막히신 거예요.
회사는 악용되기 전에 발견과 신고를 장려할 명백한 금전적 이유가 있습니다.
이제 더는 신경 쓰고 싶지 않네요. 서로 딴소리만 하고 있습니다. 제가 답한 주장은 방금 답글을 다신 그 댓글에 인용해 두었습니다.
익스플로잇을 찾을 수 있는 보안 연구자 대부분이 그걸로 기꺼이 강도짓을 하리라고 보시나요?
저는 보안 업계 사람은 아니지만 그건 믿기 어렵습니다.
제가 언제 그렇게 말했죠? 할 수 있는 것과 할 의향이 있는 것은 별개입니다.
요점은 바운티가 취약점을 찾아 신고하도록 유인한다는 것입니다. 그러려고 익스플로잇 암시장이 있을 필요는 없어요.
“심각한 취약점을 찾아낼 수 있는 사람이라면 아마 스스로 악용할 수도 있을 거예요. 구매자가 필요 없는 거죠.”
제가 답한 건 이 부분입니다. 취약점을 찾을 수 있는 사람의 수가 그걸로 일회성 강도짓을 할 의향이 있는 사람의 수보다 훨씬 많을 거라고 생각합니다.
당신이 답하고 있는 내용과 당신이 그 내용이 말한다고 하는 건 서로 다른 얘기입니다.
알겠습니다. 감사합니다.
이게 정말 사실인가요? 어쨌든 익스플로잇을 되파는 건 불법일 텐데, 대부분의 사람은 소득을 얻으려고 법을 어기고 싶어 하지 않잖아요.
법을 신경 쓰는 사람 대부분은 애초에 그 분야에서 일하지도 않아요. 이 바닥에 들어오는 사람은 아마 수상쩍은 짓을 해도 괜찮다고 여기는 데서 시작할 거라고 봅니다.