From adaba69ecd01fe00d020d65b33ecc23a260ecdb6 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 17 Jul 2025 14:10:24 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md --- .../ios-pentesting/ios-universal-links.md | 49 ++++++++++++++++--- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md index 4a2bce4ad..aa6acb81b 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md +++ b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md @@ -20,19 +20,31 @@ Universal links 为用户提供了 **无缝重定向** 的体验,通过直接 ``` 对于更全面的见解,请参考[归档的 Apple 开发者文档](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2)。 -如果使用编译的应用程序,可以按照[本指南](extracting-entitlements-from-compiled-application.md)中概述的方法提取权限。 +如果使用的是已编译的应用程序,可以按照[本指南](extracting-entitlements-from-compiled-application.md)中概述的方法提取权限。 ### **检索 Apple App Site Association 文件** -`apple-app-site-association` 文件应从服务器上使用权限中指定的域名进行检索。确保该文件可以通过 HTTPS 直接访问,地址为 `https:///apple-app-site-association`。像[Apple App Site Association (AASA) 验证器](https://branch.io/resources/aasa-validator/)这样的工具可以帮助完成此过程。 +`apple-app-site-association` 文件应从服务器上使用权限中指定的域名进行检索。确保该文件可以通过 HTTPS 直接访问,地址为 `https:///apple-app-site-association`(或 `/.well-known/apple-app-site-association`)。像[Apple App Site Association (AASA) 验证器](https://branch.io/resources/aasa-validator/)这样的工具可以帮助完成此过程。 + +> **从 macOS/Linux shell 快速枚举** +> +> ```bash +> # 假设您已将权限提取到 ent.xml +> doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \ +> grep -oE 'applinks:[^<]+' | cut -d':' -f2) +> for d in $doms; do +> echo "[+] Fetching AASA for $d"; +> curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.' +> done +> ``` ### **在应用中处理 Universal Links** -应用必须实现特定的方法以正确处理 universal links。需要关注的主要方法是[`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)。处理的 URL 的方案必须是 HTTP 或 HTTPS,其他方案将不被支持。 +应用必须实现特定方法以正确处理 universal links。需要关注的主要方法是[`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)。处理的 URL 的方案必须是 HTTP 或 HTTPS,其他方案将不被支持。 #### **验证数据处理方法** -当一个 universal link 打开应用时,一个 `NSUserActivity` 对象会与 URL 一起传递给应用。在处理此 URL 之前,验证和清理它以防止安全风险是至关重要的。以下是一个用 Swift 演示该过程的示例: +当一个 universal link 打开应用时,一个 `NSUserActivity` 对象会与 URL 一起传递给应用。在处理此 URL 之前,验证和清理它以防止安全风险是至关重要的。以下是一个在 Swift 中演示该过程的示例: ```swift func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { @@ -44,7 +56,7 @@ application.open(url, options: [:], completionHandler: nil) return true } ``` -URLs 应该被仔细解析和验证,特别是当它们包含参数时,以防止潜在的欺骗或格式错误的数据。`NSURLComponents` API 对此非常有用,如下所示: +URLs 应该被仔细解析和验证,特别是当它们包含参数时,以防止潜在的欺骗或格式错误的数据。`NSURLComponents` API 对此目的非常有用,如下所示: ```swift func application(_ application: UIApplication, continue userActivity: NSUserActivity, @@ -70,15 +82,36 @@ return false } } ``` -通过 **勤奋的配置和验证**,开发人员可以确保通用链接在增强用户体验的同时,维护安全和隐私标准。 +通过 **勤奋的配置和验证**,开发者可以确保通用链接在增强用户体验的同时,维护安全和隐私标准。 + +## 常见漏洞与渗透测试检查 + +| # | 弱点 | 测试方法 | 利用/影响 | +|---|----------|------------|-----------------------| +| 1 | **AASA 文件中的 `paths` / `components` 过于宽泛**(例如 `"/": "*"` 或通配符如 `"/a/*"`)。 | • 检查下载的 AASA,寻找 `*`、尾部斜杠或 `{"?": …}` 规则。
• 尝试请求仍符合规则的未知资源(`https://domain.com/a/evil?_p_dp=1`)。 | 通用链接劫持:注册相同域名的恶意 iOS 应用可以声称所有这些链接并呈现钓鱼 UI。一个现实世界的例子是 2025 年 5 月的 Temu.com 漏洞赏金报告,其中攻击者可以将任何 `/a/*` 路径重定向到他们自己的应用。 | +| 2 | **缺少深层链接路径的服务器端验证**。 | 在识别允许的路径后,向不存在的资源发出 `curl`/Burp 请求并观察 HTTP 状态码。任何不是 `404` 的状态(例如 200/302)都是可疑的。 | 攻击者可以在允许的路径后托管任意内容,并通过合法域名提供,从而提高钓鱼或会话令牌盗窃的成功率。 | +| 3 | **应用端 URL 处理未进行方案/主机白名单**(CVE-2024-10474 – Mozilla Focus < 132)。 | 查找直接的 `openURL:`/`open(_:options:)` 调用或转发任意 URL 的 JavaScript 桥接。 | 内部页面可以走私 `myapp://` 或 `https://` URL,绕过浏览器的 URL 栏安全检查,导致欺骗或意外的特权操作。 | +| 4 | **在权限中使用通配符子域**(`*.example.com`)。 | 在权限中 `grep` 查找 `*.`。 | 如果任何子域被接管(例如通过未使用的 S3 存储桶),攻击者将自动获得通用链接绑定。 | + +### 快速检查清单 + +* [ ] 提取权限并列举每个 `applinks:` 条目。 +* [ ] 下载每个条目的 AASA 并审核通配符。 +* [ ] 验证 Web 服务器对未定义路径返回 **404**。 +* [ ] 在二进制文件中确认 **仅** 处理受信任的主机/方案。 +* [ ] 如果应用使用较新的 `components` 语法(iOS 11+),模糊查询参数规则(`{"?":{…}}`)。 ## 工具 -- [GetUniversal.link](https://getuniversal.link/): 帮助简化应用程序的通用链接和 AASA 文件的测试和管理。只需输入您的域名以验证 AASA 文件的完整性,或使用自定义仪表板轻松测试链接行为。该工具还帮助您确定 Apple 下次何时索引您的 AASA 文件。 +- [GetUniversal.link](https://getuniversal.link/): 帮助简化应用的通用链接和 AASA 文件的测试和管理。只需输入您的域名以验证 AASA 文件的完整性,或使用自定义仪表板轻松测试链接行为。该工具还帮助您确定 Apple 下次何时索引您的 AASA 文件。 +- [Knil](https://github.com/ethanhuang13/knil): 开源 iOS 工具,获取、解析并让您在设备上直接 **点击测试** 每个由域声明的通用链接。 +- [universal-link-validator](https://github.com/urbangems/universal-link-validator): CLI / Web 验证器,执行严格的 AASA 合规性检查并突出危险的通配符。 -## 参考 +## 参考文献 - [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis) - [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8) +- [https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e](https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e) +- [https://nvd.nist.gov/vuln/detail/CVE-2024-10474](https://nvd.nist.gov/vuln/detail/CVE-2024-10474) {{#include ../../banners/hacktricks-training.md}}