已关闭
sudo wordsplit() 处理结束引号前多个反斜杠时越界读取(回移上游修复) #92
Lei-Chen创建于  4 天前关闭于  13 小时前
Lei-Chen
4 天前 创建

问题描述

sudo 的编辑器命令行解析函数 wordsplit()(plugins/sudoers/editor.c)在处理「以引号包围、且结束引号前有偶数个反斜杠」的字符串时,会把结束引号误判为被转义的引号,导致:

  1. 编辑器命令被拆分成错误的参数。例如 SUDO_EDITOR='sh -c "vi $1\\"' 被拆成 6 个参数(期望 5 个);
  2. 恢复解析引号内字符串时可能越过字符串末尾读取 1 字节(out-of-bounds read,CWE-125)。

编辑器字符串来自用户可控的 SUDO_EDITOR / VISUAL / EDITOR 环境变量(openEuler 构建启用了 --with-env-editor),由 setuid root 的 sudo 在运行 sudoedit 之前解析,属于特权进程中的内存安全问题。

上游已通过 commit b205d6a6b337f20c04d78634a973e143af751a86("wordsplit: Fix handling of multiple backslashes before end quote")修复,由 Marius Momeu 报告。该提交及上游公告未标注 CVE 编号。

影响范围

受影响分支(打包版本均早于该修复):

  • openEuler-24.03-LTS-SP3(sudo 1.9.15p5)
  • openEuler-26.09(sudo 1.9.17p2)
  • master(sudo 1.9.17p2)

同一 24.03 大版本的 openEuler-24.03-LTS / -SP1 / -SP2 / -SP4 / -Next 在应用各自现有补丁链后,plugins/sudoers/editor.c 的 blob 与脆弱版本一致(0c4221bc4309c58890b8bd72e9dc6aaa500ae17e),同样受影响;将按社区流程在代表 PR 上使用 /sync 同步,不逐个分支重复提 PR。

复现

用上游新增的回归用例(plugins/sudoers/regress/editor/check_editor.c):

SUDO_EDITOR=sh -c "vi \$1\\"

基线(不含本修复)结果:check_editor: test 7: edit_argc: expected 5, got 6(19 tests, 1 error)。
打补丁后:check_editor: 20 tests run, 0 errors, 100% success rate。

修复

验证

  • 三个目标分支「完整补丁链 + 新补丁」用 patch -p1 -F0 逐条应用,全部干净通过(零 fuzz);
  • 1.9.17p2(master 补丁链)与 1.9.15p5(SP3 补丁链)均完成 autotools 构建(ASan 编译),make check 全部通过:1.9.17p2 的 sudoers 174、testsudoers 62、visudo 20、cvtsudoers 82、check_editor 20 等均为 0 errors;
  • 失败/通过对比:基线 check_editor 失败(argc 6 vs 5),打补丁后 20/20 通过。

openEuler 侧进展

已推送分支并提交 PR(见本 issue 评论 / 关联 PR)。

是否 CVE

否。上游未为该提交分配 CVE 编号,本 issue 按普通缺陷(安全加固)跟踪,未使用 CVE 标签。

二、缺陷分析结构反馈
影响性分析说明:

缺陷严重等级:(Critical/High/Moderate/Low)

缺陷根因说明:

受影响版本排查(受影响/不受影响):
openEuler-20.03-LTS-SP4
openEuler-22.03-LTS-SP4
openEuler-24.03-LTS-SP1
openEuler-24.03-LTS-SP3
openEuler-24.03-LTS-SP4

修复是否涉及abi变化(是/否):
openEuler-20.03-LTS-SP4
openEuler-22.03-LTS-SP4
openEuler-24.03-LTS-SP1
openEuler-24.03-LTS-SP3
openEuler-24.03-LTS-SP4

likedislike
LLei-Chen
4 天前 issue类型由 任务 改变为 缺陷
openeuler-ci-botopeneuler-ci-bot成员
4 天前 将 houmingyong 设为负责人
openeuler-ci-botopeneuler-ci-bot成员
4 天前 将 licihua、dillon_chen、overweight、zhujianwei001、xujing99、hello-leichen、shenyangyang 设为负责人
openeuler-ci-botopeneuler-ci-bot成员
4 天前 修改了issue 的描述
openeuler-ci-botopeneuler-ci-bot成员
4 天前 移除了负责人 licihua、dillon_chen、overweight、zhujianwei001、xujing99、hello-leichen、shenyangyang
openeuler-ci-botopeneuler-ci-bot成员
4 天前 添加了label:sig/Base-service
openeuler-ci-bot
openeuler-ci-bot成员
4 天前 评论:

Welcome To openEuler Community

Hey @hello-leichen , thanks for your contribution to the community.

Bot Usage Manual

I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands. You can self-configure the PR merge rules for this repository. For more details, please refer to Here.

Contact Guide

If you have any questions, please contact the SIG: Base-service ,
and any of the maintainers: @dillon_chen, @licihua, @overweight, @shenyangyang, @xujing99, @zhujianwei001 ,
and any of the committers: @houmingyong, @jiayi0118, @qq_28851361 .

likedislike
openeuler-ci-bot
openeuler-ci-bot成员
4 天前 评论:

以下的要求不是强制性的, 未按模板评论时对issue无任何影响
issue处理注意事项:
1. 当前issue受影响的分支提交pr时, 须在pr描述中填写当前issue编号进行关联, 否则无法关闭当前issue;
2. 模板内容需要填写完整, 无论是受影响或者不受影响都需要填写完整内容,未引入的分支不需要填写, 否则无法关闭当前issue;
3. 以下为模板中需要填写完整的内容, 请复制到评论区回复, 注: 内容的标题名称(影响性分析说明, 缺陷严重等级, 受影响版本排查(受影响/不受影响), 修复是否涉及abi变化(是/否))不能省略,省略后defect-manager将无法正常解析填写内容.
评论区可能使用到的指令说明:

指令 指令说明 使用权限
/check-issue 触发defect-manager校验 不限
/reason xxx /reason +挂起或取消条件 不限

影响性分析说明:

缺陷严重等级:(Critical/High/Moderate/Low)

缺陷根因说明:

受影响版本排查(受影响/不受影响):

  1. openEuler-20.03-LTS-SP4:
  2. openEuler-22.03-LTS-SP4:
  3. openEuler-24.03-LTS-SP1:
  4. openEuler-24.03-LTS-SP3:
  5. openEuler-24.03-LTS-SP4:

abi变化(是/否):

  1. openEuler-20.03-LTS-SP4:
  2. openEuler-22.03-LTS-SP4:
  3. openEuler-24.03-LTS-SP1:
  4. openEuler-24.03-LTS-SP3:
  5. openEuler-24.03-LTS-SP4:

缺陷issue处理具体操作请参考:
https://atomgit.com/openeuler/cve-manager/blob/master/cve-vulner-manager/doc/md/defect-manager-manual.md
pr关联issue具体操作请参考:
https://docs.atomgit.com/docs/help/home/org_project/pullrequests/pr-related-issue

likedislike
openeuler-ci-botopeneuler-ci-bot成员
4 天前 添加了label:DEFECT/UNFIXED
LLei-Chen
4 天前 关联了pull request:backport: fix wordsplit() handling of multiple backslashes before end quote
LLei-Chen
4 天前 关联了pull request:backport: fix wordsplit() handling of multiple backslashes before end quote
LLei-Chen
4 天前 关联了pull request:backport: fix wordsplit() handling of multiple backslashes before end quote
Lei-Chen
4 天前 评论:

已按分支提交 PR:

目标分支 版本/Release PR
master 1.9.17p2-7 https://gitcode.com/src-openeuler/sudo/merge_requests/233
openEuler-26.09 1.9.17p2-7 https://gitcode.com/src-openeuler/sudo/merge_requests/234
openEuler-24.03-LTS-SP3(24.03 代表 PR) 1.9.15p5-10 https://gitcode.com/src-openeuler/sudo/merge_requests/235

24.03 大版本其余分支已核实同样受影响,并在 #235 上执行 /sync openEuler-24.03-LTS openEuler-24.03-LTS-Next openEuler-24.03-LTS-SP1 openEuler-24.03-LTS-SP2 openEuler-24.03-LTS-SP4,由 openeuler-ci-bot 在当前 PR 合入后创建同步 PR。

验证结果:

  • 三个分支完整补丁链 + 新补丁 patch -p1 -F0 全部零 fuzz 应用;
  • 1.9.17p2(master 链)与 1.9.15p5(SP3 链)ASan 构建成功,make check 全量通过(check_editor 20/20;sudoers 174、testsudoers 62、visudo 20、cvtsudoers 82 等 0 errors);
  • 基线 check_editor 用例失败(edit_argc: expected 5, got 6),打补丁后通过;
  • 三个 PR 已通过 openeuler-cla/yes、ai-compliance-successful,CI 通过且无冲突。
likedislike
Lei-Chen
4 天前 评论:

影响性分析说明: sudo 的 wordsplit() 在解析编辑器字符串时,对结尾引号前的多个反斜杠处理不当,可能越界读取;编辑器串来自用户可控的 SUDO_EDITOR/VISUAL/EDITOR,由 setuid root 的 sudo 解析。

缺陷严重等级: Moderate

缺陷根因说明: wordsplit() 在连续反斜杠 + 结尾引号的边界条件下未正确限制读取位置,导致 out-of-bounds read(CWE-125)。

受影响版本排查(受影响/不受影响):

  1. openEuler-20.03-LTS-SP4: 受影响(本次未提交 PR,后续单独回移)
  2. openEuler-22.03-LTS-SP4: 受影响(本次未提交 PR,后续单独回移)
  3. openEuler-24.03-LTS: 受影响(由 SP3 PR /sync 同步)
  4. openEuler-24.03-LTS-Next: 受影响(由 SP3 PR /sync 同步)
  5. openEuler-24.03-LTS-SP1: 受影响(由 SP3 PR /sync 同步)
  6. openEuler-24.03-LTS-SP2: 受影响(由 SP3 PR /sync 同步)
  7. openEuler-24.03-LTS-SP3: 受影响(PR #235)
  8. openEuler-24.03-LTS-SP4: 受影响(由 SP3 PR /sync 同步)
  9. openEuler-26.09: 受影响(PR #234)
  10. master: 受影响(PR #233)

abi变化(是/否):

  1. openEuler-20.03-LTS-SP4: 否
  2. openEuler-22.03-LTS-SP4: 否
  3. openEuler-24.03-LTS: 否
  4. openEuler-24.03-LTS-Next: 否
  5. openEuler-24.03-LTS-SP1: 否
  6. openEuler-24.03-LTS-SP2: 否
  7. openEuler-24.03-LTS-SP3: 否
  8. openEuler-24.03-LTS-SP4: 否
  9. openEuler-26.09: 否
  10. master: 否
likedislike
Lei-Chen
4 天前 评论:

/check-issue

likedislike
openeuler-ci-bot
openeuler-ci-bot成员
4 天前 评论:

@houmingyong 经过defect-manager解析,已分析的内容如下表所示:

状态 需分析 内容
已分析 1.影响性分析说明 sudo的wordsplit()在解析编辑器字符串时,对结尾引号前的多个反斜杠处理不当,可能越界读取;编辑器串来自用户可控的SUDO_EDITOR/VISUAL/EDITOR,由setuidroot的sudo解析。
已分析 2.缺陷严重等级 Moderate
已分析 3.缺陷根因定位 wordsplit()在连续反斜杠+结尾引号的边界条件下未正确限制读取位置,导致out-of-boundsread(CWE-125)。
已分析 4.受影响版本排查 openEuler-20.03-LTS-SP4:受影响,openEuler-22.03-LTS-SP4:受影响,openEuler-24.03-LTS:受影响,openEuler-24.03-LTS-Next:受影响,openEuler-24.03-LTS-SP1:受影响,openEuler-24.03-LTS-SP2:受影响,openEuler-24.03-LTS-SP3:受影响,openEuler-24.03-LTS-SP4:受影响,openEuler-26.09:受影响
已分析 5.abi变化 openEuler-20.03-LTS-SP4:否,openEuler-22.03-LTS-SP4:否,openEuler-24.03-LTS:否,openEuler-24.03-LTS-Next:否,openEuler-24.03-LTS-SP1:否,openEuler-24.03-LTS-SP2:否,openEuler-24.03-LTS-SP3:否,openEuler-24.03-LTS-SP4:否,openEuler-26.09:否

请确认分析内容的准确性,确认无误后,您可以进行后续步骤,否则您可以继续分析

likedislike
openeuler-ci-botopeneuler-ci-bot成员
4 天前 关闭了 issue
openeuler-ci-botopeneuler-ci-bot成员
4 天前 issue状态由 待办的 改变为 已完成
openeuler-ci-botopeneuler-ci-bot成员
4 天前 issue状态由 已完成 改变为 待办的
openeuler-ci-botopeneuler-ci-bot成员
4 天前 重新打开了 issue
openeuler-ci-bot
openeuler-ci-bot成员
4 天前 评论:

@houmingyong
关闭issue前,需要将受影响的分支在合并pr时关联上当前issue编号: #92
受影响分支: openEuler-20.03-LTS-SP4/openEuler-22.03-LTS-SP4/openEuler-24.03-LTS-SP1/openEuler-24.03-LTS-SP4
具体操作参考: https://docs.atomgit.com/docs/help/home/org_project/pullrequests/pr-related-issue

likedislike
openeuler-ci-botopeneuler-ci-bot成员
4 天前 关联了pull request:[sync] PR-235: backport: fix wordsplit() handling of multiple backslashes before end quote
此处折叠了6条事件消息 查看更多
openeuler-ci-botopeneuler-ci-bot成员
4 天前 重新打开了 issue
openeuler-ci-bot
openeuler-ci-bot成员
4 天前 评论:

@houmingyong
关闭issue前,需要将受影响的分支在合并pr时关联上当前issue编号: #92
受影响分支: openEuler-20.03-LTS-SP4/openEuler-22.03-LTS-SP4
具体操作参考: https://docs.atomgit.com/docs/help/home/org_project/pullrequests/pr-related-issue

likedislike
Linux_zhang2024
20 小时前 评论:

openEuler-20.03-LTS-SP4: 受影响(本次未提交 PR,后续单独回移)
openEuler-22.03-LTS-SP4: 受影响(本次未提交 PR,后续单独回移)
@hello-leichen 你好 这两个分支 可有修复计划?

likedislike
Hhugel
15 小时前 关联了pull request:backport upstream wordsplit() fix for multiple backslashes
Hhoumingyong成员
13 小时前 issue状态由 待办的 改变为 已完成
Hhoumingyong成员
13 小时前 关闭了 issue
openeuler-ci-botopeneuler-ci-bot成员
13 小时前 issue状态由 已完成 改变为 待办的
openeuler-ci-botopeneuler-ci-bot成员
13 小时前 重新打开了 issue
openeuler-ci-bot
openeuler-ci-bot成员
13 小时前 评论:

@houmingyong
关闭issue前,需要将受影响的分支在合并pr时关联上当前issue编号: #92
受影响分支: openEuler-20.03-LTS-SP4/openEuler-22.03-LTS-SP4
具体操作参考: https://docs.atomgit.com/docs/help/home/org_project/pullrequests/pr-related-issue

likedislike
hugel
13 小时前 评论:

受影响版本排查(受影响/不受影响):

openEuler-20.03-LTS-SP4: 不受影响
openEuler-22.03-LTS-SP4: 不受影响(存在新增用例失败)

likedislike
hugel
13 小时前 评论:

/check-issue

likedislike
houmingyong成员
13 小时前 评论:

/check-issue

likedislike
Hhoumingyong成员
13 小时前 issue状态由 待办的 改变为 已完成
Hhoumingyong成员
13 小时前 关闭了 issue
openeuler-ci-botopeneuler-ci-bot成员
13 小时前 issue状态由 已完成 改变为 待办的
openeuler-ci-botopeneuler-ci-bot成员
13 小时前 重新打开了 issue
openeuler-ci-bot
openeuler-ci-bot成员
13 小时前 评论:

@houmingyong
关闭issue前,需要将受影响的分支在合并pr时关联上当前issue编号: #92
受影响分支: openEuler-20.03-LTS-SP4/openEuler-22.03-LTS-SP4
具体操作参考: https://docs.atomgit.com/docs/help/home/org_project/pullrequests/pr-related-issue

likedislike
hugel
13 小时前 评论:

影响性分析说明: sudo 的 wordsplit() 在解析编辑器字符串时,对结尾引号前的多个反斜杠处理不当,可能越界读取;编辑器串来自用户可控的 SUDO_EDITOR/VISUAL/EDITOR,由 setuid root 的 sudo 解析。

缺陷严重等级: Moderate

缺陷根因说明: wordsplit() 在连续反斜杠 + 结尾引号的边界条件下未正确限制读取位置,导致 out-of-bounds read(CWE-125)。

受影响版本排查(受影响/不受影响):

openEuler-20.03-LTS-SP4: 不受影响
openEuler-22.03-LTS-SP4: 不受影响(存在新增用例失败)
openEuler-24.03-LTS: 受影响(由 SP3 PR /sync 同步)
openEuler-24.03-LTS-Next: 受影响(由 SP3 PR /sync 同步)
openEuler-24.03-LTS-SP1: 受影响(由 SP3 PR /sync 同步)
openEuler-24.03-LTS-SP2: 受影响(由 SP3 PR /sync 同步)
openEuler-24.03-LTS-SP3: 受影响(PR #235)
openEuler-24.03-LTS-SP4: 受影响(由 SP3 PR /sync 同步)
openEuler-26.09: 受影响(PR #234)
master: 受影响(PR #233)
abi变化(是/否):

openEuler-20.03-LTS-SP4: 否
openEuler-22.03-LTS-SP4: 否
openEuler-24.03-LTS: 否
openEuler-24.03-LTS-Next: 否
openEuler-24.03-LTS-SP1: 否
openEuler-24.03-LTS-SP2: 否
openEuler-24.03-LTS-SP3: 否
openEuler-24.03-LTS-SP4: 否
openEuler-26.09: 否
master: 否

likedislike
openeuler-ci-bot
openeuler-ci-bot成员
13 小时前 评论:

@houmingyong 经过defect-manager解析,已分析的内容如下表所示:

状态 需分析 内容
已分析 1.影响性分析说明 sudo的wordsplit()在解析编辑器字符串时,对结尾引号前的多个反斜杠处理不当,可能越界读取;编辑器串来自用户可控的SUDO_EDITOR/VISUAL/EDITOR,由setuidroot的sudo解析。
已分析 2.缺陷严重等级 Moderate
已分析 3.缺陷根因定位 wordsplit()在连续反斜杠+结尾引号的边界条件下未正确限制读取位置,导致out-of-boundsread(CWE-125)。
已分析 4.受影响版本排查 openEuler-20.03-LTS-SP4:不受影响,openEuler-22.03-LTS-SP4:不受影响,openEuler-24.03-LTS:受影响,openEuler-24.03-LTS-Next:受影响,openEuler-24.03-LTS-SP1:受影响,openEuler-24.03-LTS-SP2:受影响,openEuler-24.03-LTS-SP3:受影响,openEuler-24.03-LTS-SP4:受影响,openEuler-26.09:受影响
已分析 5.abi变化 openEuler-20.03-LTS-SP4:否,openEuler-22.03-LTS-SP4:否,openEuler-24.03-LTS:否,openEuler-24.03-LTS-Next:否,openEuler-24.03-LTS-SP1:否,openEuler-24.03-LTS-SP2:否,openEuler-24.03-LTS-SP3:否,openEuler-24.03-LTS-SP4:否,openEuler-26.09:否

请确认分析内容的准确性,确认无误后,您可以进行后续步骤,否则您可以继续分析

likedislike
Hhoumingyong成员
13 小时前 issue状态由 待办的 改变为 已完成
Hhoumingyong成员
13 小时前 关闭了 issue
openeuler-ci-botopeneuler-ci-bot成员
13 小时前 添加了label:DEFECT/FIXED;删除了label:sig/Base-service,DEFECT/UNFIXED