OWASP MASTG 指南:检测 iOS 应用中已弃用 UIWebView(MASTG-TEST-0331)
文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载导读本文基于 OWASP Mobile Application Security Testing GuideMASTG中的测试用例 MASTG-TEST-0331系统讲解如何在 iOS 应用中静态检测已弃用的UIWebView组件。文章将首先说明为什么UIWebView自 iOS 12 起被 Apple 弃用、它与WKWebView在安全模型上的本质差异然后给出可复现的二进制静态分析步骤解包 IPA → radare2 检索符号与交叉引用并结合仓库中的知识条目、最佳实践与失败 Demo 源码帮助读者掌握发现即修复的完整取证与迁移能力。测试用例概览MASTG-TEST-0331该测试用例定义于 MASTG-TEST-0331.md属于 iOS 平台、静态代码分析类型用于验证应用是否仍在使用已弃用的UIWebViewAPI。其元数据与关联如下平台iOS类型静态、代码分析type: [static, code]可用版本MASTG 2.0 起available_since: 2.0弃用版本MASTG 12.0 起deprecated_since: 12.0关联 MASWEMASWE-0035iOS 平台交互相关的弱点枚举关联最佳实践MASTG-BEST-0032关联知识条目MASTG-KNOW-0076测试目标测试的核心目标在应用二进制中查找对UIWebView的引用。UIWebView是自 iOS 12.0 起被 Apple 弃用的组件其继任者是WKWebView。使用UIWebView存在安全与性能双重风险它不允许完全禁用 JavaScript、缺乏进程隔离而WKWebView提供、且不支持 Content Security PolicyCSP等现代 Web 安全特性。测试步骤三步走使用 MASTG-TECH-0058Exploring the App Package 从应用包IPA中提取相关二进制。使用 MASTG-TECH-0066Static Analysis on iOS 在应用二进制中检索相关 API 引用。观察输出应得到应用中所有UIWebView使用位置的列表只要发现任何UIWebView使用测试即判失败fail。为什么 UIWebView 必须被淘汰安全模型对比知识条目 MASTG-KNOW-0076 对 iOS WebView 家族做了完整梳理。iOS 应用中嵌入 Web 内容主要有三种方式组件引入版本JavaScript 可禁用进程隔离现代 Web 安全特性WKWebViewiOS 8✅ 可通过javaScriptEnabled完全禁用✅ 进程外渲染✅ 支持 CSP 等SFSafariViewControlleriOS 9❌ 无法禁用——UIWebView已弃用早期❌ 无法禁用❌ 无❌ 不支持UIWebView 的三个致命安全短板JavaScript 无法完全禁用UIWebView中 JavaScript 默认开启且无法关闭一旦渲染不可信内容注入的脚本可直接执行为脚本注入攻击敞开大门。缺乏进程隔离UIWebView与主应用进程共享地址空间Web 内容中的内存破坏漏洞memory corruption bugs会直接影响主应用进程而WKWebView采用进程外out-of-process渲染隔离了 Web 内容崩溃对主进程的冲击。不支持现代 Web 安全特性UIWebView不支持 Content Security PolicyCSP等现代 Web 安全机制削弱了对 Web 内容的整体防护能力。WKWebView 的替代安全能力作为官方推荐的替代方案WKWebView提供javaScriptEnabled属性默认开启但可完全禁用缓解脚本注入攻击javaScriptCanOpenWindowsAutomatically属性可阻止 JavaScript 自动打开新窗口如弹窗进程外渲染内存破坏漏洞不会影响主应用进程。此外WKWebView与UIWebView都支持 JavaScript BridgeWebView 与原生代码的通信桥但这本身也是攻击面——任何暴露给 WebView JavaScript 引擎的原生功能同样对 WebView 中运行的恶意 JavaScript 可用。相关细节可参考 MASTG-KNOW-0076 的 WebView-Native Bridges 一节。前置知识WebView 在 iOS 中的角色定位理解UIWebView的检测需先建立 iOS WebView 的整体认知依据 MASTG-KNOW-0076WebView 是应用内嵌浏览器组件用于在应用 UI 中直接展示交互式 Web 内容iOS WebView 执行 JavaScript 并渲染 HTML因此渲染不可信内容时可能执行注入脚本。SFSafariViewController用于提供通用 Web 浏览体验具有只读地址栏带安全指示器、ActionShare按钮、Done 按钮、前进/后退与Safari按钮等特征布局。它无法禁用 JavaScript、与 Safari 共享 Cookie 与网站数据且应用无法访问用户的 AutoFill 数据、浏览历史或网站数据。根据 App Store Review Guidelines它不得被其他视图或图层隐藏或遮挡。此类 WebView 通常可被快速识别故不在静态/动态分析范围之内。WebView 网络层安全iOS WebView 底层引擎是 WebKit与 Safari 相同因此同样受 App Transport SecurityATS与混合内容Mixed Content策略约束开发者可为 WebView 单独配置 ATS例如 Info.plist 中的NSAllowsArbitraryLoadsInWebContent配置不当会引入安全问题。在WKWebView中WebKit 自身会默认拦截 HTTPS 页面加载的 HTTP 活动混合内容即使放宽 ATS 也无法关闭该防护hasOnlySecureContentAPI 可用于页面加载完成后判断最终是否只加载了安全资源仅具信息性非预防性。实操从 IPA 到二进制的静态检测全流程第一步提取应用包并定位主二进制依据 MASTG-TECH-0058首先获取目标应用的 IPA 包然后使用标准 ZIP 工具解压unzip iGoat-Swift.ipa解压后在Payload目录下可找到 Application Bundle.app。以仓库中的失败 Demo MASTG-DEMO-0094 为例其主二进制为./Payload/MASTestApp.app/MASTestApp。Bundle 中值得关注的关键项包括Info.plist应用配置信息Bundle ID、版本号、显示名称等_CodeSignature/对 Bundle 内所有文件的签名 plistFrameworks/应用的原生库.dylib 或 .frameworkPlugIns/可能包含应用扩展.appex主二进制与 Bundle 同名不含 .app 后缀包含应用代码。第二步用 radare2 检索 UIWebView 引用依据 MASTG-TECH-0066对 iOS 二进制进行静态分析的首选工具是 radare2r2。iOS 应用二进制只能反汇编无 Java 式反编译器因此需借助符号、字符串与交叉引用分析。使用 MASTG-TOOL-0073radare2 打开二进制并运行检测脚本-i选项执行 r2 脚本r2 -i uiwebview.r2 ./Payload/MASTestApp.app/MASTestApp仓库中的检测脚本 uiwebview.r2 展示了三个关键检索命令# 1. 列出二进制中所有与 UIWebView 相关的符号/标志 f~UIWebView # 2. 列出指向 UIWebView 类的所有交叉引用 axt 0x100010108 # 3. 反汇编包含交叉引用的代码片段 pd 10 0x100004514命令要点依据 MASTG-TECH-0066f~用于过滤 flags标志可检索动态解析的符号——这类符号不会出现在afl函数列表中例如该技术文档中canEvaluatePolicy的示例UIWebView正属于此类通过动态解析引用的类符号axt addr查找指向给定地址的交叉引用为临时 seek 语法也可直接axt 0x100010108pd N addr从指定地址开始反汇编 N 条指令用于查看调用上下文若需查看函数列表可用afl并配合~过滤如afl~UIWebView用afl,输出 CSV 便于表格化分析。第三步解读输出并判定仓库中 output.txt 给出了真实运行结果List all uses of the UIWebView class: 0x100010108 8 reloc.UIWebView List all xrefs to the UIWebView class: sym.MASTestApp.MastgTest.mastg.completion__1 0x100004514 [DATA:r--] ldr x0, reloc.UIWebView Code snippet that contains the xref to UIWebView: │ 0x100004514 ldr x0, [x8, 0x108] ; [0x100010108:4]231 │ ; reloc.UIWebView ; void *arg0 │ 0x100004518 bl sym.imp.objc_allocWithZone ; void *objc_allocWithZone(void *arg0) │ 0x10000451c adrp x26, sym.__METACLASS_DATA__TtC10MASTestAppP33_9471609302C95FC8EC1D59DD4CF2A2DB19ResourceBundleClass ; 0x100010000 │ 0x100004520 ldr x1, [x26, 0x90] ; [0x100010090:4]0xb0d9 ; reloc.fixup.init │ 0x100004524 bl sym.imp.objc_msgSend ; void *objc_msgSend(void *instance, char *selector) │ 0x100004528 mov x21, x0 │ 0x10000452c adrp x8, sym.imp.swift_deallocObject ; 0x10000a000 │ 0x100004530 add x8, x8, 0xc90 ; 0x10000ac90 ; https://owasp.org解读要点f~UIWebView命中了reloc.UIWebView重定位符号说明二进制确实引用了UIWebView类axt 0x100010108显示sym.MASTestApp.MastgTest.mastg.completion__1函数在地址0x100004514处通过ldr x0, reloc.UIWebView加载该类引用反汇编片段进一步揭示调用链objc_allocWithZone分配实例 →objc_msgSend发送初始化消息 → 构造https://owasp.org的 URL —— 与 Demo 源码行为完全吻合。判定规则测试用例 MASTG-TEST-0331 的 Evaluation 规则只要在应用中发现任何UIWebView的使用测试即判失败fail。对应地MASTG-DEMO-0094 被标记为kind: fail其输出明确包含从sym.MASTestApp.MastgTest.mastg.completion__1函数对UIWebView的引用因此测试失败。仓库中的失败样本源码剖析为了让你完整理解检测目标在源码层面的形态MastgTest.swift 展示了该 Demo 的核心代码import SwiftUI import UIKit import WebKit struct MastgTest { inline(never) _optimize(none) public static func mastgTest(completion: escaping (String) - Void) { DispatchQueue.main.async { // Build the alert completion(Showing WebView for 2s...) // 1. Create the WebView DispatchQueue.main.asyncAfter(deadline: .now() 1){ let webView UIWebView() webView.loadRequest(URLRequest(url: URL(string: https://owasp.org)!)) ... } } } ... }该样本的审计价值在于直接实例化UIWebView()并通过loadRequest(URLRequest(url:))加载远程 URL——这是 MASTG-TEST-0331 检测的最典型模式inline(never) _optimize(none)编译注解确保该函数不被内联优化使二进制中保留清晰的符号与调用痕迹便于逆向验证样本加载的是 HTTPS 页面https://owasp.org说明UIWebView弃用检测与网络内容本身无关——即使加载安全的 HTTPS 内容使用已弃用且无进程隔离的组件仍属安全缺陷。提示该文件同时import WebKit与UIKit若将UIWebView()替换为WKWebView()即可在保持整体结构不变的情况下完成迁移。修复指引迁移到 WKWebViewMASTG-BEST-0032检测出UIWebView后应依据最佳实践 MASTG-BEST-0032 进行迁移Apple 于 iOS 12 弃用UIWebView改用WKWebView以获得更好的安全性与性能。迁移的核心收益进程外渲染Web 内容与主应用进程隔离降低内存破坏影响主进程的风险增强的 JavaScript 控制可完全禁用 JavaScript预防脚本注入漏洞现代 Web 安全特性支持如 Content Security PolicyCSP进一步增强 Web 内容安全。在迁移实践中可结合 MASTG-KNOW-0076 中的WKWebView配置要点注意以下安全相关的关键差异本地文件加载的目录边界iOS 通过allowingReadAccessTo参数强制按加载逐目录边界约束文件访问。loadFileURL(_:allowingReadAccessTo:)指向单文件则仅该文件可访问指向目录则目录内所有文件可访问含 Swift 示例代码。未文档化的文件访问偏好WKWebView中allowFileAccessFromFileURLs与allowUniversalAccessFromFileURLs默认均为false且只能通过 Key-Value CodingsetValue:forKey:设置——这些是内部 WebKit 偏好非公开 API跨系统版本可能失效。注意UIWebView恰好相反这两项默认开启且无法关闭这使其在加载本地内容时存在固有安全缺陷。JavaScript Bridge 攻击面WKWebView通过add(_:name:)注册消息处理器postMessage自动将 JS 对象序列化为原生对象桥暴露的任何原生能力对 WebView 中的恶意脚本同样可用迁移时需重新审计桥的暴露面。从检测到修复的完整闭环MASTG-TEST-0331 定位问题 → MASTG-BEST-0032 提供迁移策略 → MASTG-KNOW-0076 提供 WKWebView 安全配置细节三者协同构成完整的 iOS WebView 安全治理路径。延伸阅读测试用例 MASTG-TEST-0331本文核心测试定义知识条目 MASTG-KNOW-0076WebViewsiOS WebView 类型、文件访问与桥接的完整安全知识最佳实践 MASTG-BEST-0032Migrate from UIWebView to WKWebView官方迁移建议技术条目 MASTG-TECH-0058Exploring the App PackageIPA 解包与 Bundle 结构分析技术条目 MASTG-TECH-0066Static Analysis on iOSradare2 静态分析方法论Demo MASTG-DEMO-0094包含失败样本源码、r2 脚本与真实输出工具 MASTG-TOOL-0073radare2静态分析工具详情赞分享文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载相关推荐OWASP MASTG iOS 实战用 radare2 定位已废弃的 UIWebViewMASTG-DEMO-0094 / MASTG-TEST-0331OWASP MASTG iOS 实战用 radare2 定位已废弃的 UIWebViewMASTG DEMO 0094 / MASTG TEST 0331文档教程网络安全OWASP MASTG 测试指南在 iOS 应用中检测被破解的对称加密算法MASTG-TEST-0210OWASP MASTG 测试指南在 iOS 应用中检测被破解的对称加密算法MASTG TEST 0210 本文基于 OWASP Mobile Applic文档教程网络安全OWASP MASTG 指南iOS WKNavigationDelegate 证书校验绕过检测MASTG-TEST-0397OWASP MASTG 指南iOS WKNavigationDelegate 证书校验绕过检测MASTG TEST 0397 iOS 中 WKWebVie文档教程网络安全上一篇HowToGraphQLtypescript-helix 教程用 Prisma Client 把 GraphQL Server 与数据库连接起来下一篇如何快速获取中国运营商IP地址库每日更新的终极指南 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于 Netty 实现的 WebSocket 服务端

基于 Netty 实现的 WebSocket 服务端

目录一、短轮询(Short Polling)二、长轮询(Long Polling)三、WebSocket 长连接四、总结五、基于 Netty 实现的 WebSocket 服务端1、整体架构说明2、NettyWebSocketServer:WebSocket 服务端1. 线程组创建2. 启动方法3. …

2026/10/9 1:45:11 阅读更多 →
老电表RS485接入云平台的三种落地路径

老电表RS485接入云平台的三种落地路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 1:45:11 阅读更多 →
Agent双存储记忆架构:Working Memory与Persistent Memory实战设计

Agent双存储记忆架构:Working Memory与Persistent Memory实战设计

1. 什么是Agent Memory?它到底在解决什么问题?“Agent Memory架构设计与实现”这个标题乍看像一个技术名词堆砌,但背后藏着当前AI工程落地最棘手的现实瓶颈——不是模型不够大,而是Agent记不住、想不全、用不对。我从2022年第一批…

2026/10/9 1:45:11 阅读更多 →

最新新闻

从元器件到LM317可调电源:零基础硬件电路设计实战指南

从元器件到LM317可调电源:零基础硬件电路设计实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 3:33:14 阅读更多 →
三秒生成Alpha通道:贴花素材自动抠图并直连Substance Painter

三秒生成Alpha通道:贴花素材自动抠图并直连Substance Painter

做3D材质的兄弟应该都有过这种经历:在素材网站上看到一张完美的磨损贴花,下载下来,丢进Substance Painter一拖——结果背景一片灰,边缘全是杂边,Alpha通道干干净净地写着“无”。于是你打开Photoshop,魔棒、…

2026/10/9 3:33:14 阅读更多 →
Uber集成缓存:把缓存嵌入MySQL存储引擎的高并发读架构

Uber集成缓存:把缓存嵌入MySQL存储引擎的高并发读架构

买卖双方都不傻,亿级流量面前,缓存方案一定不是“用 Redis 顶在前面”这么简单。Uber 这篇集成缓存(Integrated Cache)的分享,是系统设计圈里少有的、把缓存直接塞进数据库存储引擎里的实战派解法。我读完第一反应是&a…

2026/10/9 3:33:14 阅读更多 →
AMD Ross FPGA Agent 深度解析:从 Vivado 工程自动化到智能调试

AMD Ross FPGA Agent 深度解析:从 Vivado 工程自动化到智能调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 3:33:14 阅读更多 →
EtherNet/IP工业以太网协议实战:从CIP架构到PLC与SCADA联调配置

EtherNet/IP工业以太网协议实战:从CIP架构到PLC与SCADA联调配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 3:33:14 阅读更多 →
双指针算法全攻略:对撞、快慢、滑动窗口三大模板与实战总结

双指针算法全攻略:对撞、快慢、滑动窗口三大模板与实战总结

刷题刷到一定量,很多人会慢慢总结出一条规律:有一类题的解法特别“固定”——有序数组里找两个数凑目标值、链表中判断有没有环、字符串里找不重复的最长子串,题面长得完全不一样,翻开题解一看,底层全是同一个思路&…

2026/10/9 3:32:13 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →