NCC-E003660-B4Y: 危险的文件路径构建
这个问题在 Kubernetes 1.24 Security Audit Report 中被报告。
影响
如果这个可以被利用,它将允许具有 API 服务特权的用户检索任意本地文件,但目前的风险已经得到缓解。
描述
/logs
kubelet API处理器在返回文件内容之前使用一种危险的编码模式来构建本地文件路径。这个API方法使用 path.Join
将用户提供的表示日志文件名的字符串附加到字面量 "/var/ log"
之后,然后使用 http.ServeFile
在HTTP响应中返回文件的内容。没有对提供的文件名进行任何第一方验证,以确保它不包含危险的路径遍历序列(..). Incidentally, this issue is not exploitable because Golang’s
http.Server`显式地清理其输入以删除此类路径遍历序列,但如果不是出于这个平台提供的安全措施,该API方法将允许检索任意本地文件)。
由于处理程序不可利用,并且缓解控制是Golang平台的一部分(因此与未来的发布版本极不可能削弱) ,因此将此问题作为信息性提出。尽管如此,这种编码实践应该被劝阻。
建议
无需采取行动,但重要的是,处理程序函数在构造文件路径后(但在将其传递给 http.ServeFile
之前)永远不要更新为手动规范化文件路径 - 这通常被认为是无害甚至被认为是严格的操作。
直接将请求参数包含在本地文件路径中而不进行验证或清理的做法是不安全的,应该被禁止,并设置支持静态分析规则来支持这一点。
组件
kubelet
位置
pkg/routes/logs.go:44
我们需要了解其他什么吗?
请参阅伞状问题 #118980 以查看这些问题发现的当前状态。供应商给了这个问题一个ID,NCC-E003660-B4Y,并在kube-apiserver部分找到了19个报告。供应商认为这个问题的信息风险、中等影响和可利用性都是None。要查看原始发现,请从 Kubernetes 1.24 Security Audit Report 第51页开始。
测试环境
Kubernetes 1.24.3
8条答案
按热度按时间8gsdolmq1#
这个问题目前正在等待分类。
如果SIG或子项目确定这是一个相关的问题,他们将通过应用
triage/accepted
标签并提供进一步的指导来接受它。组织成员可以通过在评论中写入
/triage accepted
来添加triage/accepted
标签。有关使用PR评论与我互动的说明,请查看here。如果您对我的行为有任何问题或建议,请针对kubernetes/test-infra仓库提出一个问题。
d6kp6zgx2#
/sig security
dsf9zpds3#
/assign
slmsl1lt4#
/sig node
cgvd09ve5#
Kubernetes项目目前缺乏足够的贡献者来充分应对所有问题。
此机器人根据以下规则对未分类的问题进行分级处理:
lifecycle/stale
应用后的90天不活动后,将应用lifecycle/stale
lifecycle/stale
应用后的30天不活动后,将应用lifecycle/rotten
lifecycle/rotten
应用后的30天不活动后,该问题将被关闭您可以:
/remove-lifecycle stale
/close
关闭此问题请将反馈发送至sig-contributor-experience@kubernetes/community。
/lifecycle stale
k0pti3hp6#
/remove-lifecycle stale
pxy2qtax7#
Kubernetes项目目前缺乏足够的贡献者来充分应对所有问题。
此机器人根据以下规则对未分类的问题进行分级处理:
lifecycle/stale
应用后的90天不活动后,将应用lifecycle/stale
lifecycle/stale
应用后的30天不活动后,将应用lifecycle/rotten
lifecycle/rotten
应用后的30天不活动后,该问题将被关闭您可以:
/remove-lifecycle stale
/close
关闭此问题请将反馈发送至sig-contributor-experience@kubernetes/community。
/lifecycle stale
svdrlsy48#
/remove-lifecycle stale