[错误] OAuth 客户端创建时接受并存储了未记录的作用域
这是请求支援吗?
这不是一个支持请求
这个问题存在吗?
我搜索了现有的问题
当前的行为
当前的行为
OAuth 客户端创建接受不属于所记录的范围词汇的范围字符串,并逐字存储.
CLI 帮助列出预期范围值 :
auth keys, oauth keys, 设备: 核心, 设备: 路由, 政策 文件, 特性 设置, 读取变体, 所有, 全部: 已读
然而,创建路径只要求至少一个范围,不能根据该词汇验证提交的数值。
CMd/headscale/cli/oauth client.go的相关代码:
如果 Len( 镜片) = 0 { 返回 fmt。 错误f (“ 需要至少一个 -- scope :% w”, 错误的 MissingParameter ) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
resp, 错误 : = 客户端. CreateKeyWithResponse(ctx, oauthTailnet, 客户端v2. CreateKey request{ 密钥类型: & keyType, 范围( S) : 标记( T) : 描述( D) : ) (中文(简体) ).
数据库创建路径通过验证ACLTags验证了标记,但范围只在被存储之前被去复制并排序.
hscontrol/db/oauth.go中的相关代码:
标记,错误:= 验证ACLtags(tags) 如果错误 ! = 无 { 返回“,零,错误 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
瞄准镜 = set.SetOf(瞄准镜). Slice() 切片块. 排序( 镜片)
客户端 := 类型. OAuthClient{ 范围:范围, 标签:标签, 说明:说明, 用户ID: 创建用户ID, 创建At: 现在( N), {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
本地验证输出 :
QQ STEP1:恶意/任意瞄准镜+VALID标记(预期SUCCESS)QQ OAuth客户端 b54801670ee2创建.
QQ STEP2: 列表 - > 确认假瞄准镜持续存在 逐字记录QQ ID 范围 标记 描述 已创建 b54801670ee2 | *: *,././etc/passwd, EVIL:超级用户 |: tag: tag: legit |: |: re: 2026-07-30 04:43:58
QQ STEP 3: ContraST — 有效范围 + INVALID 标记'notagprefix' (预期 FAIL) QQ 错误: api 错误 (400): 创建 oauth 客户端
这表明,标记在格式错误时会被拒绝,而没有记录的瞄准镜字符串被接受并存储.
注释:
控制/镜。 解析将未知范围字符串保持为-is,代码注释称未知字符串不能满足所需的范围. 因此,这个报告是关于输入验证和存储的OAuth客户端配置一致性,而不是显示的特权升级.
建议的修补:
在 CreatOuthClient 中添加范围验证以验证ACLtags 。 校验器应该复制、排序和拒绝任何不在控制/范围的范围。 已识(一).
• 预期行为
• 预期行为
OAuth 客户端创建应拒绝不属于已知/已记录范围词汇的范围值.
如果意图的行为是为了允许可前向相容的未知范围,那么该行为应该在CLI帮助和API文档中明确. . . . . . . .
内容来源: juanfont/headscale