Atlassian Confluence 远程代码执行漏洞原理层面补充分析(CVE-2023-22518)
字数 2288 2025-08-24 07:48:10

Atlassian Confluence 远程代码执行漏洞分析(CVE-2023-22518) 教学文档

漏洞概述

CVE-2023-22518是Atlassian Confluence中的一个严重漏洞,本质上是认证绕过漏洞,攻击者可利用该漏洞绕过认证调用高危接口,最终可能导致远程代码执行(RCE)。该漏洞影响多个Confluence版本,允许未授权攻击者重置系统并获取管理员权限。

环境搭建

使用Docker搭建漏洞环境

  1. 选择存在漏洞的镜像版本:atlassian/confluence:8.5.2-ubuntu-jdk11
  2. 创建docker-compose.yml文件:
version: '2'
services:
  web:
    image: atlassian/confluence:8.5.2-ubuntu-jdk11
    ports:
      - "8090:8090"
      - "5005:5005"
    depends_on:
      - db
  db:
    image: postgres:10.7-alpine
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=confluence
    ports:
      - "5432:5432"
  1. 为远程调试修改环境变量:
    • 编辑/opt/atlassian/confluence/bin/setenv.sh
    • export CATALINA_OPTS前添加:
      CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 ${CATALINA_OPTS}"
      
    • 重启容器使配置生效

IDEA调试设置

  1. 下载同版本Confluence安装包(tar.gz格式)
  2. 用IDEA打开目录
  3. 将以下目录添加为库:
    • Confluence/confluence/WEB-INF/lib
    • Confluence/confluence/WEB-INF/atlassian-bundled-plugins
    • Confluence/confluence/WEB-INF/atlassian-bundled-plugins-setup
  4. 添加Remote JVM Debug运行配置

漏洞原理深度分析

认证鉴权机制缺陷

Confluence使用两个关键Interceptor完成接口认证鉴权:

  1. PermissionCheckInterceptor - 检查用户是否登录及是否有权限访问目标页面
  2. WebSudoInterceptor - 检查需要管理员权限的操作是否已完成二次认证

PermissionCheckInterceptor缺陷

  1. 调用confluenceAction.isPermitted()方法进行权限检查
  2. 如果Action未重写isPermitted()方法(如EditTrustedApplicationAction等),则调用父类ConfluenceActionSupport.isPermitted()
  3. ConfluenceActionSupport.isPermitted()会:
    • 获取登录用户权限集
    • 检查是否有USECONFLUENCE权限
  4. 存在后门:可通过setSkipAccessCheck()方法绕过校验
    • 请求时添加skipAccessCheck=true参数即可绕过
    • 示例:http://ip:port/json/trustedapp-view.action?skipAccessCheck=true
  5. 部分类直接重写isPermitted()返回true,无需任何参数即可绕过认证(如SetupRestoreAction)

WebSudoInterceptor缺陷

  1. 检查URL路径:

    • /admin/开头:默认需要管理员二次登录,除非有@WebSudoNotRequired注解
    • 不以/admin/开头:默认不需要二次登录,除非有@WebSudoRequired注解
  2. 关键问题:

    • struts.xml中使用package extends语法:
      • /admin路由集合继承/setup路由集合
      • /json路由集合继承/admin路由集合
    • 因此可通过/json前缀访问/setup/admin命名空间下的接口
    • WebSudoInterceptor认为/json路由下的接口默认不需要二次登录
    • 使用validatingStack而非validatingSetupStack,绕过了SetupCheckInterceptor的安装校验

可利用的Action类

以下Action类未正确实现权限检查,可被利用:

  1. EditTrustedApplicationAction
  2. ViewTrustedApplicationsAction
  3. ForceUpgradeAction
  4. AttachmentMigrationAction
  5. ContentRemigrationAction
  6. FlushCacheAction
  7. SetupRestoreFileAction
  8. SetupRestoreAction - 最终用于重置系统获取管理员权限的关键类

漏洞利用流程

  1. 找到未正确实现权限检查的Action类(如SetupRestoreAction)
  2. 通过/json路由访问这些接口,绕过认证和权限检查
  3. 使用SetupRestoreAction重置系统
  4. 获取管理员权限
  5. 通过后台上传恶意应用实现RCE

防御措施

  1. 及时更新到Atlassian官方发布的安全补丁
  2. 限制对Confluence管理界面的访问
  3. 实施网络隔离,仅允许必要用户访问Confluence服务
  4. 监控异常的系统重置操作
  5. 定期审计系统日志,检测可疑活动

总结

CVE-2023-22518漏洞的根源在于Confluence的认证鉴权机制存在设计缺陷,特别是:

  1. PermissionCheckInterceptor的可绕过性
  2. WebSudoInterceptor的路由检查不严谨
  3. struts.xml中的路由继承关系导致权限检查被绕过

这些缺陷组合在一起,使得攻击者能够完全绕过认证系统,访问高危操作接口,最终导致系统被完全控制。

Atlassian Confluence 远程代码执行漏洞分析(CVE-2023-22518) 教学文档 漏洞概述 CVE-2023-22518是Atlassian Confluence中的一个严重漏洞,本质上是认证绕过漏洞,攻击者可利用该漏洞绕过认证调用高危接口,最终可能导致远程代码执行(RCE)。该漏洞影响多个Confluence版本,允许未授权攻击者重置系统并获取管理员权限。 环境搭建 使用Docker搭建漏洞环境 选择存在漏洞的镜像版本: atlassian/confluence:8.5.2-ubuntu-jdk11 创建 docker-compose.yml 文件: 为远程调试修改环境变量: 编辑 /opt/atlassian/confluence/bin/setenv.sh 在 export CATALINA_OPTS 前添加: 重启容器使配置生效 IDEA调试设置 下载同版本Confluence安装包(tar.gz格式) 用IDEA打开目录 将以下目录添加为库: Confluence/confluence/WEB-INF/lib Confluence/confluence/WEB-INF/atlassian-bundled-plugins Confluence/confluence/WEB-INF/atlassian-bundled-plugins-setup 添加Remote JVM Debug运行配置 漏洞原理深度分析 认证鉴权机制缺陷 Confluence使用两个关键Interceptor完成接口认证鉴权: PermissionCheckInterceptor - 检查用户是否登录及是否有权限访问目标页面 WebSudoInterceptor - 检查需要管理员权限的操作是否已完成二次认证 PermissionCheckInterceptor缺陷 调用 confluenceAction.isPermitted() 方法进行权限检查 如果Action未重写 isPermitted() 方法(如 EditTrustedApplicationAction 等),则调用父类 ConfluenceActionSupport.isPermitted() ConfluenceActionSupport.isPermitted() 会: 获取登录用户权限集 检查是否有 USECONFLUENCE 权限 存在后门:可通过 setSkipAccessCheck() 方法绕过校验 请求时添加 skipAccessCheck=true 参数即可绕过 示例: http://ip:port/json/trustedapp-view.action?skipAccessCheck=true 部分类直接重写 isPermitted() 返回 true ,无需任何参数即可绕过认证(如 SetupRestoreAction ) WebSudoInterceptor缺陷 检查URL路径: 以 /admin/ 开头:默认需要管理员二次登录,除非有 @WebSudoNotRequired 注解 不以 /admin/ 开头:默认不需要二次登录,除非有 @WebSudoRequired 注解 关键问题: struts.xml 中使用 package extends 语法: /admin 路由集合继承 /setup 路由集合 /json 路由集合继承 /admin 路由集合 因此可通过 /json 前缀访问 /setup 和 /admin 命名空间下的接口 WebSudoInterceptor 认为 /json 路由下的接口默认不需要二次登录 使用 validatingStack 而非 validatingSetupStack ,绕过了 SetupCheckInterceptor 的安装校验 可利用的Action类 以下Action类未正确实现权限检查,可被利用: EditTrustedApplicationAction ViewTrustedApplicationsAction ForceUpgradeAction AttachmentMigrationAction ContentRemigrationAction FlushCacheAction SetupRestoreFileAction SetupRestoreAction - 最终用于重置系统获取管理员权限的关键类 漏洞利用流程 找到未正确实现权限检查的Action类(如 SetupRestoreAction ) 通过 /json 路由访问这些接口,绕过认证和权限检查 使用 SetupRestoreAction 重置系统 获取管理员权限 通过后台上传恶意应用实现RCE 防御措施 及时更新到Atlassian官方发布的安全补丁 限制对Confluence管理界面的访问 实施网络隔离,仅允许必要用户访问Confluence服务 监控异常的系统重置操作 定期审计系统日志,检测可疑活动 总结 CVE-2023-22518漏洞的根源在于Confluence的认证鉴权机制存在设计缺陷,特别是: PermissionCheckInterceptor 的可绕过性 WebSudoInterceptor 的路由检查不严谨 struts.xml 中的路由继承关系导致权限检查被绕过 这些缺陷组合在一起,使得攻击者能够完全绕过认证系统,访问高危操作接口,最终导致系统被完全控制。