# Codex review 教程：只读审查本地下载接口的路径穿越风险

## 身份和范围

本站原创 fixture 与人工参考；实际运行：假数据路径正反例与只读源码 SHA。目标代理模型、账号会话、付费 API、第三方 PR、推送和发布均未执行。公开包不含 .env；需要时仅在自己的临时练习目录从文本模板创建。

## 本地命令

```sh
python3 verify.py
```

## 七步原生操作

### 1. 把审查对象放进假数据练习仓库

只读 route.py 与 sandbox，canary.txt 写的是 FICTIONAL_CANARY，不包含任何真实敏感内容。需要原生 diff 审查时，在解压目录单独 git init 并提交初始文件，再产生待审变更，不能在真正业务仓库造漏洞。

### 2. 选择本地 review 的准确范围

在 Codex /review 或本地 code review 选择未提交变更或明确基线；CLI 用户先看 codex review --help。请求只检查解码后的路径是否仍在 downloads 根目录，并要求行号、触发输入和不确定项。

### 3. 读路径解码到文件读取的完整链

定位 broken 的 unquote(name)、路径拼接和 read_text，确认相对路径 ../canary.txt 与编码形式能跨出下载目录。不要把“用了 Path”当成已有 containment check。

### 4. 保持 review 只读并审 findings

让 Codex 形成发现，不自动编辑或发远端评论。核对 finding 的 file/line/cause 是否指向真正读文件处；模型优先级是审查建议，实际严重程度还取决于权限和部署边界。

### 5. 只对虚构 fixture 复现两个输入

运行 python3 verify.py，broken 会读到自己创建的假 canary，fixed 会对两种输入抛 PermissionError。没有请求外部站点或读取宿主机秘密；正常 manual.txt 仍应可读。

### 6. 核对解析后根目录约束

fixed 用 resolve 后的 is_relative_to 校验，拒绝逃出根的路径，再检查 is_file。结果里保存 route.py 前后 SHA，证明审计检查没有修改源文件；参考补丁与实际 Codex finding 身份不同。

### 7. 交付有定位和证据的审查清单

把源码片段、两个输入、正常文件正例和未处理的部署假设放入审查报告。实际项目的符号链接、权限和并发状态需要另行评估，本题不能据此宣称下载接口全面安全。

## 验收产物

带优先级、文件行号、触发条件与修复方向的 review 清单；允许目录、路径规范化、编码输入的人工复核表；审查前后工作区 diff 一致

## 门槛

- 需要 Git 仓库和可用 Codex 模型额度；本地 review 与 GitHub 云审查权限不同。
- 结果仍需人工核对，模型审查不构成安全保证。
- 如执行复现仅限自建 localhost fixture；本轮研究没有运行目标模型或漏洞验证。

## 官方来源

- https://learn.chatgpt.com/docs/code-review

静态配图冻结于本次输入。修改输入需重新运行并自行重渲染；不把旧截图当新结果。
