본문 바로가기

사이버 보안

CVE가 생겼습니다

얼마전에 살면서 처음으로 제 이름이 리포터로 등록된 취약점이 CVE로 등록되었습니다

 

shout out to TOR

 

 

CVE (Common Vulnerabilities and Exposures) 는 공개적으로 알려진 컴퓨터 보안 결함 목록인데, 간단히 말해 특정 제품등의 취약점이 발견되었을때 이를 관리하기 위해 붙는 번호입니다

이번에 등록된 CVE 번호는 CVE-2024-4767로 2024년에 등록된 취약점 중 4767번째임을 뜻합니다

 

CVE를 등록하는 방법은 크게 두 가지가 있는데, 첫 번째는 상대적으로 규모가 큰 기업의 소프트웨어 보안취약점을 리포트하면 해당 기업이 보안 취약점을 패치하면서 자체적으로 CVE 발급기관에 연락해 CVE값을 발급해줍니다

두 번째는 직접 CVE 발급기관에 요청하는 방법입니다

보안취약점을 발견해 CVE를 관리·운영하는 MITRE사에 요청을 하면 CVE 후보(CNA)로 등록되고, CVE 에디터는 주요 CNA에 대해 논의를 거쳐 CVE값을 발급할지 여부를 결정하게 됩니다

 

저같은 경우는 전자의 경우로, Firefox 브라우저의 취약점에 대해 제보를 하였더니 Firefox 브라우저를 관리하는 Mozilla 재단에서 해당 취약점 패치와 함께 CVE 값을 발급받아주었습니다

 

30일 안에 취약점 공격에 성공할 수 있는 확률 : 0.05%

 

 

사실 위의 취약점 점수에서 볼 수 있듯이 이번에 등록된 취약점의 경우 엄청나게 중요하거나 치명적인 취약점같은 것도 아니고 기술적으로 어려운것도 아닌, 단순한 Firefox 브라우저의 오동작을 발견한 것일 뿐입니다

 

하지만 이번에 취약점을 제보해보면서 사실 이번에 이런 경험을 하기 전까지 CVE라는 것은 전문적인 취약점 분석가들에게만 해당되는 이야기인 줄 알았는데 꼭 해킹이나 어려운 기술이 동원되지 않아도 특정 제품에서 취약한 부분을 발견하고 해당 제품의 보안에 기여할 수 있다는 것을 전달하고자 글을 써보게 되었습니다

 


 

처음 이 버그를 발견하게 된 것은 작년에 Firefox 브라우저에서 새로 지원하기 시작한 기능인 시크릿 모드에서 IndexedDB를 지원하는 것에 대해 지원 방법을 세부적으로 분석하면서 부터였습니다

 

 

Mozilla 사의 Firefox 브라우저는 2023년 7월 경 배포된 Firefox v115.0 버전부터 시크릿 모드에서 IndexedDB 브라우저 저장소에 대한 지원을 시작하였습니다

( 브라우저 시크릿 모드의 경우 Chrome의 시크릿 모드, Firefox의 프라이빗 모드, edge의 Inprivate 모드 등 부르는 이름이 여러가지이지만 편의상 이 글에서는 시크릿 모드로 통칭하도록 하겠습니다 )

 

IndexedDB는 비교적 최근 지원되기 시작한 로컬 브라우저 저장소의 일종인데, 전통적인 브라우저 저장소로는 우리가 흔히 아는 쿠키나 캐시 등등이 있습니다

IndexedDB는 이런 전통적인 저장소들에 비해 더 큰 용량의 다양한 형식의 데이터를 저장할 수 있어 최근들어 브라우저 저장소들 가운데서 점차 널리 쓰이고 있습니다

  • 쿠키, Local Storage : 수 KB ~ 수 MB 의 문자열 데이터만 저장 가능
  • IndexedDB : 디스크 용량에 따라 수백 GB 까지 Javascript 가 이해할 수 있는 어떠한 값이든 저장 가능 (파일 등등)

 

하지만 이런 브라우저 저장소들은 웹 브라우저들이 시크릿 모드에서 동작할 때는 일반적으로 로컬 컴퓨터에 저장되지 않고 주로 메모리 안에서만 관리되거나 아예 지원되지 않습니다

 

시크릿 모드에서 indexedDB API 사용 시 나타나는 에러 (Firefox browser before v115.0)

 

 

이런 와중에 위에서 보았듯이 23년 7월 Firefox 브라우저에서는 Chrome 과 같은 대부분의 브라우저에서 사용하던 메모리 내 관리 방식과 달리 다른 방식을 사용해서 시크릿 모드에서 IndexedDB에 대한 지원을 시작하였습니다

굳이 메모리 내 관리 방식을 피한 이유는 정확히 명시되어있진 않지만 연구 과정에서 Firefox 개발진들의 대화를 살펴본 결과 아래 표와 같이 사용자의 시크릿모드 사용 여부 탐지등의 문제를 방지하기 위한 것으로 보입니다

 

시크릿 모드에서의 IndexedDB 지원 방식 별 장단점

 

 

Firefox 브라우저의 release note에 따르면 사용자가 시크릿모드를 사용하는 동안 IndexedDB 관련 데이터들은 사용자 PC 내 [Firefox Profile Path]/storage/private 폴더 내에 암호화된 파일들로 유지됩니다

그리고 해당 파일들을 암호화하는 키는 메모리 안에서 관리되게 되며, 시크릿모드가 종료되면 디스크 내 관련 파일 및 폴더와 메모리 내 암호키들은 전부 삭제된다고 합니다

 

Firefox 시크릿 모드 사용 간 디스크 내 생성된 암호화된 IndexedDB 데이터

 

 

Firefox 브라우저와 같은 Gecko 브라우저 엔진을 기반으로 하는 Tor 브라우저 역시 v13.0 버전부터 Firefox v115 버전을 기반으로 동작하게 되었는데요, 이에 따라 위와 동일한 방식으로 시크릿 모드에서 IndexedDB를 지원하게 되었습니다

( Tor 브라우저는 기본적으로 Firefox 브라우저의 시크릿 모드 상태로 동작하게 됩니다 )

 

Tor 브라우저 13.0 버전 release note

 

 

저는 최근에 여러 브라우저들의 IndexedDB 아티팩트 지원 방식에 관련하여 연구를 하면서 자연스레 이 Firefox 브라우저와 Tor 브라우저의 새로운 지원 방식에 대해 관찰해보기 시작하게 되었습니다

 

그런데 실험을 하던 도중 한가지 이상한 점이 발견되었습니다

 

Firefox 브라우저에서 테스트할 때와는 다르게 Tor 브라우저에 대해 테스트를 해보았을 때, Tor 브라우저가 종료되었음에도 불구하고 Tor 브라우저에서 디스크에 저장한 암호화된 IndexedDB 데이터와 private 경로가 지워지지 않는 것이었습니다

 

처음에는 제 노트북이 연구때문에 너무 오래 켜두었더니 드디어 망가진건가 했습니다

하지만 똑같은 방식의 Firefox 브라우저의 경우 해당 기능이 정상적으로 동작하고 있었기 때문에 제 노트북의 문제는 아니었습니다

그렇다면 Tor 브라우저가 문제라는 것인데.. 이번 업데이트 간 Firefox 브라우저에는 적용되었지만 Tor 브라우저에는 적용되지 않은 코드가 있는걸까요?

혹시 이미 알려진 버그인가 하여 우선 Tor 브라우저 Gitlab 에서 IndexedDB를 주제로 검색을 해보았으나 관련한 내용을 찾을 수 없었습니다

아직 발견한 사람이 저밖에 없는 듯 합니다

 

Tor 브라우저 Gitlab

 

 

그렇다면 원인을 찾아보아야 할 텐데, 일단 시크릿 모드가 종료되었을 때 관련 파일 및 폴더를 지우는 코드를 찾기 위해 Gecko 브라우저 엔진의 소스코드와 함께 Firefox 브라우저를 디버깅해보았습니다

https://github.com/mozilla/gecko-dev

 

GitHub - mozilla/gecko-dev: Read-only Git mirror of the Mercurial gecko repositories at https://hg.mozilla.org. How to contribut

Read-only Git mirror of the Mercurial gecko repositories at https://hg.mozilla.org. How to contribute: https://firefox-source-docs.mozilla.org/contributing/contribution_quickref.html - mozilla/geck...

github.com

 

 

결과적으로 아래 보이는 OriginOperations.cpp 파일의 1071번째 줄의 Remove 함수가 호출되면서 IndexedDB 데이터가 지워지는 것을 확인했습니다

 

 

 

만약 해당 코드가 Tor 브라우저에는 존재하지 않는다면 간단히 원인을 파악할 수 있을 듯 합니다

하지만, 아쉽게도? Tor 브라우저에도 동일하게 해당 코드는 반영이 되어있었습니다

https://gitlab.torproject.org/tpo/applications/tor-browser

 

The Tor Project / Applications / Tor Browser · GitLab

Tor Browser aims to make all users look the same, making it difficult for you to be fingerprinted based on your browser and device information. Release calendar is...

gitlab.torproject.org

 

 

따라서 다른 부분에서 저 코드로 향하는 흐름이 잘못되었거나 레이스 컨디션 등 별도의 문제가 존재하는 듯 합니다

간단하게 해결될 문제는 아닌 것 같습니다

 

마음만 같아서는 취약점에 대한 원인 및 해결 방법까지 완벽하게 찾아내서 제보하고 싶었지만 당시 한창 연구로 바쁜 상황이라 여기까지만 확인한 뒤 제가 확인한 내용들과 해당 현상을 Tor 브라우저측에 이메일로 제보하였습니다

( 사실 브라우저 개발자 분들은 현상만 확인하시면 원인은 바로 찾아낼 수 있을 겁니다 )

 

 

 

자고 일어나니 회신이 왔습니다

 

 

 

회신 내용을 요약하자면 다음과 같습니다

버그 리포트에 감사하며 우리도 해당 현상이 버그라는것에 동의한다
치명적인 취약점은 아닌듯 하지만 패치가 필요할 것 같다
Tor 브라우저의 문제가 아니라 Firefox 브라우저의 browser.privatebrowsing.autostart 옵션이 문제인 듯 하다

 

 

사실 담당자 분이 말씀해주신 대로 이 현상은 치명적인 취약점이라고 할 수는 없습니다

물론 만약 사용자가 시크릿 모드에서 웹서핑을 한 내역을 확인할 수 있는 IndexedDB 데이터가 시크릿 모드 종료 후에도 남아있어 이를 확인할 수 있게 된다면 이는 엄청난 이슈가 될 것입니다

그러나 위에서 살펴봤듯이 해당 IndexedDB 데이터는 암호화되어있으며 해당 암호키는 시크릿 모드 동안만 메모리에서 획득할 수 있습니다

또한, 만약 해커가 우리의 메모리를 추출해서 그 안에서 암호키를 획득할 수 있는 상황이라면 사실 이미 심각하게 침해가 이루어진 상황으로 해커는 그보다도 더 간단히 당신의 정보들을 모조리 빼갈 수 있을 것입니다

 

다시말해, 본 취약점이 exploit 되기 위해서는 상당히 많은 전제조건들이 필요하기 때문에 현실적으로 이로 인해 문제가 발생할 가능성이 낮다는 것입니다

 

하지만 가능성이 낮은건 낮은 것이고 보안적인 관점에서 봤을 때 IndexedDB 데이터들은 시크릿 모드 종료와 함께 원래의 구현 의도대로 삭제되어야하는게 맞으며 담당자 분 역시 패치가 필요함에 동의하셨습니다

 

이와 별개로 한가지 중요한 점도 알려주셨는데, Tor 브라우저의 문제라고 생각했던 이 현상이 사실 Firefox 브라우저의 특정 설정의 문제였다는 점입니다

 

Firefox 브라우저에는 설정 옵션에서 여러가지 설정들을 조정할 수 있는데, 이 중 브라우저를 기본적으로 시크릿 모드로 열릴 수 있게 하는 browser.privatebrowsing.autostart 라는 옵션이 있습니다

해당 옵션이 활성화될 경우 우리가 별도로 시크릿 모드를 열지 않아도 브라우저는 기본적으로 시크릿 모드로 동작하게 되는데, 해당 옵션을 활성화하자 Firefox 브라우저에서도 Tor 브라우저에서와 같이 창 종료 후 IndexedDB 데이터가 지워지지 않는 현상이 발생했던 것입니다

Tor 브라우저는 저 옵션이 기본적으로 활성화된 상태로 동작하기 때문에 결과적으로 문제는 Firefox 브라우저의 저 옵션때문이었다고 할 수 있습니다

 

문제의 옵션

 

 

이에 따라 해당 버그는 Tor 브라우저 Gitlab에서 Firefox 브라우저를 관리하는 Mozilla 사의 버그 관리 서비스인 Bugzilla에 제보되어 Security 버그로 등록된 후 패치 과정이 시작되었습니다

 

Bugzilla 내 Security 버그로 등록 완료

 

 

그 뒤로 패치가 완료된 5월 경까지 지속적으로 댓글이 달릴때마다 날아오는 안내 메일을 통해 Firefox 개발자분들이 버그에 대해서 회의하고 패치를 진행하는 모습을 구경할 수 있었습니다

결과적으로 원인은 저 browser.privatebrowsing.autostart 옵션이 활성화되어 브라우저가 기본적으로 시크릿 모드로 동작할 경우 브라우저 종료 시 디스크 정리에 사용되는 메시지가 전파되지 않았던 것으로 보입니다

 

4월 25일 경 패치가 완료되었다는 댓글이 달린 후 얼마 지나지 않아 버그의 상태가 closed로 업데이트되었고 5월 14일ㅇ 배포된 Firefox ESR 115.11 버전에서 패치된 상태로 CVE 번호와 함께 공개되었습니다

 

 

 

깃헙 코드에서도 패치된 부분을 확인할 수 있습니다

 

 


 

CVE에 제 이름이 등록되었다고 해서 인생이 드라마틱하게 달라지진 않습니다

 

이런 일은 일어나지 않습니다

 

 

그리고 사실 이번 CVE의 경우 저는 거의 현상만 발견했을 뿐 근본적인 원인을 밝혀낸 것도 아니고 해결 방법을 찾아낸 것도 아닙니다

 

하지만 연구 과정에서 확인하게 된 이런 간단한 정보들로도 다양한 제품들의 보안에 기여할 수 있다는 것을 느끼게 되었습니다

또, 버그가 발견되었을 때부터 패치가 이루어지고 패치된 버전이 세상에 공개되는 것까지 직접 지켜보게 되면서 조만간 또다른 취약점들도 찾아서 제보하고 싶고, 또 나중에는 이런 과정에 직접적으로 참여할 수 있기를 바라게 되었습니다

 

빠른 시일 내 또다른 취약점을 발견해서 글을 쓸 수 있게 되길 바랍니다