본문 바로가기

Browser/Chrome

[Chrome] 94버전 보안 취약점 긴급 업데이트 : Use-After-Free in Portals

추석인 지난 9월 21에 Google은 Chrome 94 버전을 릴리즈했다. 그리고 얼마 지나지 않아 24일에 고위험군(High)으로 분류된 취약점의 보안 업데이트를 올렸고 사용자들에게 해당 업데이트를 받았는지 확인하기를 강력하게 권고하고 있다. 

고위험군은 분류에서 두 번째로 높은 분류이다. 무슨 일이 일어났던 것일까?

 

보안 업데이트에 대한 Google의 설명

한줄로 요약하자면 문제의 핵심은 portals에 Use-After-Fee가 있었다는 것이다. 하지만 portals가 무엇이고 Use-After-Free는 무엇인지 모른다면 상황을 바로 이해하기가 어렵다. 

 

그럼 portals가 무엇인지부터 살펴보자. 

배경: Portals

Google이 진행하고 있는 여러 프로젝트들 중에 Portals라는 프로젝트가 있다. 아직은 공식적인 단계가 아니라 개발 테스트 단계이다. 

Portals의 주 목적은 사이트 또는 페이지 간의 매끄러운 전환이다. 

 

예를 들어 블로그를 보고 있는데 티셔츠 상품에 대한 사진이 있다. 이때 사용자는 티셔츠 사진을 클릭함으로써 보고 있던 블로그 사이트에서 티셔츠를 구매할 수 있는 웹 사이트로 이동하게 된다. 

MPA(Multiple Page Application) 같은 경우는 이동시 화면에 짧은 깜빡거림이 있을 것이고 SPA (Single Page Application) 같은 경우는 애니메이션이 없는 피피티 페이지를 넘기듯 바로 이동이 될 것이다. Portal 같은 경우는 사이트를 prerendering하면서 해당 과정을 미리보기로 사용자에게 보여주고 rendering이 끝나면 rendering 하고 있던 사이트가 현재 사이트가 된다. 

 

다시 블로그 예제로 설명을 하자면, 

사용자가 이미지를 클릭할 경우 화면에 작은 window가 생겨서 티셔츠 구매 사이트가 rendering되고 있을 테고 해당 window가 커지면서 전체 브라우저를 차지하고 현재 페이지가 티셔츠 구매 페이지로 전환된다. 이동할 사이트가 rendering 되고 있을 동안 사용자는 이러한 전환 animation을 보기 때문에 더욱 매끄러운 전환을 볼 수 있을 것이라고 공식 페이지는 주장한다. 

 

Portals 동작 예제

그럼 이제 Use-After-Free는 무엇인지 알아보자. 

 

문제: Use-After-Free

Use-After-Free (UAF)는 프로그램 작업 중 동적 메모리를 잘못 사용해서 발생하는 취약점을 의미한다. 

 

Stack과는 달리 heap과 같은 동적 메모리는 대량의 데이터를 저장하도록 설계되었다. 개발자들은 임의의 크기의 데이터를 메모리에 할당할 수 있다. 그러면 프로그램에서 실행중인 하나의 작업에서 해당 메모리를 수정하거나 해제(free)할 수 있고 또는 같은 프로그램의 다른 작업에 의해 메모리를 사용하기 위해 다시 해당 위치로 돌아올 수 있다. 

 

동적 메모리는 반복적으로 재할당되기 때문에 heap에서 사용 가능한 구간과 사용중인 구간을 지속적으로 확인해야 한다. 이때, 헤더는 할당된 메모리 영역을 참조해서 확인하는데 도움을 준다. 각 헤더에는 해당 구간의 시작 주고사 포함되어 있고 UAF 버그는 프로그램이 이러한 헤더를 제대로 관리하지 못할 때 발생한다. 

 

Pointer들은 동적 메모리의 데이터 집합을 가리킨다. 데이터 집합이 삭제되거나 다른 블록으로 이동되었지만 pointer가 삭제(null로 설정)되지 않고 계속 사용 가능한 메모리를 참조하는 경우 dangling poitner가 생성된다.  이후에 동일한 프로그램이 해당 메모리 구간을 다른 객체에게 할당하게 되면 기존의 danling pointer는 새 메모리 구간을 참조하게 된다. 이때, UAF 취약성이 발생하고 이로 인해 코드가 대체될 수 있다.

 

UAF 공격으로 인해서 발생할 수 있는 결과는 다음과 같다:

- 데이터 손상

- 프로그램 충돌

- 임의의 코드 실행

 

공격자는 UAF를 일으킨 danling pointer를 사용해서 임의의 코드 또는 해당 코드에 대한 참조를 프로그램에게 전달해 코드의 시작 부분으로 이동할 수 있다. 이런 방식으로 악성 코드가 실행되어 사이버 범죄자가 피해자의 시스템에 대한 통제권을 획득할 수 있게 된다. 

 

결론: UAF in Portals

이러한 UAF 취약점이 portals에 있었고 이로 인한 피해가 발생하고 있음을 알게된 Google이 Chrome에 긴급 업데이트를 올렸던 것이다. 따라서 현재 나의 Chrome 브라우저가 최소 94.0.4606.61 버전으로 업데이트 했는지 꼭 확인해보자! 방법은 아래에~

Chrome 버전 확인 방법

1. 브라우저 설정을 클릭한다

2. Chrome 정보 클릭

3. Chrome 버전 확인 

 

예방: pointer 삭제

동적 메로리를 사용할 경우 메모리 할당을 해제(free)할 뿐만 아니라 해당 메모리를 가리키는 pointer도 삭제(nullify)해야 한다. 이를 통해 같은 메모리 구간으로 접속 가능한 두개의 pointer를 생성하지 않아 UAF의 발생을 막을 수 있다. 

 

추가: 메모리 해제(free)

왜 할당한 메모리를 해제해야 할까?

 

새로운 메모리를 할당하기 위해 프로그램은 heap에 사용되지 않은 구간이 있는지 확인한다. 만약 사용을 마친 메모리를 해제하지 않는다면 실제로는 앞으로 다시 사용되지 않을 구간이더라도 사용중으로 구분되어 해당 위치에는 메모리를 할당할 수가 없다.

이때 만약 해제하지 않은 메로리를 가르키는 pointer를 삭제한다면 일은 더 커진다. 해당 메모리 구간은 사용중으로 구분되어 있지만 영영 접근할 수 없게 된다. 접근할 수 있는 유일한 수단인 pointer가 삭제되었기 때문이다. 그리고 이러한 상황을 메모리 누수(memory leak)이라고 부른다. 

이렇게 접근을 잃은 데이터들이 쌓이게 되면 더 이상 사용 가능한 구간이 남지 않을 수 있고 이로 인해 buffer overflow 에러가 발생하는 것이다. 

 

 

References

[공식홈페이지] Google Chrome Releases

[뉴스] xda-developers - If you use Google Chrome, a zero-day vulnerability in Portals means you should update immediately

[뉴스] xda-developers - Google is working on "Portals" to revamp browsing mobile websites

[깃허브] Portals

[블로그] web.dev - Hands-on with Portals: seamless navigation on the web

[사이트] encyclopedia.kaspersky - Use-After-Free