已关闭
[Bug-Report|缺陷反馈]: 【2026 HCCL通信库创新大赛-西部赛区】【哈基米南北路陡】fix: oat_check.sh 避免通过 eval 执行 _OAT_CMD #374
Zack3777创建于  7月7日关闭于  7月15日
Zack3777
Zack3777
7月7日 创建

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

Describe the current behavior / 问题描述 (Mandatory / 必填)

scripts/oat_check.sh 在运行 OAT 扫描时,会先将 Python 命令、仓库路径、报告目录、仓库名、待扫描文件列表等参数拼接成 _OAT_CMD 字符串,然后通过 eval "$_OAT_CMD" 执行。

该实现存在两个问题:

①当仓库路径、报告目录或 staged 文件名包含空格、引号等 shell 特殊字符时,命令会被 shell 重新拆词,导致 OAT 扫描参数解析异常。

②staged 文件名属于用户可控输入,拼接后再通过 eval 执行存在命令注入风险,不符合脚本中对路径和文件名参数的安全处理预期。

Environment / 环境信息 (Mandatory / 必填)

项目:cann/hcomm
分支:master
文件:scripts/oat_check.sh
脚本类型:Shell 脚本,OAT pre-commit 检查脚本
运行环境:Linux / macOS / Windows Git Bash / MSYS2
Python 版本:Python 3.7+
依赖:oat-py >= 1.0.1

硬件环境:该问题与昇腾硬件型号无关,不依赖具体 NPU/服务器型号;属于本地提交前检查脚本的参数执行方式问题。

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

查看 scripts/oat_check.sh 可发现脚本先将 OAT 扫描命令拼接到 _OAT_CMD 字符串中,例如包含 PYTHONREPOROOTOATREPORTDIRREPONAMEFILELIST等参数,随后通过eval"_PYTHON、REPO_ROOT、OAT_REPORT_DIR、REPO_NAME、FILE_LIST 等参数,随后通过 eval "_OAT_CMD" 执行;当仓库路径、报告目录或待扫描文件路径中包含空格、引号等特殊字符时,eval 会触发 shell 二次解析,导致参数被重新拆分,进而造成 OAT 扫描参数异常,同时也引入了不必要的命令注入风险。

Describe the expected behavior / 预期结果 (Mandatory / 必填)

scripts/oat_check.sh 应避免使用 eval 执行拼接后的命令字符串,而应直接通过 "$_PYTHON" -m oat 的方式调用 OAT,并将 REPO_ROOT、OAT_REPORT_DIR、REPO_NAME、FILE_LIST、OAT.xml 等作为独立参数传入;这样可以避免 shell 对参数进行二次解析,提升脚本在特殊路径场景下的稳定性,同时降低由字符串拼接执行带来的安全风险,并保持原有 OAT 扫描逻辑和返回码处理逻辑不变。

当前 scripts/oat_check.sh 中存在类似逻辑:先构造 _OAT_CMD="$_PYTHON -m oat -mode s -s $REPO_ROOT -r $OAT_REPORT_DIR -n $REPO_NAME -w 1 -f FILELIST",如果存在OAT.xml再继续拼接oatconfig参数,最后通过eval"FILE_LIST",如果存在 OAT.xml 再继续拼接 -oatconfig 参数,最后通过 eval "_OAT_CMD" >/dev/null 2>&1 执行;该写法会让路径和文件列表在执行阶段被 shell 重新解析,建议改为直接传递独立参数执行,避免 eval。

Special notes for this issue/备注 (Optional / 选填)

该 Issue 聚焦于 scripts/oat_check.sh 中 _OAT_CMD 拼接后通过 eval 执行的问题;已注意到仓库中存在其他脚本按参数列表方式执行的相近安全性修复,但不涉及 scripts/oat_check.sh,当前该文件仍存在 eval 执行拼接命令的问题,因此本 Issue 可通过 PR 单独修复,不与已有修复重复。

likedislike
LLeewis成员
7月7日 关联了看板:HCCL
Leewis成员
7月7日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
7月7日 将 yanzhenghang 设为负责人
CANN-robotCANN-robot成员
7月8日 将 Leewis 设为负责人,移除负责人 yanzhenghang
LLeewis成员
7月8日 移除了负责人 Leewis
Leewis成员
7月8日 评论:

@gcw_FGkWvFeA 同学你好,感谢反馈,issue所提问题已明确,该问题将由相关开发同事解决闭环,该issues对应积分将正常记录,欢迎提交其余issue;

likedislike
LLeewis成员
7月8日 添加了label:Accepted
Zzhangfands
7月14日 关联了pull request:【fix】 修复pre-commit的oat在执行cmd时有空格目录或文件名的问题
CANN-robotCANN-robot成员
7月15日 关闭了 issue
CANN-robotCANN-robot成员
7月15日 添加了label:resolved
LLeewis成员
12 天前 移除了看板:HCCL