[하루한줄] 안드로이드 틱톡 앱에서 발견된 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 검사를 합니다. 그러나 httphttps 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 제한 구현으로 수정되었습니다.