事前声明:
在 B站 上了解到 PR #8590 后慕名前来参观,然后注意到了这个问题。
我在提交 Issue 之前简单搜索了所有 Issue,没能找到提出相似问题的 Issue。
我没用过 AstrBot,看了 README,注意到项目能够接入群聊,可能暴露于提示词注入攻击风险中,因此我推测,目前阻止危险命令的方法在阻止 AI 无意的错误方面虽然足够,但或许无法阻止 AI 被有意控制时造成的问题。
我主要写Typescript,水平也很业余,加上对项目了解不深,可能存在判断错误或小题大做的情况,如果没必要修,也可以直接关 Issue
我注意到 /astrbot/core/computer/booter 的 _is_safe_command(command: str) -> bool 的实现似乎只是对黑名单字符串模式进行了子串匹配,这可能导致两个问题:
- 黑名单中所有字符串都带有前缀空格,不怎么写 Python,不了解这是为什么,但我猜测这可能会导致
/usr/sbin/shutdown 这样给出完整路径的命令被此函数放行
x(){ x|x& }; x 这样只是换了名字,或者多输入了几个空格的 Fork 炸弹,也会被放行。
或许 _is_safe_command 需要实现简单的命令解析,改为确认命令是否指向特定可执行文件并传递特定标志。
对于 Fork 炸弹,这是个停机问题,完美的防御肯定不现实,但或许可以禁止函数定义等危险 Shell 特性(毕竟我用 AI 的时候没见过它把一行命令写成带函数的复杂 Shell 脚本),或者使用正则匹配等方式解决。
事前声明:
在 B站 上了解到 PR #8590 后慕名前来参观,然后注意到了这个问题。
我在提交 Issue 之前简单搜索了所有 Issue,没能找到提出相似问题的 Issue。
我没用过 AstrBot,看了 README,注意到项目能够接入群聊,可能暴露于提示词注入攻击风险中,因此我推测,目前阻止危险命令的方法在阻止 AI 无意的错误方面虽然足够,但或许无法阻止 AI 被有意控制时造成的问题。
我主要写Typescript,水平也很业余,加上对项目了解不深,可能存在判断错误或小题大做的情况,如果没必要修,也可以直接关 Issue
我注意到
/astrbot/core/computer/booter的_is_safe_command(command: str) -> bool的实现似乎只是对黑名单字符串模式进行了子串匹配,这可能导致两个问题:/usr/sbin/shutdown这样给出完整路径的命令被此函数放行x(){ x|x& }; x这样只是换了名字,或者多输入了几个空格的 Fork 炸弹,也会被放行。或许
_is_safe_command需要实现简单的命令解析,改为确认命令是否指向特定可执行文件并传递特定标志。对于 Fork 炸弹,这是个停机问题,完美的防御肯定不现实,但或许可以禁止函数定义等危险 Shell 特性(毕竟我用 AI 的时候没见过它把一行命令写成带函数的复杂 Shell 脚本),或者使用正则匹配等方式解决。