作品介绍:
在赛事期间,本团队针对Hyperledger Fabric平台和联通链进行漏洞挖掘和演示复现。挖掘到联通链漏洞8个,Hyperledger fabric 链漏洞5个。
成果详情:
针对联通链挖掘了8个漏洞:
1.通道创建攻击漏洞
通道创建时交易文件生成的configtx.yaml中配置了错误的联盟信息时,待tx文件生成成功后,再进行通道创建命令执行时会导致peer节点挂掉。
2.部署合约时pluginChaincode 目录下的库替换后没有校验
未编译过pluginChaincode 目录下 so 库的节点,会直接加载该目录下的同名 so 库而不会做校验,导致节点的查询与 master 节点不一致
3.启动时pluginChaincode 目录下的库替换后没有校验
节点目录存在数据时,修改 pluginChaincode 目录下 so 库,等节点重新启动,节点会自动加载修改过的库而没有做校验。
4.合约可以执行peer容器内命令
合约是以 -buildmode=plugin 的形式编译成二进制,然后被 peer 动态加载后使用的,因此可以在合约内写一个 shell 操作,如删除容器内的某个文件,在执行合约时就可以将 peer 容器对应目录下的文件删除。
5.合约编写大内存占用逻辑导致节点OOM退出
合约是以 -buildmode=plugin 的形式编译成二进制,然后被 peer 动态加载后使用的,因此合约内占用的内存就会变成主机占用的内存
6.合约内含无限循环的执行漏洞
若部署攻击合约,其内部逻辑中存在超长次数循环或无限循环逻辑。该合约被攻击者进行多通道部署频繁调用时将会导致peer的cpu资源极速消耗,影响正常交易执行
7.节点7052端口消息可被监听
使用 docker 容器部署的合约,通过与 peer 节点的 7052 端口建立 grpc 连接来完成合约的执行。使用 tcpdump 监听 7052 端口可以看到合约调用的相关信息。
8.合约部署问题
合约仅改变函数内实现,以不同的名称在一个通道上部署后,会部署失败,同时该合约也无法在其他通道上部署。
针对 Hyperledger fabric 挖掘5个
1.未验证的 ccenv 镜像带来的运行时数据泄漏
Peer 运行合约容器时,不会校验合约的进程是否引用了官方的 fabric-chaincode-go 包(也不会校验镜像是否为官方镜像),因此,可以修改 fabric-chaincode-go 的实现,并将这个包打入到 ccenv 镜像。这样每次有新的合约部署,都会基于修改后的 ccenv 镜像编译合约代码。
2.CouchDB泄露
CouchDB 3.x 版本默认 cookie 并开启4369 端口导致可被远程攻击,绕过用户名密码进入到CouchDB容器内执行shell。
3.合约执行泄漏区块链网络信息
合约函数中执行ifconfig,端口扫描,ARP 扫描等操作可以获取合约容器所在主机的端口信息,内网ip相关信息,再通过合约结果返回给调用者。
4.合约攻击
Fabric 部署的合约中如果故意含有无限循环的运行逻辑,当此合约被执行时会导致运行环境CPU资源耗尽引起主机异常
5.共识漏洞
已知漏洞CVE-2022-31121(2.4.5以前版本):共识消息错误导致的共识节点异常。