kylin CVE-2022-24697 & CVE-2022-43396
字数 1391 2025-08-25 22:58:40

Apache Kylin 命令注入漏洞分析 (CVE-2022-24697 & CVE-2022-43396)

漏洞概述

这两个漏洞均存在于Apache Kylin的cube build功能中:

  • CVE-2022-24697: 参数可控导致的命令注入
  • CVE-2022-43396: 命令可控导致的命令注入(是CVE-2022-24697的绕过)

影响版本

  • Kylin 2.x
  • Kylin 3.x
  • Kylin 4.x (应升级至4.0.2修复CVE-2022-24697,升级至4.0.3修复CVE-2022-43396)

环境搭建

Docker环境配置

docker pull apachekylin/apache-kylin-standalone:4.0.0
docker run -d -m 8G -p 7070:7070 -p 8088:8088 -p 50070:50070 -p 8032:8032 -p 8042:8042 -p 2181:2181 -p 5005:5005 apachekylin/apache-kylin-standalone:4.0.0

调试配置

修改kylin.sh添加远程调试参数:

sed -i 's/\${KYLIN_TOMCAT_OPTS} -classpath/\${KYLIN_TOMCAT_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -classpath/g' /home/admin/apache-kylin-4.0.0-bin-spark2/bin/kylin.sh
sh /home/admin/apache-kylin-4.0.0-bin-spark2/bin/kylin.sh restart

CVE-2022-24697 漏洞分析

攻击步骤

  1. 登录Kylin (默认账号:admin/密码:KYLIN)
  2. 选择"learn_kylin"项目
  3. 查看cube列表,选择Action -> Edit编辑cube
  4. 在Configuration Overwrites中添加:
    kylin.engine.spark-conf.spark.driver.memory 512M' `touch /tmp/hacked` '
    
  5. 点击Next并Save
  6. 点击Build,选择日期后Submit
  7. 验证:容器内/tmp/hacked文件被创建

漏洞原理

  1. 通过getPropertiesByPrefix("kylin.engine.spark-conf.")获取配置
  2. 配置项spark.driver.memory的值未经过滤直接拼接进命令
  3. 最终在CliCommandExecutor.execute()执行恶意命令

关键代码路径

org.apache.kylin.engine.spark.job.NSparkExecutable#doWork
  -> runSparkSubmit
    -> getSparkConfigOverride
      -> config.getSparkConfigOverride()
        -> getPropertiesByPrefix("kylin.engine.spark-conf.")

修复方案

补丁PR #1811:

  • 添加ParameterFilter.checkSparkConf方法检查所有配置属性键值对

CVE-2022-43396 漏洞分析

攻击步骤

  1. 登录Kylin (默认账号:admin/密码:KYLIN)
  2. 选择"learn_kylin"项目
  3. 查看cube列表,选择Action -> Edit编辑cube
  4. 在Configuration Overwrites中添加:
    kylin.engine.spark-cmd touch /tmp/hacked123; echo
    
  5. 点击Next并Save
  6. 点击Build,选择日期后Submit
  7. 验证:容器内/tmp/hacked123文件被创建

漏洞原理

  1. 通过getOptional("kylin.engine.spark-cmd", null)获取命令
  2. 获取的spark-cmd参数未经过滤直接执行
  3. NSparkExecutable.generateSparkCmd中拼接命令

关键代码路径

org.apache.kylin.engine.spark.job.NSparkExecutable#doWork
  -> runSparkSubmit
    -> generateSparkCmd
      -> getSparkSubmitCmd
        -> getOptional("kylin.engine.spark-cmd", null)

修复方案

补丁PR #2011:

  • 直接指定sparkSubmitCmd参数为默认值,不允许用户配置

调试方法

  1. 下载源码:https://github.com/apache/kylin/archive/refs/tags/kylin-4.0.0.zip
  2. 关键断点:org.apache.kylin.engine.spark.job.NSparkExecutable#doWork
  3. 调用栈分析:
    execute:90, CliCommandExecutor
    runSparkSubmit:282, NSparkExecutable 
    doWork:168, NSparkExecutable
    execute:206, AbstractExecutable
    doWork:94, DefaultChainedExecutable
    execute:206, AbstractExecutable
    run:113, DefaultScheduler$JobRunner
    runWorker:1149, ThreadPoolExecutor
    run:624, ThreadPoolExecutor$Worker
    run:748, Thread
    

总结

这两个漏洞展示了Apache Kylin在配置处理上的安全问题:

  1. CVE-2022-24697通过spark配置参数注入命令
  2. CVE-2022-43396通过直接控制spark-cmd执行命令
  3. 修复方案均是通过限制用户可控的配置项来解决问题

建议所有Kylin用户尽快升级到安全版本,避免潜在的命令注入风险。

Apache Kylin 命令注入漏洞分析 (CVE-2022-24697 & CVE-2022-43396) 漏洞概述 这两个漏洞均存在于Apache Kylin的cube build功能中: CVE-2022-24697 : 参数可控导致的命令注入 CVE-2022-43396 : 命令可控导致的命令注入(是CVE-2022-24697的绕过) 影响版本 Kylin 2.x Kylin 3.x Kylin 4.x (应升级至4.0.2修复CVE-2022-24697,升级至4.0.3修复CVE-2022-43396) 环境搭建 Docker环境配置 调试配置 修改kylin.sh添加远程调试参数: CVE-2022-24697 漏洞分析 攻击步骤 登录Kylin (默认账号:admin/密码:KYLIN) 选择"learn_ kylin"项目 查看cube列表,选择Action -> Edit编辑cube 在Configuration Overwrites中添加: 点击Next并Save 点击Build,选择日期后Submit 验证:容器内 /tmp/hacked 文件被创建 漏洞原理 通过 getPropertiesByPrefix("kylin.engine.spark-conf.") 获取配置 配置项 spark.driver.memory 的值未经过滤直接拼接进命令 最终在 CliCommandExecutor.execute() 执行恶意命令 关键代码路径 修复方案 补丁PR #1811: 添加 ParameterFilter.checkSparkConf 方法检查所有配置属性键值对 CVE-2022-43396 漏洞分析 攻击步骤 登录Kylin (默认账号:admin/密码:KYLIN) 选择"learn_ kylin"项目 查看cube列表,选择Action -> Edit编辑cube 在Configuration Overwrites中添加: 点击Next并Save 点击Build,选择日期后Submit 验证:容器内 /tmp/hacked123 文件被创建 漏洞原理 通过 getOptional("kylin.engine.spark-cmd", null) 获取命令 获取的spark-cmd参数未经过滤直接执行 在 NSparkExecutable.generateSparkCmd 中拼接命令 关键代码路径 修复方案 补丁PR #2011: 直接指定sparkSubmitCmd参数为默认值,不允许用户配置 调试方法 下载源码:https://github.com/apache/kylin/archive/refs/tags/kylin-4.0.0.zip 关键断点: org.apache.kylin.engine.spark.job.NSparkExecutable#doWork 调用栈分析: 总结 这两个漏洞展示了Apache Kylin在配置处理上的安全问题: CVE-2022-24697通过spark配置参数注入命令 CVE-2022-43396通过直接控制spark-cmd执行命令 修复方案均是通过限制用户可控的配置项来解决问题 建议所有Kylin用户尽快升级到安全版本,避免潜在的命令注入风险。