CVE-2022-24706 Apache couchdb 默认erlang-cookie的RCE漏洞分析

CVE-2022-24706 Apache couchdb 默认erlang-cookie的RCE漏洞分析

前两天看了K8实验室发的一篇文章。

[EXP]CVE-2022-24706 Exploit公开 影响全网128万台Apache CouchDB数据库

该标题过于夸张了,Apache CouchDB的安装量确实有这么多,但是公网上(根据shodan统计)实际受影响的仅有1400台。

漏洞利用大致流程

漏洞利用条件

该漏洞利用条件有以下4点:

  • Apache CouchDB <= 3.2.1
  • 4369 epmd 端口暴露至公网(包含CouchDB 的随机端口)
  • Erlang使用默认cookie值(monster)
  • CouchDB 的随机端口暴露至公网(实际通信端口)

漏洞简述

攻击者可以在不进行身份验证的情况下访问未得到适当保护的默认安装并获得管理员权限。

  1. CouchDB 打开一个随机网络端口,绑定到所有可用的接口以预期集群操作和/或运行时自省。一个名为epmd的实用程序进程将该随机端口通告给网络,epmd本身侦听固定端口4369。
  2. CouchDB 打包之前为单节点和集群安装选择了默认cookie值(monster)。该 cookie 验证 Erlang 节点之间的任何通信。

CouchDB官方建议在所有CouchDB安装前设置防火墙。完整的CouchDB api在注册的端口5984上可用,这是单节点安装需要公开的唯一端口。不将单独的分发端口暴露给外部访问的安装不易受到攻击。

也就是说CouchDB只开放了5984端口至公网则不受影响。

shodan检索语法

port:4369 "name couchdb at"

漏洞利用exp

该exp为交互式命令执行利用脚本。

https://www.exploit-db.com/exploits/50914

漏洞复现分析

建议使用windwos进行复现,linux的安装包已被官方更新,docker安装也有很多坑。

漏洞版本下载:https://zgao.top/download/apache-couchdb-2.3.1.msi

安装完成后,查看监听端口。

exploit-db的exp为例。我们在66行下断点,可以看到请求4369端口后给我们返回了couchdb的随机端口为55519。

后续的操作均已4369端口无关,得到随机端口后将默认cookie值monster进行MD5加密后拼接”challenge” message与目标进行通信,如果目标使用默认cookie这一步就能直接认证成功。

认证成功后后续的操作都是命令执行的操作,exp则是对返回的让raw data进行加工处理,去掉control message的部分仅保留命令执行的结果。

compile_cmd对执行的payload进行编码转化成该协议可以支持的格式。

捕获exp的攻击流量如图。

反弹shell成功,直接就是system的权限。经测试大部分Linux获取到的都是couchdb用户权限,配合CVE-2021-4034 Polkit Pkexec本地提权很大概率能提升至root权限。

溯源排查

但该日志不会记录请求ip,即使在配置文件(默认info)中指定debug模式也没有记录。无法从Apache Couchdb 本身的日志进行溯源排查。

排查组件是否存在该漏洞,可以查看vm.args中是否存在默认cookie monster

漏洞缓解修复

  1. 修改默认cookie。
  2. 升级 Apache CouchDB 版本至3.2.2及以上。
  3. 防火墙限制4369等端口访问,避免暴露至公网。

总结

该漏洞实际是一个默认cookie的漏洞,类似于shiro的默认key。如果知道修改后的的cookie值,也可以利用成功。由于并非代码逻辑导致的漏洞,所以漏洞复现分析部分就没有对源码进行调试分析。其次要写出该漏洞的exp也不难,只要对couchdb通信协议有一定了解,抓包分析通信流量,再用socket发包即可。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论