Airflow 是一个使用 python 语言编写的 data pipeline 调度和监控工作流的平台。 Airflow 是通过 DAG(Directed acyclic graph 有向无环图)来管理任务流程的任务调度工具, 不需要知道业务数据的具体内容,设置任务的依赖关系即可实现任务调度。 Apache Airflow 是以模块化方式构建的。Apache Airflow 的“核心”提供了核心调度功能,允许您编写一些基本任务,但是通过安装额外的包(称为Provider ),可以扩展 Apache Airflow 的功能。
Provider 可以包含操作器、钩子、传感器和传输操作器,用于与多种外部系统进行通信,同时它们还可以通过扩展 Airflow 核心来添加新的功能。
https://github.com/apache/airflow
此次apache Airflow 爆出多个漏洞,均出自Provider 。其漏洞成因也是类似,Airflow 没有过滤用户使用的数据库连接参数,导致特定条件下具备相关权限的用户可以指定恶意的数据库连接信息从而造成文件读取、命令执行等问题,但是由于这些漏洞利用条件苛刻,攻击者必须具备管理员权限并且需要存在调用相关Provider 的DAG 代码才能触发,因此被视为低风险。
CVE-2023-35798 Airflow Apache ODBC and MSSQL Providers 任意文件读取漏洞
该漏洞是Airflow Apache ODBC 和MSSQL Providers对用户提交的get_sqlalchemy_connection参数过滤不当造成的,但是由于需要具备修改连接配置权限及调用相关Provider 的DAG 代码才能利用,因此属于低危漏洞。
官方修复方式为过滤了sqlalchemy_scheme参数中的:和/
Apache Airflow ODBC Provider < 4.0.0
Apache Airflow MSSQL Provider< 3.4.1
https://github.com/apache/airflow/pull/31984
https://lists.apache.org/thread/951rb9m7wwox5p30tdvcfjxq8j1mp4pj
CVE-2023-22886 Apache Airflow JDBC Provider 命令执行漏洞
该漏洞和上个漏洞类似,Airflow 没有对JDBC Provider的Connection参数进行限制,具备一定权限的攻击者可以造成rce
官方在4.0版本的修复说明中做出了如下说明,简单来说就是限制了直接在connection参数中直接指定driver_path和driver_class
在补丁中添加了如下代码,即默认情况下管理员必须在配置文件中设置providers.jdbc参数
allow_driver_path_in_extra为true才可以使用危险功能。
Apache Airflow ODBC Provider< 4.0.0
https://github.com/apache/airflow/pull/31849
https://lists.apache.org/thread/ynbjwp4n0vzql0xzhog1gkp1ovncf8j3
CVE-2023-34395 Apache Airflow ODBC Provider 代码执行漏洞
Apache Airflow ODBC Provider由于对参数分隔符过滤不当,导致命令注入漏洞。在OdbcHook中,由于可控的ODBC驱动程序参数允许加载任意动态链接库,从而导致命令执行。由于4.0.0之后版本的驱动程序只能从构造函数中设置。
在新版本的修复说明中指出,新版本不能通过extras指定driver参数
在下面代码实现了具体验证逻辑
Apache Airflow ODBC Provider< 4.0.0
https://github.com/apache/airflow/pull/31713
https://lists.apache.org/thread/l26yykftzbhc9tgcph8cso88bc2lqwwd
官方已发布安全版本 ,建议升级至安全版本或以上。