Kubernetes选举系统安全漏洞分析:弱会话密钥风险

本文详细披露了Kubernetes选举网站elections.k8s.io存在的安全漏洞,该网站使用弱Flask SECRET_KEY(字符串"N/A")进行会话签名,可能导致会话被篡改。虽然最终评估为高风险非关键问题,但凸显了Web应用安全配置的重要性。

Kubernetes | 报告 #1387366 - elections.k8s.io 使用弱会话密钥,可能危及选举安全

时间线

ian 向 Kubernetes 提交了一份报告。
2021年11月1日 7:23 UTC

摘要

您好,我一直在开发一个名为 CookieMonster 的新工具,用于检测漏洞赏金项目中的错误会话签名配置。许多应用程序使用无状态 cookie 来保存会话信息(即谁已登录),但许多应用程序未能正确保护这些信息。@nagli 和我发现 elections.k8s.io 使用了一个弱的 Flask SECRET_KEY,实际上是字符串 “N/A”,来签名身份验证 cookie。

在许多应用程序中,这会导致应用程序完全被攻破,因为您可以操纵登录身份。对于选举投票系统来说,这将尤其成问题。在 Elekto 的情况下,似乎并非如此,因为 GitHub OAuth 令牌被注入到会话中,而不是用户 ID,这对于其他用户来说很难获取。然而,这可能会启用奇怪的攻击,例如在投票或身份验证流程中使用跨站请求伪造,因为我们能够操纵包含这些令牌的会话。

注意 Elekto 源代码中的警告(这是您设置为 “N/A” 的内容):

1
2
3
4
5
# 加密密钥
#
# 这由 Flask 服务器使用,应设置为随机字符
# 字符串,请在部署前执行此操作!
SECRET_KEY = env('APP_KEY', 'test')

概念验证

由于 CookieMonster 尚未公开,您也可以使用 Flask-Unsign (pip3 install flask-unsign[wordlist]) 来验证此问题:

1
2
3
4
5
6
7
8
9
% curl https://elections.k8s.io -Is | grep cookie
set-cookie: session=eyJfcGVybWFuZW50Ijp0cnVlfQ.YX-V3g.NET76NNJbweb_qagyfYl2_7TDJg; Expires=Thu, 02 Dec 2021 07:23:10 GMT; HttpOnly; Path=/

% flask-unsign -u -c "eyJfcGVybWFuZW50Ijp0cnVlfQ.YX-V3g.NET76NNJbweb_qagyfYl2_7TDJg"
[*] Session decodes to: {'_permanent': True}
[*] No wordlist selected, falling back to default wordlist..
[*] Starting brute-forcer with 8 threads..
[+] Found secret key after 8192 attempts
'N/A'

影响

弱密钥可能允许任意会话操纵。

ian 邀请另一位黑客作为合作者加入。
2021年11月1日 7:24 UTC

nagli 作为合作者加入此报告。
2021年11月1日 7:26 UTC

h1_analyst_caesar 将状态更改为已分类。
2021年11月4日 9:32 UTC

您好 @ian,

感谢您的提交!我们能够验证您的报告,并已将其提交给相应的修复团队进行审查。他们将告知我们此报告的最终裁决,以及是否/何时实施修复。请注意,状态和严重性可能会发生变化。

谢谢,
@turtle_shell

h1_analyst_caesar 将严重性从高更新为高 (7.5)。
2021年11月4日 9:36 UTC

我同意这是一个高严重性问题,而不是关键问题。

我的会话 cookie 如下所示:

1
{'_permanent': True, 'authentication': 'gho_lhhuQuI2mXXCnTPT2N8...', 'csrf_token': '500ef973780f085ccd6090efa41a6...', 'state': 'd4U9sRlU9jMXgR....'}

它们都是不可猜测的私有令牌。没有可以篡改的值会危及应用程序的完整性,例如 role=admin cookie。

然而,能够篡改签名会话并不是可以轻易忽视的事情。

Kubernetes 奖励了 nagli 125 美元奖金。
2021年11月9日 4:58 UTC

感谢您提请我们注意!根据 Kubernetes 项目的 H1 范围,这超出了范围:
“社区管理工具 - 包括电子邮件列表、Google 文档、社区会议、Slack 频道等”

此外,这不太可能直接转化为对选举完整性的攻击等。

但是,我们想为这份优秀、高质量的报告颁发奖金,特别是因为我们将根据报告采取行动修复问题。

Kubernetes 奖励了 ian 125 美元奖金。
2021年11月9日 4:58 UTC

感谢您提请我们注意!根据 Kubernetes 项目的 H1 范围,这超出了范围:
“社区管理工具 - 包括电子邮件列表、Google 文档、社区会议、Slack 频道等”

此外,这不太可能直接转化为对选举完整性的攻击等。

但是,我们想为这份优秀、高质量的报告颁发奖金,特别是因为我们将根据报告采取行动修复问题。

tabbysable Kubernetes 工作人员关闭了报告并将状态更改为已解决。
2025年8月20日 20:51 UTC

ian 请求披露此报告。
2025年8月20日 20:54 UTC

nagli 发表评论。
2025年8月20日 20:54 UTC

对我来说没问题 @ian

此报告已被披露。
7天前

报告详情

项目 详情
报告时间 2021年11月1日 7:23 UTC
报告者 ian
报告对象 Kubernetes
管理状态 已管理
参与者 有参与者
报告 ID #1387366
状态 已解决
严重性 高 (7.5)
披露时间 2025年9月19日 20:54 UTC
弱点 加密问题 - 通用
CVE ID
赏金 250美元
账户详情
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计