Go ServeMux 编码斜杠路径穿越
影响授权绕过并可能造成路径穿越
线报来自社区/论坛讨论,未经官方证实,请自行甄别
AI 研判
该问题源于 Go 1.22 起 net/http.ServeMux 的双视图解析:匹配使用编码视图,交付使用解码视图,导致同一请求在不同阶段被不同解释。
影响范围
Go net/http.ServeMux
受影响为 Go 1.22 及之后使用 net/http.ServeMux 的应用,具体版本区间暂无公开信息。
漏洞详情
路由匹配按 EscapedPath 逐段比较,%2F 不再是段分隔符;匹配命中后通配捕获值按解码视图交付,.. 回退语义恢复。授权中间件按解码路径前缀放行,处理器拼接磁盘路径时越出前缀,形成路径穿越。
利用条件与风险
利用前提是应用同时使用 ServeMux 路由与基于路径前缀的授权中间件,实战中可绕过鉴权访问越权路径或读取越界文件。
修复建议
避免仅依赖路径前缀做授权判断,对解码后的路径做规范化与白名单校验;升级 Go 版本并关注官方对 ServeMux 语义的说明。
原始情报
Go 1.22 起 net/http.ServeMux 采用编码视图匹配、解码视图交付,%2F 与 .. 语义差异可导致授权绕过与路径穿越。