요약

  • URI Scheme을 활용한 RCE 취약점이 최근 눈에 띄어, 흥미로워서 공유합니다.

    • 사례1) AWS Workspace에서 사용하는 workspaces:// 스키마를 활용한 RCE 공격 (CVE-2021-38112)

    • 사례2) 맥에서 inetloc 확장자 파일 내에서 file:// 스키마를 활용한 RCE 공격 (최초 제보자: 박민찬, 개인 연구자)

  • 커스텀 URI Scheme 개발 시 파라미터를 통한 명령 실행 가능 여부를 늘 주의해야 하며, 로컬에서 임의 변경 후 실행 시 대응하기 어려운 클라이언트 프로그램의 구조적 한계를 고려하여 언제나 최소한의 기능만 처리할 수 있도록 최소 권한의 법칙(Principle of least privilege) 을 잊지 말아야 합니다.

내용

사례1. AWS Workspace RCE (CVE-2021-38112)

아래 취약점은 현재(2021-09-22) 패치가 완료 되었다고 합니다.

AWS Workspace는 Citrix Workspace와 같은 데스크톱 가상화 서비스 입니다. 이 서비스를 이용하면 작업자가 언제 어디에서나 인터넷만 연결되어 있는 환경이라면 가상화된 PC에 접속하여 업무를 연속적으로 이어갈 수 있습니다. 특히 최근 COVID-19로 인한 재택근무 증가로 인해 이러한 데스크톱 가상화 서비스 사용량이 증가하고 있습니다.

이 취약점을 최초로 제보한 Rhino Security Labs에서 해당 취약점에 대한 상세한 내용을 공개 하였습니다. 아래의 모든 내용은 링크의 내용을 바탕으로 작성되었으며, 링크에 상세 내용이 작성돼있으니 읽어 보는것을 추천드립니다!

결론만 요약 하자면, 아래와 같습니다. Amawon Workspace를 사용하기 위해서는 데스크톱 클라이언트를 설치해야 하고, 웹을 통해 로그인 후 해당 클라이언트를 실행하기 위해 커스텀 프로토콜을 사용합니다. 커스텀 프로토콜 내 --gpu-launcher 파라미터를 통해서 Amazon Workspace 앱 실행 시 원하는 명령 실행(아래 예제에서는 calc.exe)이 가능합니다.

최초에 웹 브라우저를 통해 아래의 명령어를 실행합니다. --gpu-launcher 파라미터에 calc.exe 명령을 주입했습니다.

workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE

위의 스키마를 통해 실제 프로그램이 실행 될 때 아래의 명령어가 실행됩니다. 최초에 우리가 입력했던 파라미터들이 인코딩 된 채로 그대로 uri에 전달됨을 확인할 수 있습니다.

"C:\Program Files (x86)\Amazon Web Services, Inc\Amazon WorkSpaces\workspaces.exe"
--uri “workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE”

그 후 인코딩된 파라미터를 디코딩하여 프로그램이 두 번째 실행을 합니다. 아래 명령어에 --gpu-launcher="calc.exe" 가 포함된 것을 확인할 수 있습니다.

"C:\Program Files (x86)\Amazon Web Services, Inc\Amazon WorkSpaces\workspaces.exe"
--ws-pipe-name UUID --ws-pipe-handle 4576 -r REGISTRATION_CODE 
--auth-url https://<appssite>.awsapps.com:443/login/?client_id=<clientid>&redirect_uri=https%3a%2f%2fskylight.local&locale=en_US 
--org-name <org name> --session-id <session id> --metricAppName Client -u anything 
--gpu-launcher="calc.exe" --login-mode 5

위 명령이 실행되면 실제 calc.exe가 실행됩니다. 실행되는 화면은 위 글의 원문(Rhino Security Labs)에 가시면 보실 수 있습니다!

사례2. macOS Finder RCE

아래 취약점은 패치를 하였으나, 여전히 File 스키마를 대소문자 혼용(FiLe://)하는 방법으로 패치를 우회가 가능하다고 합니다. (2021-09-22)

맥에는 inetloc 확장자 파일이 존재하는데, 해당 확장자는 맥의 Finder 혹은 사파리에서 URL 바로가기와 같이 특정 URL 호출 시 사용하는 확장자라고 합니다. 과거에는 종종 사용됐던거 같은데, 최근에는 많이 사용되는 것 같지는 않습니다(요즘도 자주 활용되는 사례를 알고 계신다면, 공유 부탁드립니다!).

취약점 제보자 분이 공유한 페이로드를 활용하여 실제 작동 하는지 확인 결과, 더블클릭해서 파일 실행 시 바로 계산기 앱이 뜨는 것을 확인 했습니다. 테스트에 사용한 맥은 최신 버전 (macOS 11.6 21G165)이었으므로, 최신 버전에서 아직 패치가 미흡한 것을 확인했습니다.

계산기 띄우기 성공

코드를 살펴 보면, File 스키마를 활용하여 바로 계산기 앱을 호출했습니다. File 스키마를 사용하여 기기 내의 파일을 접근, 실행 할 수 있으므로 맥을 사용하는 특정 타겟을 대상으로 스피어 피싱을 할 때 악용될 가능성이 있어 보입니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>URL</key>
    <string>FiLe:////////////////////////System/Applications/Calculator.app</string>
  </dict>
</plist>

결론

개발자 관점

  • URI Scheme 개발 시 파라미터를 통한 의도치 않은 기능 수행(임의의 명령 실행 가능 여부 등)가능성을 늘 주의해야 합니다.
  • 파라미터 임의 변경 후 주입 시 대응하기 어려운 클라이언트 프로그램의 구조적 한계를 고려하여 언제나 최소한의 기능만 동작할 수 있도록 최소 권한의 법칙(Principle of least privilege) 을 잊지 말아야 합니다.

침투 테스터 관점

  • URI Scheme가 존재할 경우 들어가는 파라미터를 면밀히 분석하여, 악용할 수 있는 여지가 있는지 확인해야 합니다(특히 파라미터에 직접적으로 실행할 프로그램을 입력하는 구조라면 더욱 수상하니 반드시 확인할 것!).
  • 악용할 여지가 있다면 악성 페이로드를 포함한 URI Scheme을 사용자가 실행할 수 있도록 유도하고, 실행 결과를 외부로 전달할 수 있는 효과적인 방법을 찾아봅니다.

관리/운영 관점

  • AWS Workspace를 사용할 경우, 클라이언트를 최신 버전으로 업데이트 합니다.

  • inetloc 파일을 직접적으로 공유하는 사례가 많지 않은 것으로 보여, 해당 확장자 파일 블랙 리스트 지정도 괜찮아 보입니다(자주 사용하는 확장자라면 해당 조치 적용 불가능하니 조치 전 사내 영향도 사전 파악 필수. inetloc 파일 직접 공유 보다는 계정/접속 정보를 텍스트로 공유하는 방안도 괜찮아 보입니다.)

  • 관련 뉴스가 많이 나온 상황이고 익스플로잇 코드가 공개되어 취약점을 악용하는 사례 발생이 우려되므로 맥 사용자가 많고 중요한 데이터를 다룰 경우 inetloc 파일을 활용한 공격 방법을 전파 및 사전 교육하여 악성 파일 실행을 방지 합니다.

참고 문서