[하루한줄] 안드로이드 틱톡 앱에서 발견된 5가지 취약점
URL
TikTok for Android 1-Click RCE
Target
- TikTok for Android Application
Explain
안드로이드 틱톡 애플리케이션에서 5가지 취약점이 발견되었습니다. 발견된 5가지 취약점 중 XSS, Zip Slip, RCE 취약점에 대한 상세 내용은 다음과 같습니다.
Universal XSS on TikTok WebView
틱톡은 받은 메시지에서 deep-link로 호출될 수 있는 특정 WebView를 사용합니다. WebView는 성능을 향상하기 위해 사용할 때마다 서버에서 가져오는 대신 내부 파일에서 가져오는 falcon link라는 것을 사용합니다. 성능을 측정하기 위해 페이지가 로딩되면 다음과 같은 함수를 실행합니다.
this.a.evaluateJavascript("JSON.stringify(window.performance.getEntriesByName(\'" + this.webviewURL + "\'))", v2);
페이로드는 query string segment로 인코딩 되기 때문에 getEntriesByName
의 URL 뒤에 #
을 추가한 후 페이로드를 삽입하면 정상적으로 스크립트가 동작하게 됩니다.
JSON.stringify(window.performance.getEntriesByName('https://m.tiktok.com/falcon/#'),alert(1));//'))
Another XSS on AddWikiActivity
AddWikiActivity
는 악성 URL이 열리지 않도록 URL 검사를 합니다. 그러나 http
나 https
scheme만 확인을 하므로 다른 scheme에 대해서는 검사를 진행하지 않습니다. 예를 들어 javascript
scheme를 사용하여 페이로드를 구성하면 XSS가 가능합니다.
window.ToutiaoJSBridge.invokeMethod(JSON.stringify({
"__callback_id": "0",
"func": "openSchema",
"__msg_type": "callback",
"params": {
"schema": "aweme://wiki?url=javascript://m.tiktok.com/%250adocument.write(%22%3Ch1%3EPoC%3C%2Fh1%3E%22)&disable_app_link=false"
},
"JSSDK": "1",
"namespace": "host",
"__iframe_url": "http://iframe.attacker.com/"
}));
Remote Code Execution
RCE를 하기 위해서 zip file을 생성하고, path traversal을 통해 /data/data/com.zhiliaoapp.musically/app_lib/df_rn_kit/df_rn_kit_a3e37c20900a22bc8836a51678e458f7/arm64-v8a/libjsc.so
을 overwrite 해야 합니다. 이를 위해서 Zip Slip 취약점이 사용됩니다.
TmaTestActivity
는 인터넷에서 zip 파일을 통해 SDK를 업데이트합니다. 이때 DownloadBaseBundleHandler
에서 sdkUpdateVersion
파라미터를 확인하여 버전을 확인하는데, 값을 99.99.99
로 설정하면 검사를 통과하여 다운로드를 시작합니다. 다운로드 후 파일 이름에 있는 {md5sum_of_file}
과 파일의 md5sum 값을 비교하므로 파일 이름은 anything_{md5sum_of_file}.zip
이 되어야 합니다. 그 후 다운로드 한 파일은 정상적으로 압축이 해제되어 native-library를 악성 라이브러리로 overwrite 할 수 있습니다. 라이브러리를 overwirte 한 후 애플리케이션을 재실행하거나 com.tt.miniapphost.placeholder.MiniappTabActivity0
를 통해 Remote Code Execution이 가능합니다.
해당 취약점들은 XSS 코드 수정, TmaTestActivity
삭제, intent
scheme 제한 구현으로 수정되었습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.