描述: 当 Airflow 加载示例 DAG 时,此漏洞允许远程代码执行(RCE),且可能通过 CVE-2020-13927 在未认证的情况下触发
CVE 致谢:DtDream security 的 xuxiang
受影响版本: <1.10.11
披露链接: https://lists.apache.org/thread.html/r7255cf0be3566f23a768e2a04b40fb09e52fcd1872695428ba9afe91%40%3Cusers.airflow.apache.org%3E
NIST CVE 链接: https://nvd.nist.gov/vuln/detail/CVE-2020-11978
该利用针对存在命令注入漏洞的示例 DAG,同时使用默认公开的实验性 REST API,即使 Web 界面已设置身份验证也可利用。
python CVE-2020-11978.py <url> <command>
如果 example_trigger_target_dag 未加载,并且你知道要触发的特定 DAG,则可以使用 CVE-2020-11978-min.py 作为模板来触发该特定 DAG。
如果你已在配置中通过设置 load_examples=False 禁用示例,则不会受到此漏洞影响。
你可以升级到 >=1.10.11,或者对于 <1.10.11,移除易受攻击的 DAG,即 example_trigger_target_dag。
如果你使用 >=1.10.11 启动新的 Airflow 实例,则 airflow.cfg 中的 auth_backend 默认已设置为 deny_all。
[api]
auth_backend = airflow.api.auth.backend.deny_all
请注意,即使对于 >=1.10.11,airflow.api.auth.backend.default 仍然允许未经认证的 API 请求。因此,如果你现有的 Airflow 实例使用 auth_backend = airflow.api.auth.backend.default,那么即使升级到 >=1.10.11,REST API 仍然是公开的。
对于 >=2.0.0,实验性 API 已被禁用,但拥有更强大的稳定 API。