已开启
fix: sftp path control - lsetstat bypass #438
u011145029创建于 7月8日
fix: sftp path control - lsetstat bypass #438
已开启
u011145029创建于 7月8日
u011145029
u011145029
7月8日

当前PR是否有AI参与:

[ ] 否

[x] Yes
__1. AI Agent 平台: trae
__2. AI 模型 : glm 5.2
__3. Prompt 上下文 : 已知欧拉openssh 9.6版本上的补丁及打补丁后的C文件,分析此补丁是否引入了漏洞。文件:feature-openssh-7.4-hima-sftpserver-oom-and-fix.patch sftp-server.c

参考:openEuler社区《生成式AI工具使用与开源贡献政策》

PR功能描述 / 为什么需要这个合入**:

欧拉为 OpenSSH 8.0之后 的 sftp-server 打入补丁 feature-openssh-7.4-hima-sftpserver-oom-and-fix.patch,该补丁通过 path_permition_check() 函数实现 SFTP 路径访问控制:读取配置文件 /usr/local/etc/sftppermit.config等获取 permit/deny 路径列表,对每个 SFTP 操作的目标路径调用 realpath() 解析后做前缀匹配,若路径不在 permit 列表内或在 deny 列表内则拒绝操作。
补丁对以下写操作均插入了 path_permition_check() 检查(共 24 处调用点):process_setstat、process_fsetstat、process_remove、process_mkdir、process_rmdir、process_rename、process_posix_rename、process_symlink、process_extended_hardlink、process_extended_fsync、process_extended_fstatvfs、process_readlink、process_stat、process_lstat、process_open、process_opendir、process_realpath 等。
但 process_extended_lsetstat()(处理 lsetstat@openssh.com 扩展请求)遗漏了该检查。该函数直接对用户传入的 name 参数执行 fchmodat()、utimensat()、fchownat(),无任何路径授权校验。
lsetstat 是 OpenSSH 8.0 引入的 SFTP 扩展(2019-01-17 由 Damien Miller 提交),其语义类似 setstat 但通过 *at() 系列系统调用配合 AT_SYMLINK_NOFOLLOW 标志操作符号链接本身。补丁编写时(基于 OpenSSH 7.4)该扩展尚不存在,补丁移植到 8.0 后未覆盖此新增函数,导致检查缺失。对比:process_extended_fsync(同属 extended 处理函数)正确插入了检查,而 process_extended_lsetstat 结构相似却遗漏,补丁覆盖不全。

该PR关联的issue

(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #191

希望检视人员了解:

  1. 代码由AI辅助编写,人工核对后进行了调整,校验了功能正确性,确保与预期一致;
likedislike
合并受阻
u011145029u011145029
7月8日 创建了 pull request,commit ecf01ae5
u011145029u011145029
7月8日 关联了issue:SFTP permit 目录使能后,lsetstat 扩展请求路径授权检查缺失,导致越权修改任意文件属性
openeuler-ci-botopeneuler-ci-bot成员
7月8日 将MrRlu,sunsuwan,Apricity_HW,robert-xingwang设为审查人
openeuler-ci-botopeneuler-ci-bot成员
7月8日 添加了label:sig/Networking
openeuler-ci-bot
openeuler-ci-bot成员
7月8日 评论:

Welcome To openEuler Community

Hey @u011145029 , 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.

Contact Guide

If you have any questions, please contact the SIG: Networking ,
and any of the maintainers: @Apricity_HW, @MrRlu, @robert-xingwang, @sunsuwan ,
and any of the committers: @jiangheng12138, @zhongxuan2 .

likedislike
此处折叠了49条消息 查看更多
openeuler-ci-bot
openeuler-ci-bot成员
7月23日 评论:

如下为接口变更检查结果,目标分支为master,请PR提交者check差异信息

Arch Name Check Items Rpm Name Check Result Build Details
compare_package(x86_64) add_rpms SUCCESS #149
delete_rpms SUCCESS
rpm_abi SUCCESS
rpm_cmd SUCCESS
rpm_files SUCCESS
rpm_lib SUCCESS
rpm_provides SUCCESS
rpm_requires SUCCESS
rpm_service SUCCESS
rpm_symbol SUCCESS
compare_package(aarch64) add_rpms SUCCESS #150
delete_rpms SUCCESS
rpm_abi SUCCESS
rpm_cmd SUCCESS
rpm_files SUCCESS
rpm_lib SUCCESS
rpm_provides SUCCESS
rpm_requires SUCCESS
rpm_service SUCCESS
rpm_symbol SUCCESS
likedislike
openeuler-ci-bot
openeuler-ci-bot成员
7月23日 评论:
likedislike
u011145029
u011145029
28 天前 评论:

@zhongxuan2 已调整补丁头的commitmsg

likedislike
robertxw
robertxw成员
9 天前 评论:

合入冲突,请解决一下 @u011145029

likedislike
zhongxuan2成员
4 天前 评论:

请解一下合入冲突 @u011145029

likedislike