squirrel icon indicating copy to clipboard operation
squirrel copied to clipboard

squirrel 0.18 无法使用自行编译的插件

Open thelastlin opened this issue 1 year ago • 2 comments

问题表现

Squirrel 0.18 无法使用自行编译的插件。在尝试加载自行编译的插件时,dlopen会给出错误:

code signature in <UUID> '/Library/Input Methods/Squirrel.app/Contents/Frameworks/rime-plugins/librime-<PLUGIN_NAME>.dylib' not valid for use in process: mapping process and mapped file (non-platform) have different Team IDs

自行重新编译或对原有的binary重新进行签名可避免此错误。

可能解决方案

  • 编译时加入entitlement: com.apple.security.cs.disable-library-validation,参考:https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation 。

thelastlin avatar May 06 '24 09:05 thelastlin

可是這樣的話簽名就是個擺設了,思考一下 會有安全隱患嗎,比如用戶放了一個不安全的插件進去 以前插件是和librime綑綁的,換插件比較麻煩要連著librime一起換,現在可以單獨換插件,還是可能有很多人去加插件的 有沒有啥能兼顧一點安全的辦法

LEOYoon-Tsaw avatar May 06 '24 11:05 LEOYoon-Tsaw

會有安全隱患嗎,比如用戶放了一個不安全的插件進去

输入法位于 /Library/Input\ Methods/,这一目录默认是只有root用户可修改。 如果用户将插件放到/Library/Input Methods/Squirrel.app/Contents/Frameworks/rime-plugins中的话,那可以认为具有管理员权限的用户一定授权了这一行为,应对此行为负责。

对于安全隐患,OpenSSH先前出现过一个类似的问题:CVE-2023-38408。

有沒有啥能兼顧一點安全的辦法

也许确实没有。 作为参考,Apple在随Mac OS X自带的OpenSSH和sudo中带有一个类似的私有entitlement:com.apple.private.security.clear-library-validation,它们会在dlopen失败时禁用library的签名验证,对应的代码及文章说明可参见 apple-oss-distributions/OpenSSH 及 https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/ 。

如果想要强化安全性的话,似乎可以考虑修改librime,只允许加载指定目录中的插件,并且在插件加载前先检查插件的所有者、权限和ACL,若非root用户具有写权限时则拒绝加载。

thelastlin avatar May 07 '24 03:05 thelastlin

升级之后lua require so也会报签名错误,求助怎么解决

Urie96 avatar May 10 '24 11:05 Urie96

需要用第三方庫的先別升級,或者有能力的自己簽名吧,過不久再發一版,只是沒想好是否分成兩個版本,一般用戶就用安全版,想折騰的用戶去用不驗證動態庫的版本並自行承擔風險

LEOYoon-Tsaw avatar May 10 '24 12:05 LEOYoon-Tsaw

計畫這樣,如果沙盒能穩定使用,那就不再檢測plugin簽名了,沙盒應該能大體保證安全

LEOYoon-Tsaw avatar May 14 '24 20:05 LEOYoon-Tsaw