鸿蒙安全之鲜为人知的globalThis另一面

admin 2025年1月2日17:27:56评论16 views字数 1164阅读3分52秒阅读模式
鸿蒙安全之鲜为人知的globalThis另一面
globalThis是ArkTS引擎实例内部的一个全局对象,引擎内部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis对象进行数据同步。
鸿蒙安全之鲜为人知的globalThis另一面
最近在分析libark_jsruntime.so时,偶然发现了一个函数requireNapi,它的作用等价于require。但是在IDE中并没有提示有该函数。
比如:
globalThis.requireNapi("process") 可以加载process模块,返回的是process的module对象,可以调用该module中定义的任何接口。
这样比上一篇文章鸿蒙系统安全之访问未导出接口中提到的修改sdk声明的方式更直接。
鸿蒙安全之鲜为人知的globalThis另一面
那么问题来了,基于这样一个特性可以做些什么呢?

是否可以跳出当前进程的沙盒,可以访问其他任意系统服务?

鸿蒙安全之鲜为人知的globalThis另一面
然后尝试在lib64/module目录下搜索引用了GetSystemAbilityManager的napi。在hidebug.so中找到了这样一个函数:GetServiceDump
这个函数是一个js native函数,接受三个参数,类型分别是int,int, array
第一个参数是sa的id
if ( (unsignedint)napi_get_value_int32(a1, argv[0], &v43[1]) )  {    HiLogPrintDictNew(3LL,6LL,218115338LL,"HiDebug_NAPI",593869965LL,      (unsignedint)"Get input serviceId failed." - (unsignedint)"filename: %{public}s.","Get input serviceId failed.");goto LABEL_11;  }
可见输入参数1表示sa的serviceid。
globalThis.requireNapi("hidebug").getServiceDump(3705, 1, [])

是否还有其他隐藏属性?

鸿蒙安全之鲜为人知的globalThis另一面
答案是有的!比如activeStatus_,callingUid_,IPCOptionConstructor_等等。
globalThis.activeStatus_ = 1;globalThis.callingUid_ = 1000;console.log(globalThis.IPCOptionConstructor_);console.log(globalThis.requireNapi("rpc").IPCSkeleton.getCallingUid());
具体含义以及可能性大家可以去验证。

是否还有其他玩法?

鸿蒙安全之鲜为人知的globalThis另一面
我想是有的!请关注我并等待我的探索和验证!

原文始发于微信公众号(大山子雪人):鸿蒙安全之鲜为人知的globalThis另一面

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日17:27:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   鸿蒙安全之鲜为人知的globalThis另一面https://cn-sec.com/archives/3584364.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息