请遵守 README 使用限制,仅用本地隔离环境和合成数据验证问题。
本仓库已启用 GitHub 私密漏洞报告。请通过 Security → Advisories → Report a vulnerability 报告尚未修复的漏洞。若该入口暂时不可用,可在 issue 中仅请求维护者提供私密渠道,不公开漏洞细节、利用代码、密钥或用户数据。
报告中请提供受影响 commit/版本、触发条件、本地最小复现、预期与实际行为、影响及可能的修复方向。日志、请求和数据库样例应脱敏。维护者确认修复并协调公开后,再提交公开问题或说明。普通功能问题和已公开的修复可使用 issue/PR。
修复验证以当前代码和实际测试结果为准;历史 issue 的关闭状态不证明所有版本已修复。本项目尚未承诺特定版本的维护期限或响应时间。
Dependabot 检查 Go、前端和采集脚本的依赖。quality 在 PR 中检查两棵 npm 依赖树、当前文件和提交历史中的密钥,以及镜像文件层;新提交必须重新通过该检查。CodeQL 使用默认查询分析 Go、JavaScript/TypeScript、Python 和 Actions,结果在 Security 页面中审阅,不作为额外的合并批准流程。
告警优先通过升级依赖或移除未使用的依赖修复。重复的更新 PR 应链接替代 PR 后关闭,已修复的告警由默认分支分析自动更新;不为清空页面而批量忽略告警。采集脚本依赖 Puppeteer Core 和系统 Chromium,Node.js 最低版本为 22.12。
CodeQL #63 单条标记为 used in tests:采集合成回归临时设置不安全的 TLS 环境变量,断言专用传输仍默认拒绝一次性自签名回环证书,并在测试结束恢复环境。该用例用于验证默认保护,生产 TLS 策略和扫描规则保持启用。测试代理 fixture 的出站主机固定为回环地址,端口仅取自本次 fixture 创建的服务。
ARTEX 的单管理员可以配置 MCP、模型接口和自定义 HTTP 工具,也可以执行命令;服务应只开放给可信操作员,并使用 HTTPS。允许配置本地和私有网络目标是产品能力。MCP、模型发现和自定义 HTTP 工具仅跟随同源重定向,SSE 提供的发送端点也必须同源,以保护配置的凭据;请直接配置最终接口地址。
MCP 保存与授权分离。普通管理保存以及 Agent 的 create_mcp / update_mcp 都不能授予连接或执行权限;新增配置与名称、传输方式、程序、参数、环境变量/认证头、URL 或 TLS 策略的变更会停用配置并撤销旧授权。操作员在认证管理页面核对持久化配置后,显式授权该版本并启用。已授权且未变化的配置继续自动调用;无需逐次确认普通工具调用。stdio 程序和参数分别传递,不隐式构造 shell 命令。
批准、停用和保存使用服务端配置版本校验,过期页面或 Agent 请求不能覆盖并发变更或恢复旧批准。启动发现、手动发现、Agent 装配及 ScopeSentry 同步都要求当前版本已批准且启用;停用或待批准配置的“发现工具”不会启动程序或访问端点。已建立客户端在每次新工具调用前重新校验批准与版本;变更、停用、删除以及重新批准都会使旧客户端失效。已通过授权检查进入执行的在途操作可能完成,授权撤销不承诺撤回已经发出的请求或终止所有运行中的进程。数据库不可用时拒绝新的 MCP 调用。
升级保留已有 MCP 的地址、参数、凭据和 Agent 可见性,但历史 enabled 无法证明人工批准,因此所有旧配置需在 MCP 管理页重新授权一次。browser MCP 的捕获代理参数或 CA 环境变化同样会撤销批准,切换相关配置后需重新核对授权。ScopeSentry 数据源保存为草稿,在 MCP 管理页授权后才可探测或同步。管理列表只返回环境变量/认证头的键名;编辑时留空保留已有值,显式清空或替换会触发重新授权。
这项授权约束覆盖应用的 MCP 管理与调用通道。被授权的高权限 Auto 仍具有其他命令、自定义工具等执行能力;若进程能访问管理凭据、数据库或宿主机资源,它可以绕过应用层配置权限。因此这不构成进程沙箱、跨租户隔离或完整的提示注入防护。部署应将控制面的凭据与不可信执行环境隔离,按实际任务限制网络和凭据范围;仅向可信操作员提供管理访问。参考 OWASP Excessive Agency 的最小权限与服务端授权建议。
浏览器会话使用服务端签发的 HttpOnly、SameSite=Lax cookie,HTTPS 部署还设置 Secure;前端不持久化 JWT,也不将其放入 SSE URL。旧版浏览器会话升级后需要重新登录一次。命令行客户端继续使用 Bearer 认证。反向代理应保留外部 Host 并覆盖 X-Forwarded-Proto;Next 本机代理的转发 Host 只在后端确认连接来自 loopback 时采用。开发环境保留同一 localhost/私有 IP 上的前端 3000 或 5173 → 后端 8787 连接。
首次设置管理员密码需要本机初始化令牌。启动日志只提供 setup.token 的位置,令牌与 jwt.key 默认保存在共享工作区外的实例目录;POSIX 文件权限为 0600,Windows 继承用户实例目录的 ACL。公开状态接口不返回令牌,已设置密码后拒绝初始化重放;数据库故障仍拒绝操作,首次写入仍由数据库唯一约束控制。已有密钥和冲突文件不会被自动覆盖。
初始化、登录和改密的凭据 JSON 正文最多 4 KiB,在标准 Go HTTP 服务中需于 5 秒内完整读取,且仅含一个 JSON 值;限制内的未知字段仍兼容。过大、读取超时和格式错误分别返回 413、408、400。原有跨源、Basic Auth、限流及数据库/身份校验仍先按各自规则拒绝;这些提前拒绝也收尾未读凭据正文。HTTP/1 提前拒绝或正文未完整读取时关闭连接,完整读取后恢复正常复用;HTTP/2 按请求流处理。时限依赖 ResponseController,嵌入部署的包装器需通过 Unwrap 或相应方法暴露控制能力;不支持该能力的测试或嵌入 writer 仅具备大小和完整性边界。该策略限定三个凭据接口,普通上传和 SSE 沿用各自策略。
管理员会话签名绑定当前密码哈希;修改或外部重置密码后,旧 cookie/Bearer 在下一次请求失效。本次改密的浏览器获得新 cookie。升级前的会话需重新登录;已建立的 SSE 连接不会由本次变更主动断开。会话校验读取当前数据库凭据,数据库不可用时返回 503。实现参考 OWASP 认证指引。
工作区浏览、读写、下载及工作区/聊天附件上传通过持有的 Go os.Root 访问文件,拒绝越出工作区的符号链接;聊天附件使用排他创建,避免同名并发覆盖。这约束这些文件 API,不隔离 Agent 执行的进程、挂载或设备文件。
可选 HTTP Basic Auth 默认关闭,在管理员系统设置中启用;密码以 bcrypt 哈希保存在数据库中。通过验证后使用独立的 12 小时 HttpOnly、SameSite=Strict cookie,HTTPS 下设 Secure;管理员 cookie 和配置写入的 CSRF 检查继续生效。健康检查和 API 预检保持公开。Next 开发代理仅向同源地址或明确的 loopback HTTP 后端发送访问验证凭据,不跟随重定向。
发布更新源固定为 2217173240/ARTEX,下载使用 HTTPS 和 Release 校验和。更新器仅在全局代理为空时直连;非空无效配置在网络访问、缓存读取或启动更新任务前返回脱敏错误,代理故障不切换为直连。容器镜像为 ghcr.io/2217173240/artex;Release 的 IMAGE_DIGEST 可用于固定镜像清单。源码安装脚本安全引用输入、编码连接串并限制新配置权限;已有配置保持原样,手动编辑时仍需正确引用 .env 值和编码 DSN。
运行时采集使用专用传输,默认验证目标及代理的 TLS;配置代理时,浏览器的回环目标和 Node 转发也通过该代理,失败不回退直连。浏览器采集不支持需要认证的代理,启动前拒绝携带凭据的代理 URL,不将代理凭据用于目标认证。授权的自签名目标可在采集配置中显式设置 insecureTLS: true,只对本次独立采集进程生效。enrich.ProbeSite 的证书跳过属于自签名目标/录制代理的探测能力,所发请求不携带配置密钥。审阅 CodeQL 时保留这些功能边界;确认的误报应逐条记录校验位置和理由。
Worker 与 planner 将观察数据编码为 <untrusted-data> 并在系统提示中声明其不是指令;这是提示边界,不能保证完全防止提示注入。目标响应、工具输出及报告中的指令不增加操作权限。启用模型兜底审批时,缺失或新建配置默认在审批模型失败后拒绝执行;已有用户显式配置的失败动作继续保留。