请遵守 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 创建的服务。
统一错误写入器对意外的 HTTP 5xx 返回通用提示,保留状态码和 error 字段;应用明确编写的可用性、恢复操作和部分完成提示通过单独入口返回,该入口不接收底层错误或外部响应正文。模型代理 URL 校验错误使用固定说明,不回显完整提交值。该边界覆盖这些错误响应,不是对全部 4xx、成功诊断数据、SSE、日志或 panic 的通用脱敏;没有自动把被隐藏的原始错误写入日志。参考 OWASP 错误处理指引。
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 的最小权限与服务端授权建议。
可执行工具(Bash、后台命令、Monitor、交互 shell、自定义 command/Python)及 stdio MCP 默认不传递宿主 ARTEX_PG_DSN、ANTHROPIC_API_KEY、OPENAI_API_KEY、ARTEX_LLM_BASE_URL、ARTEX_LLM_PROXY 的秘密值。工具环境覆盖在默认屏蔽之后应用;操作员明确配置同名值时仍传递,stdio MCP 继续要求批准对应配置版本。HTTP/SSE MCP 的配置环境字段表示请求头,保持其认证语义。父进程保留配置与动态超时读取;PATH、HOME、会话代理和证书继续可用。此策略减少隐式继承,不隐藏变量名称,也不覆盖未知环境秘密、固定用途 ripgrep/npm、启动器向后端传递配置或同账户文件访问。秘密应只提供给需要它的组件,参考 OWASP 秘密管理指引。
浏览器会话使用服务端签发的 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。
便携更新的压缩 ZIP 上限为 128 MiB,声明的正数资产长度同时构成读取上限;解压二进制另有 512 MiB 上限。发布检查同步限制 ZIP 预算。下载和解压使用可执行文件同目录的独占随机暂存文件;摘要与启动标记以 0600 临时文件完整写入、同步并关闭后替换。smoke 子进程只接收所需路径、用户目录、临时目录及 smoke 标记。已有待应用二进制时需先重启完成更新,再发起下一次更新。安装目录应仅允许可信账户写入;这项文件处理不提供多进程共享目录事务、完整断电持久性或进程隔离。Release 校验和用于完整性核对,其信任依赖同一发布渠道。
运行时采集使用专用传输,默认验证目标及代理的 TLS;配置代理时,浏览器的回环目标和 Node 转发也通过该代理,失败不回退直连。浏览器采集不支持需要认证的代理,启动前拒绝携带凭据的代理 URL,不将代理凭据用于目标认证。授权的自签名目标可在采集配置中显式设置 insecureTLS: true,只对本次独立采集进程生效。enrich.ProbeSite 的证书跳过属于自签名目标/录制代理的探测能力,所发请求不携带配置密钥。审阅 CodeQL 时保留这些功能边界;确认的误报应逐条记录校验位置和理由。
Worker 与 planner 将观察数据编码为 <untrusted-data> 并在系统提示中声明其不是指令;这是提示边界,不能保证完全防止提示注入。目标响应、工具输出及报告中的指令不增加操作权限。启用模型兜底审批时,缺失或新建配置默认在审批模型失败后拒绝执行;已有用户显式配置的失败动作继续保留。