Skip to content

_is_safe_command 的阻挡能力或许有限 #9086

Description

@minecraftfen

事前声明:

在 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 脚本),或者使用正则匹配等方式解决。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:coreThe bug / feature is about astrbot's core, backend

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions