修复代码漏洞并管理差异

CodeMender 可以自动生成、验证和应用源代码补丁来修复已验证的漏洞,并在本地沙盒中进行测试,以防出现回归问题。

生成漏洞修复

使用 cm fix 为经过验证的发现结果生成经过验证的安全补丁:

cm fix FINDING_ID

运行 cm fix 时,CodeMender 会执行以下验证步骤:

  1. 使用云托管的推理引擎生成候选补丁。
  2. 将补丁应用到本地沙盒中的源代码副本。
  3. 通过运行您配置的 build.command 来编译和测试代码库,以确保项目构建和单元测试通过。
  4. 重新运行经过验证的 PoC 漏洞利用,以确认漏洞不再可被利用。

默认情况下,CodeMender 会提示您确认每项文件修改,然后再将其写入工作区中的磁盘。所有检查都通过后,CodeMender 会将经过验证的补丁应用到您的工作区。然后,您可以暂存更改。

修正标记

  • 提供修复上下文(-c/--context):提供架构限制或编码准则:
    cm fix FINDING_ID -c "Use the safe parameterized database helper in src/db/query.go"
  • 自动批准提示 (-y / --yes):在修复过程中自动批准所有文件写入和命令确认提示:
    cm fix FINDING_ID -y
    注意:您还可以通过设置 tools.confirm_writes: false 和 tools.confirm_commands: false,在 config.yaml 中停用交互式确认提示。
  • 控制沙盒 (--sandbox):明确启用或停用此运行的操作系统级沙盒(例如,--sandbox=false 表示停用):
    cm fix FINDING_ID --sandbox=false
  • 绕过路径边界 (--allow-all-paths):为此运行停用工作区路径边界检查,以便智能体工具可以访问项目根目录和配置的 project_paths 之外的路径(与 --sandbox=false 结合使用可访问未装载到沙盒中的主机路径):
    cm fix FINDING_ID --allow-all-paths
  • 绕过命令政策 (--allow-all-commands):针对此运行,停用 command_policy.yaml 屏蔽名单强制执行:
    cm fix FINDING_ID --allow-all-commands
  • 绕过缓存 (--no-cache):强制 CodeMender 生成新的补丁:
    cm fix FINDING_ID --no-cache

检查和管理本地 VCS 差异

CodeMender 包含内置 VCS 命令,可帮助您在提交补丁之前检查、暂存和管理补丁引入的代码更改:

  • 查看代码库状态:查看 CodeMender 在本地工作区中修改或创建了哪些文件。

    cm vcs status

  • 检查差异:逐行查看代理生成的所有未提交代码修改的统一差异。

    cm vcs diff

  • 暂存更改:将经过验证的补丁修改添加到本地暂存环境,以便进行测试和提交。

    cm vcs stage

  • 还原会话修改:舍弃 CodeMender 在当前会话期间生成的所有本地文件修改,并将代码库恢复到基准状态。

    cm vcs reset