[하루한줄] CVE-2020-16602 : Remote File Execution on Razer Chroma SDK Server

URL

CVE-2020-16602

Target

Razer Chroma SDK Rest server <= 3.12.17

Explain

Razer Chroma는 Razer사의 게이밍용 컴퓨터 주변기기들의 RGB 효과를 제어하는 플러그인으로 Razer synapse 설치 시 자동으로 설치됩니다. SDK가 존재해서 third party가 Razer Chroma와 연동되는 기능을 만들 수 있습니다.

예 ) Razer 제품과 RGB효과를 동기화하는 케이스, 음악에 맞춰 Razer 제품의 RGB를 변화시키는 음악 스트리밍 서비스

Razer Chroma SDK Rest server는 Razer Chroma를 사용하는 컴퓨터에서 동작하고 있으며 모든 네트워크 인터페이스와 bind 해 54236번 포트로 listen 합니다. http://localhost:54235/razer/chromasdk 혹은https://chromasdk.io:54236/razer/chromasdk URI로 App info를 담은 POST request를 받으면 그 App info에 따라 C:\ProgramData\Razer Chroma SDK\Apps\에 실행파일을 생성하고 실행합니다.

몇 가지 이슈로 인해 race-condition을 이용한 arbitrary code execution이 가능합니다.

  1. 해커는 Razer Chroma SDK Rest server가 동작하는 컴퓨터(이하 victim)의 IP주소만 알면 원격으로 POST request를 보내 임의의 파일명을 갖는 실행파일을 victim에 생성할 수 있습니다.

    http://192.123.456.789:54235/razer/chromasdk -> bad request
    
    Addit hosts.txt on Attacker's system
    ---
    192.123.456.789 chromasdk.io
    ---
    
    http://chromasdk.io:54235/razer/chromasdk -> http://192.123.456.789:54235/razer/chromasdk
  1. POST request를 받아 C:\ProgramData\Razer Chroma SDK\Apps\에 생성한 실행파일은 Admin권한이 있는 유저만 수정할 수 있습니다. 하지만 C:\ProgramData\Razer Chroma SDK\Apps\폴더는 Admin 권한이 없어도 수정이 가능합니다.
  1. POST request로 생성할 실행파일(test.exe)과 동일한 이름의 파일이 이미 C:\ProgramData\Razer Chroma SDK\Apps\폴더 안에 존재하면 Razer Chroma SDK Rest server는 기존 파일의 내용을 덮어씁니다. 하지만 그 실행파일의 권한은 그 파일이 실행되기 전까진 수정하지 않으므로, 해커는 race-condition으로 test.exe의 내용을 수정해 arbitrary code execution을 할 수 있습니다.