Yearning系统存在服务器任意文件读取漏洞,攻击者可读取如/etc/passwd文件。访问 /front//%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c../etc/passwd,可以成功读取到/etc/passwd 文件。
漏洞链接:https://github.com/jimdx/YEARNING-CVE-2022-27043
测试链接:
https://yearning.chegva.com/front//%5c..%5c..%5c/etc/passwd
https://yearning.chegva.com/front/%5c..%5c..%5c/etc/passwd
于是准备折腾Yearning 2.3.5升级,github看了下官方的升级说明:https://github.com/cookieY/Yearning/releases?page=2
2.3.5版本更新至3.0
当前RC版本仅支持2.3.5版本更新迁移
1.备份原Yearning数据库
2.执行Yearning目录下 migrate 二进制文件。请注意 必须在Yearning启动之前执行!!
3.正常启动Yearning
由于流程,排除数据库,脱敏逻辑更改为基于数据源,请在更新后在数据源处修改配置
由于流程逻辑变更,升级后原始工单将无法查看, 如需查看请自行对工单行中的source_id字段进行填充
(根据core_sql_orders表内的source字段查找core_data_sources表内的source关联并将source_id的值回填至对应的工单行内)
升级步骤:
步骤一:备份数据库和代码
登陆腾讯云Mysql控制台对Yearning数据库进行备份。
备份当前的Yearning代码,以便在需要时可以回滚到旧版本。
步骤二:下载指定版本
访问Yearning的官方网站或GitHub页面,下载测试验证过的版本代码包。
解压下载的代码包到Yearning两台服务器。
步骤三:升级数据库
停止当前正在运行的Yearning实例。
使用新版本的数据库初始化脚本来更新数据库结构。这可能涉及运行新的数据库迁移脚本或执行其他必要的数据库更新步骤。
步骤四:更新配置文件
如果新版本的Yearning有新的配置项或配置文件格式发生了变化,需要更新配置文件以反映这些更改。
确保配置文件中的数据库连接信息等与新版本兼容。
步骤五:部署新版本
将解压的新代码部署到服务器上。
启动新版本的Yearning实例。
步骤六:测试和验证
确保新版本的Yearning能够正常启动。
测试数据库连接和基本功能,确保一切正常。
升级操作:
本地搞了个docker环境测试,v3.1.4 arm版本:https://hub.docker.com/r/chaiyd/yearning/tags
docker pull chaiyd/yearning:v3.1.4-arm64 启动命令:docker run -d -it --name yearning-3.1.4 -p 8000:8000 -e MYSQL_USER=root -e MYSQL_ADDR=host.docker.internal:3306 -e MYSQL_PASSWORD=root -e MYSQL_DB=Yearning chaiyd/yearning:v3.1.4-arm64 升级数据库表结构:docker run -d -it --name yearning-3.1.4-migrate -p 8000:8000 -e MYSQL_USER=root -e MYSQL_ADDR=host.docker.internal:3306 -e MYSQL_PASSWORD=root -e MYSQL_DB=Yearning chaiyd/yearning:v3.1.4-arm64 /bin/bash -c "./Yearning migrate" 2024/01/03 18:23:03 /Users/henryyee/PersonalProjects/Yearning-go/src/service/migrate.go:206 Error 1091: Can't DROP 'source'; check that column/key exists [9.959ms] [rows:0] ALTER TABLE `core_query_orders` DROP COLUMN `source` 破坏性变更修复………… 2024/01/03 18:23:03 /Users/henryyee/PersonalProjects/Yearning-go/src/service/migrate.go:211 Error 1091: Can't DROP 'rejected'; check that column/key exists [3.875ms] [rows:0] ALTER TABLE `core_sql_orders` DROP COLUMN `rejected` 2024/01/03 18:23:03 /Users/henryyee/PersonalProjects/Yearning-go/src/service/migrate.go:212 Error 1091: Can't DROP 'permissions'; check that column/key exists [2.779ms] [rows:0] ALTER TABLE `core_graineds` DROP COLUMN `permissions` 2024/01/03 18:23:03 /Users/henryyee/PersonalProjects/Yearning-go/src/service/migrate.go:213 Error 1091: Can't DROP 'rule'; check that column/key exists [1.051ms] [rows:0] ALTER TABLE `core_graineds` DROP COLUMN `rule` 修复成功!
启动后发现有些功能使用异常:
1、工单申请无法使用,配置的数据源和关联关系全部丢失
2、工单审核详情历史记录关联关系丢失,也可能和无法连接到远程库有关
3、ldap配置丢失
结论:
1、3.1.4版本数据库表结构变化大,关联关系丢失严重,升级后服务不可用
2、考虑到3.1.4版本跨度较大,准备在服务器上部署3.0.0版本测试
PS:Yearning启动时,连本机127.0.0.1 mysql库不好使,改成 host.docker.internal 后正常
更新:3.0.0版本测试结果。
1、3.0.0版本升级完后,数据源流程配置丢失
2、工单历史记录关联关系丢失
2.3.5升级到3.0.0版本数据库表结构存在破坏性变更,不修复工单和数据源表结构关联关系,历史工单详情无法查看。数据源无法使用,会影响业务正常使用。
参考: