| name | arkts-ability-hijack |
| description | 针对 HarmonyOS 应用的 Ability 劫持和权限绕过漏洞分析,重点关注 Want 参数处理、Ability 启动和隐式调用 |
| engine | abc |
| target_type | harmonyos |
| scope | {"description":"处理 Want 参数和启动 Ability 的代码路径"} |
| strategy_hints | {"max_depth":"建议调用链深度为 3-5 层","concurrency":"可根据函数数量动态决定并发度"} |
| taint_sources | ["router.getParams() 返回的参数","want.parameters 中的数据","AppStorage/PersistentStorage 中用户可控的数据"] |
| dangerous_apis | ["startAbility()","router.pushUrl()","want.parameters"] |
| tags | ["ability_hijack","harmonyos","want"] |
分析范围
分析范围应覆盖所有处理 Want 参数和启动 Ability 的代码路径。
重点关注以下类型的组件:
- UIAbility 的 onCreate/onNewWant 方法
- 处理 router 参数的处理函数
- startAbility 调用的位置
- Want 参数解析逻辑
排除建议
可以排除系统框架类和测试代码。
工作流
- 搜索 UIAbility 实现类及其生命周期方法
- 分析 Want 参数处理流程
- 识别 startAbility 调用点并追踪 Want 来源
- 对可疑路径开展漏洞挖掘
漏洞关注点
重点关注以下安全问题:
- Ability 劫持: 隐式 Want 启动未指定 bundleName/abilityName
- 权限绕过: 通过伪造 Want 参数绕过权限检查
- 敏感信息泄露: Want 参数中的敏感数据处理
- 嵌套 Want 攻击: 处理嵌套 Want 时未校验来源
背景知识
HarmonyOS Want 安全机制
Want 结构
interface Want {
bundleName?: string;
abilityName?: string;
action?: string;
parameters?: {
[key: string]: any;
};
}
危险模式
- 隐式启动
router.pushUrl({ url: 'pages/Index', params: userData });
- 未校验嵌套 Want
onCreate(want: Want) {
let nestedWant = want.parameters?.nested;
this.context.startAbility(nestedWant);
}
安全做法
- 始终明确指定 bundleName 和 abilityName
- 验证 Want 参数的来源
- 不要直接使用传入的 Want 启动新 Ability
污点源
- router.getParams() 返回的参数
- want.parameters 中的数据
- AppStorage/PersistentStorage 中用户可控的数据
入口函数示例
UIAbility.onCreate
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
let userData = want.parameters?.userData;
}
}
router 参数处理
import router from '@ohos.router';
let params = router.getParams();