本页译自英文文档。命令、标识符和示例保持原样。运行时 7.24.4 · SDK 2.6.7。 英文原文
安全策略
受支持的版本
只有最新的次版本线会收到安全补丁。在针对较旧版本线报告漏洞之前,请先升级到当前 次版本。
| 版本 | 是否受支持 |
|---|---|
| 7.24.x | 是 |
| < 7.24 | 否 |
报告漏洞
我们认真对待安全。如果你发现漏洞,请负责任地报告:
- 私下联系:使用 AutomatosX 联系渠道 请求一条保密的安全报告途径。不要在公开社区消息中包含利用细节或凭据。
- Discord:在我们的 Discord 中报告:https://discord.gg/gf9UyPxaN2
我们会在 6 个工作日 内确认你的报告,并让你了解修复进展。
注意: 我们不接受 AI 生成的安全报告。提交此类报告将导致被项目封禁。请确保你的报告包含具体的复现步骤,并证明真实影响。
威胁模型
概述
ax-code 是运行在你本机上的 AI 编程助手。它提供一个代理系统,可以访问包括 shell 执行、文件操作和网页访问在内的强力工具。
运行时隔离默认是 full-access(沙盒关闭),文件系统写入和网络访问不受限制。这是面向受信任本地项目的便利姿态,不是安全边界。在把 AX Code 用于不受信任的仓库或无人值守工作负载之前,请选择 workspace-write 或 read-only。
执行隔离沙盒
ax-code 包含内置的执行隔离沙盒,限制 AI 代理可以访问什么。有三种模式:
| 模式 | 行为 |
|---|---|
| 完全访问(默认) | 完全禁用隔离,并启用网络访问 |
| 工作区写入 | 只允许在工作区内写入;.git 和 .ax-code 始终受保护;网络默认禁用 |
| 只读 | 阻止所有文件变更和 shell 命令 |
关键属性:
- 默认行为 — AX Code 以
full-access启动,除非--sandbox、AX_CODE_ISOLATION_MODE或配置设置了不同模式 - 推荐的受限模式 — 对不受信任或团队仓库使用
workspace-write;它把写入限制在工作区内,并默认禁用网络 - 工具级强制 — 所有变更工具(bash、edit、write、apply_patch)和网络工具(webfetch、websearch、codesearch)都会在执行前检查隔离策略
- 受保护路径 —
.git和.ax-code目录始终受到写保护,即使在工作区写入模式下也是如此 - 升级提示 — 在受限模式下,隔离违规会显示批准对话框,而不是静默失败;用户可以允许一次被阻止的操作,而不更改配置
- CLI 控制 —
--sandbox read-only、--sandbox workspace-write、--sandbox full-access - 环境变量 —
AX_CODE_ISOLATION_MODE
隔离后端
| 后端 | 行为 |
|---|---|
| app(默认) | 对每个工具做可移植的应用层检查 |
| os | 应用检查 加上 用于 bash 的内核沙盒(macOS 通过 sandbox-exec 使用 Seatbelt,安装了 bwrap 时 Linux 使用 bubblewrap)。若缺少操作系统工具则失败即关闭 |
| auto | 可用时优先使用操作系统 bash 包装;否则回退到仅应用层 |
{
"isolation": {
"mode": "workspace-write",
"network": false,
"backend": "auto"
}
}
或者设置 AX_CODE_ISOLATION_BACKEND=os|auto|app。
用于 bash 的操作系统隔离会拒绝工作区根之外的写入,并在 network: false 时拒绝网络。应用层检查仍然始终运行。在没有 Seatbelt/bubblewrap 的平台上,使用 backend: "app" 或容器/虚拟机。
服务器安全
- 默认仅本地主机 — 服务器绑定到
127.0.0.1,无法从网络访问 - 网络访问需要密码 — 绑定到
0.0.0.0或任何非本地主机地址都要求设置AX_CODE_SERVER_PASSWORD;没有它,服务器拒绝启动 - 强制基本身份验证 — 设置了
AX_CODE_SERVER_PASSWORD时,所有 API 端点都要求 HTTP Basic Auth - CORS 可配置 — 可以通过
--cors指定额外允许的来源
凭据存储
提供商 API 密钥使用带 PBKDF2 密钥派生的 AES-256-GCM 在静态时加密,并存放在本地 AX Code 数据目录(~/.local/share/ax-code/)中,文件权限仅限用户(0600)。
加密密钥派生自本地机器属性(主机名、平台、架构)。这可以防止随意的离线泄露(例如意外的文件分享),但 不能 防止能够访问主机的坚定攻击者。它不等同于操作系统钥匙串或硬件支持的机密存储。
MCP OAuth 令牌、客户端机密,以及账户访问/刷新令牌也使用同一机制在静态时加密。非敏感元数据(服务器 URL、到期时间戳、电子邮件、账户 ID)仍为明文。
发布产物验证
Bash 安装器(install)和 Windows PowerShell 安装器(install.ps1)都会在解压之前用 Minisign 验证已下载的 GitHub 发行归档。发行归档和 PowerShell 安装器脚本本身都带有分离签名。钉住的 AX Code 发布公钥是:
RWSlDu++afxCz01OqhYWhfo8+L8pVbSYXJBEb2zoWBuK0WACIzbGVZRO
每个安装器都会为所选归档下载匹配的 .minisig 资产,并在验证失败时失败即关闭。如果 minisign 尚不在 PATH 上,安装器会从 https://download.ax-code.com/vendor/minisign/0.12/ 下载钉住的官方 minisign 0.12 归档,检查归档 SHA-256,并在缓存之前再次检查解压出的可执行文件。已经在 PATH 上的 minisign 二进制是操作者的工具,不会被重新哈希。只有当你有意接受无法验证的发布下载时,才设置 AX_CODE_SKIP_MINISIGN_VERIFY=1。
便利的一行命令 irm …/install.ps1 | iex 不会在执行之前验证安装器脚本。对于安全敏感的安装,请下载 install.ps1 和 install.ps1.minisig,用 Minisign 验证脚本,然后在本地运行它(见 安装与运行时渠道)。
维护者应保持 Minisign 私钥加密。在 macOS 上做本地发布签名时,把口令存在钥匙串中,而不是明文文件:
security add-generic-password -U -a ax-release -s ax-minisign -w
当未设置 AX_CODE_MINISIGN_PASSWORD 时,发布工具会自动读取该钥匙串项。
由标签驱动的 GitHub 发布工作流会在上传之前签名归档。它需要 这些仓库机密:
AX_CODE_MINISIGN_SECRET_KEY_B64
AX_CODE_MINISIGN_PASSWORD
AX_CODE_MINISIGN_SECRET_KEY_B64 必须是加密的 ax.minisign.key Minisign 私钥内容的 base64 编码(本地路径可以是指向
ax.sec 的符号链接)。工作流把它写到一个
临时的 0600 密钥文件,验证钉住的公钥,签名每个发行
归档,并与归档一起上传匹配的 .minisig 资产。
对于 macOS CLI 归档,工作流需要并导入 Apple Developer ID 证书,使用这些仓库机密:
APPLE_CERTIFICATE
APPLE_CERTIFICATE_PASSWORD
APPLE_TEAM_ID
APPLE_API_KEY_B64
APPLE_API_KEY_ID
APPLE_API_ISSUER
在该路径上,捆绑的原生库用导入的 Developer
ID Application 身份签名,macOS ZIP 被提交到 Apple 的公证服务,
然后未更改的 ZIP 再由分离的 Minisign 签名保护。ZIP
归档不能装订,因此公证必须发生在产物上传之前,
以及 .minisig 生成之前。当任何 Apple
签名或公证凭据缺失时,发行构建失败即关闭。
发布签名密钥历史
| 生效日期 | 密钥 ID | 公钥 | 状态 |
|---|---|---|---|
| 2026-07-19 | CF42FC69BEEF0EA5 |
RWSlDu++afxCz01OqhYWhfo8+L8pVbSYXJBEb2zoWBuK0WACIzbGVZRO |
当前 |
| 2026-07-19 | 2D5140E0904E48B3 |
RWSzSE6Q4EBRLeUmabk1YM6bzP/wn54tXE09il3d2srulrCfaB4Uyt1n |
已轮换出局 |
| 2026-06-16 | 5B7AB63CD6D674BE |
RWS+dNbWPLZ6W9TH486c9zdH84NiiuFnm4VpVTRlXoMHClyQx/fY7W2A |
已轮换出局 |
| 2026-06-16 之前 | 8138FAD32CAD95BA |
RWS6la0s0/o4gdFUZ0Bk/BkrnN8qC2CFOfLXVP5OtQTrvm1BQeOvXgao |
已轮换出局 |
发布签名密钥最近一次轮换是在 2026-07-19。安装器
和发布工作流只钉住当前密钥,因此用已退役
密钥签名的归档会无法通过签名验证。轮换之后,维护者必须用 script/resign-release-assets.ts 重新签名
历史发行归档,以便每个
已发布的版本都能对照钉住的密钥验证,而不信任已退役的密钥。
要用当前密钥重新签名并重新上传现有发布的 .minisig 资产:
tsx script/resign-release-assets.ts --tag v5.5.0 --key-dir ~/signkey
范围
范围内
| 类别 | 示例 |
|---|---|
| 沙盒绕过 | 在允许边界之外执行命令或写入文件 |
| 身份验证绕过 | 在服务器模式下绕过 AX_CODE_SERVER_PASSWORD |
| 密钥外泄 | 在没有本地机器访问的情况下提取已存储的 API 密钥 |
| 路径遍历 | 工具在预期工作目录之外读取/写入 |
| 命令注入 | 精心构造的输入绕过隔离执行任意命令 |
| 依赖漏洞 | 捆绑依赖中有可行攻击路径的已知 CVE |
范围外
| 类别 | 理由 |
|---|---|
| LLM 提供商的数据处理 | 发送给你所配置提供商的数据由其策略管辖 |
| MCP 服务器行为 | 你配置的外部 MCP 服务器在我们的信任边界之外 |
| 恶意配置文件 | 用户控制自己的配置;修改它需要本地访问 |
| 社会工程 | 通过不受信任仓库的提示注入是已知的 LLM 代理局限 |
| 操作系统级沙盒逃逸 | 隔离沙盒在应用层运行,而不是操作系统进程层 |
企业安全能力
AX Code 面向企业使用设计,具有以下加固特性:
- 细粒度权限:代理专属和基于模式的规则集(
allow/deny/ask)。安全代理默认为只读。规则在项目、代理和已批准列表之间评估。 - 会话审计轨迹:每一次工具调用、权限决定和文件变更都连同快照记录在 SQLite 中。支持重放、分叉和导出,用于合规审阅。
- 确定性重构(DRE):
impact_analyze、refactor_plan和refactor_apply(影子工作树 + 代码检查/类型检查/测试)提供可审计、可逆的变更。 - 凭据管理:所有密钥/令牌都使用 AES-256-GCM 加密。通过
InstanceState按目录隔离。 - 选择加入的沙盒强制:应用级隔离,并解析 bash 命令(tree-sitter)。选择
workspace-write或read-only来强制沙盒边界;受保护路径(.git、.ax-code)适用于沙盒模式。 - 服务器加固:默认仅本地主机;带 Basic Auth 的密码保护远程访问。
- 代码智能与扫描:内置机密/硬编码检测,以及依赖影响分析。
CodeQL 辅助的编码反馈
仓库把 CodeQL 作为拉取请求、推送到 dev、计划扫描和手动分发的后台安全分析层来运行。CodeQL 不是
实时 LSP 或代码智能路径的一部分;它是更慢、更深的证据
来源,用于数据流、污点和安全质量发现,这些发现更适合
在源变更稳定之后处理。
当前工作流分析:
- JavaScript 和 TypeScript 运行时、TUI、SDK、集成和脚本代码。
- GitHub Actions 工作流和本地复合操作。
crates/下的 Rust crate,并使用手动 Cargo 构建,以便原生插件和 TUI 代码被一致地提取。
预期的开发者体验是:
- PR 作者在 GitHub 代码扫描中获得 CodeQL 警报,与现有的 类型检查、确定性测试、OSV 依赖扫描和仓库结构 防护并列。
- 维护者在把 CodeQL 当作硬性合并 门禁之前,先分拣初始结果,以便新发现有用而不是嘈杂。
- 未来的 AX Code 审阅/调试流程可以把 CodeQL SARIF 或 GitHub 代码
扫描警报当作显式的安全证据来摄入,并带有出处字段,例如
source: "codeql"、规则 id、严重性、文件、行、数据流跟踪,以及 被分析的提交 SHA。 - CodeQL 证据应当显示在本地
security_scan、hardcode_scan、LSP 诊断和基于图的影响分析旁边,而不是作为 对其中任何一项的隐藏替代。
添加自定义 CodeQL 查询时,优先选择仓库专属的安全 边界,而不是宽泛的代码风格检查。高价值目标包括沙盒 逃逸路径、带未净化参数的命令执行、围绕工作区包含的路径遍历、 向子进程传播机密/环境变量, 以及缺失的服务器路由验证。
完整的企业治理(RBAC、策略即代码、SIEM 导出、加密审计)请与 AX Trust 集成(路线图项目)。
隔离配置和运行时行为见 docs/guides/sandbox.md。