Apache Airflow Security
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
Apache Airflow 作为一个 编排和调度数据管道或工作流 的平台。在数据管道的上下文中,“编排”一词表示安排、协调和管理来自各种来源的复杂数据工作流的过程。这些编排的数据管道的主要目的是提供经过处理和可消费的数据集。这些数据集被广泛应用于众多应用程序,包括但不限于商业智能工具、数据科学和机器学习模型,所有这些都是大数据应用程序正常运行的基础。
基本上,Apache Airflow 将允许您 在某些事情发生时调度代码的执行(事件,cron)。
您可以使用来自 https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml 的 docker-compose 配置文件 启动一个完整的 Apache Airflow Docker 环境。(如果您在 MacOS 上,请确保为 Docker 虚拟机分配至少 6GB 的 RAM)。
运行 Apache Airflow 的一种简单方法是 使用 Minikube 运行它:
Airflow 可能在其配置中存储 敏感信息,或者您可能会发现存在弱配置:
在开始攻击 Airflow 之前,您应该了解 权限是如何工作的:
如果您有 访问 web 控制台 的权限,您可能能够访问以下一些或全部信息:
变量(自定义敏感信息可能存储在这里)
连接(自定义敏感信息可能存储在这里)
在 http://<airflow>/connection/list/
中访问它们
配置(敏感信息如 secret_key
和密码可能存储在这里)
列出 用户和角色
每个 DAG 的代码(可能包含有趣的信息)
变量可以存储在 Airflow 中,以便 DAG 可以 访问 其值。这类似于其他平台的秘密。如果您有 足够的权限,可以在 GUI 中访问它们,地址为 http://<airflow>/variable/list/
。
Airflow 默认会在 GUI 中显示变量的值,但根据 这个 的说法,可以设置一个 变量列表,其 值 将在 GUI 中显示为 星号。
然而,这些 值 仍然可以通过 CLI(您需要有数据库访问权限)、任意 DAG 执行、API 访问变量端点(需要激活 API),甚至 GUI 本身 来 检索! 要从 GUI 访问这些值,只需 选择您想访问的变量,然后 点击操作 -> 导出。 另一种方法是对 隐藏值 进行 暴力破解,使用 搜索过滤 直到您获得它:
如果 expose_config
配置设置为 True,则从 用户角色 及 以上 可以 读取 web 中的配置。在此配置中,secret_key
出现,这意味着任何拥有此有效密钥的用户都可以 创建自己的签名 cookie 来冒充任何其他用户账户。
如果您对 DAG 保存的位置 有 写入权限,您可以 创建一个 发送 反向 shell 的 DAG。 请注意,这个反向 shell 将在 airflow worker 容器 内执行:
如果您将某些内容设置为在代码的根目录中执行,在撰写本文时,它将在将其放入 DAG 文件夹后几秒钟内由调度器执行。
如果你成功攻陷了 DAG 集群中的一台机器,你可以在 dags/
文件夹中创建新的 DAG 脚本,它们将会在 DAG 集群中的其余机器上复制。
当你从 GUI 执行一个 DAG 时,你可以传递参数给它。 因此,如果 DAG 编写不当,它可能会容易受到命令注入的攻击。 这就是在这个 CVE 中发生的情况:https://www.exploit-db.com/exploits/49927
你需要知道的开始寻找 DAG 中命令注入的方法是参数是通过代码**dag_run.conf.get("param_name")
来访问**的。
此外,变量也可能出现相同的漏洞(请注意,拥有足够权限的情况下,你可以在 GUI 中控制变量的值)。变量通过以下方式访问:
如果它们被用在例如 bash 命令中,你可能会执行命令注入。
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)