G.O.S.S.I.P 阅读推荐 2025-03-27 达芬奇密码

admin 2025年4月2日23:18:14评论5 views字数 3004阅读10分0秒阅读模式
重要的事放开头。先说明本文提到的信息都是功能!feature!
有段时间没更新了,当然是不务正业去摸鱼啦。在沉迷学习视频调色,不然感觉对不起自己的 id(codecolorist)。都怪影视飓风。
标题玩了个小聪明,英文里代码和密码都是一个词。
我估计会看到本公众号的人群和视频创作者基本不存在交集,所以先简单科普一下 DaVinci Resolve(达芬奇)。
如果经常看过影视飓风应该会略有耳闻。这个软件支持视频非编剪辑、调色甚至加特效。最流行的场景还是作为影视工作流调色的这一步。在官网的宣传稿上可以看到,近年各种大家耳熟能详的奥斯卡获奖影片相当一部分都用了达芬奇做后期调色。那么找到 bug 是不是就可以拿下好莱坞了?
恶补了一堆教程视频,嫌弃我几年前买的相机视频只有 8bit,没有 60 帧,又整了一台机身。折腾一圈下来发现拍视频比拍照麻烦多了,没两把刷子做出来效果惨不忍睹。先不说手机也可以拍 ProRes log,原相机都自带亮瞎眼的 HDR。没技术真就不如手机加剪映滤镜,打水漂了。
达芬奇提供免费版和付费解锁高级功能的 Studio 版,相比硬件投入,授权连零头都够不到。免费版极其良心,已经能覆盖普通 vlog 绝大多数需求,但我又菜又爱玩,想试试相机输出杜比视界什么效果,就搞了个正版。免费版和 Studio 还有一个区别就是从 Store 直接下载和从 dmg 安装。免费版有沙箱,而 Studio 版则不带 app sandbox。
G.O.S.S.I.P 阅读推荐 2025-03-27 达芬奇密码
我有个习惯,时不时看一下哪个应用乱开端口。用上了正版第二天就发现不对劲,多了一个 fuscript 进程,还监听 tcp 0.0.0.0:1144。进程名看上去感觉在用英文骂人,不会被搞了吧?
定位到文件一看是达芬奇的组件。这个程序免费版也有,但付费版才会默认跟随主应用一起运行。
挂上调试器给 socket api 下断点:
Target 0: (fuscript) stopped.(lldb) bt* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.15  * frame #0: 0x00000001909a37fc libsystem_kernel.dylib`__accept    frame #1: 0x0000000102e09b00 fusionscript.so`Fusion::Platform::AcceptSocket(Fusion::Platform::_Socket*) + 28    frame #2: 0x0000000102e312dc fusionscript.so`___lldb_unnamed_symbol4493 + 480    frame #3: 0x0000000102e31a34 fusionscript.so`ScriptServerMain + 112
主要逻辑都在 fusionscript.so 里面。打开一看里面一堆 lua 相关的符号,而同时这个链接库又是一个可以加载的 python 二进制模块。
那个可疑的端口用的二进制报文格式大概是(对不起,没仔细分析)先发送一个 dword 表示长度,然后紧跟一段二进制系列化的对象。对应编解码函数如下:
Fusion::ScriptVal::ToPkt
Fusion::ScriptVal::FromPkt
到这里我浪费了几个小时研究发包的格式,这时候突然发现……这不就有现成的 api。
DaVinci 支持 lua 脚本(宏)自动化。
G.O.S.S.I.P 阅读推荐 2025-03-27 达芬奇密码
可以从 Workspace / Console 菜单打开 REPL,然后执行 lua 代码操作工程。
在系统设置里还有一处 External Scripting 的选项:
G.O.S.S.I.P 阅读推荐 2025-03-27 达芬奇密码
存在三个模式:
  • 禁用(None)
  • 本地(Local)
  • 远程(Network)
系统默认是 Local,限制从 localhost 访问脚本端口。如果改成 Network,就可以从局域网甚至公网访问过来。
具体是什么呢?
达芬奇安装后会在系统提供可导入的 python 模块,用来编写脚本和工程交互。如下是 macOS 的路径,其他系统存在差异。
"/Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting/Modules/"
例如让 UI 切换标签页到渲染输出:
resolve = bmd.scriptapp('Resolve')resolve.OpenPage('deliver')
有一个 BBS 叫 WeSuckLess 专门交流脚本的编写:
www.steakunderwater.com/wesuckless/index.php
不少人开始给各种软件适配 Model Context Protocol,来实现让 AI 自动化各种任务的效果,从 Ghidra 到 IDA Pro,达芬奇也不例外。随便搜了一下,两周内有不止一个 GitHub 项目尝试用 python 集成 MCP 到达芬奇。
重点来了。
这个 python binding 底层和 DaVinci 主程序通信就是通过我们前文提到的这几个程序和端口。如果在系统设置里把权限改成网络访问,从局域网另一台电脑上无需安装完整版程序,也可以直接通过 python 模块控制达芬奇的实例。一个典型的远程过程调用机制。
但是没有验证?
对,没有身份验证……一旦开启,谁都可以通过 tcp 连上来(除非有防火墙)。在程序二进制代码里看到一个 __Login 方法,但目前是空的,没实现。
Office 的宏几十年前就被拿来做恶了。
首先 DaVinci Resolve 的 fusion(视频特效)支持 lua 表达式,因此发送一个嵌有 lua 代码的工程是可行的。就是理论上只有到渲染一步才会运行。
其次这个远程过程调用确实可以传 lua 代码:
fusion = bmd.scriptapp("Fusion""test.local")# test.local 为内网的目标系统地址print(dir(fusion))fusion.Execute('lua code here')
到了 lua 这一步压根就不用什么沙箱逃逸,直接带了 os.execute 模块……以下是弹计算器的流量。
G.O.S.S.I.P 阅读推荐 2025-03-27 达芬奇密码
这不演示小视频就有了,拿去吓唬一下 B 站各种百大。
甚至还带了 ffi,可以调用任意 native 代码。喜欢 41414141 的读者有福了。
G.O.S.S.I.P 阅读推荐 2025-03-27 达芬奇密码
这是功能!就是这么设计的,反正默认也不开启。
实测发现默认的配置虽然是 Local,不影响这几个端口监听 0.0.0.0 的请求,非本机发探针还是会应答系统版本。只是到真正执行 __Connect 调用的时候会判断 gethostbyaddr,拒绝非 127.1 的连接。
我赶紧把脚本先设置成 None,外加防火墙过滤端口。
依然对这个实现依然存在疑问。比如 DNS 劫持的情况下会不会导致 host 检测绕过,解析二进制数据的反序列化函数是否安全,还有这整个 RPC 机制会不会有别的逻辑问题?
我找了一下达芬奇的历史 CVE。2021 年有两个 Cisco Talos 实验室 fuzz 的文件格式相关的 CVE-2021-40417 和 CVE-2021-40418;还有一个比较近的 CVE-2025-1413 略蛋疼,一个本地文件权限问题给了吓人的 8.4 CVSS。有兴趣研究还是盯一下这个网络的向量吧。
题图来自 unsplash,作者 Andrey Novik

原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2025-03-27 达芬奇密码

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月2日23:18:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2025-03-27 达芬奇密码http://cn-sec.com/archives/3891847.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息