0x48piraj/jiraffe

GitHub: 0x48piraj/jiraffe

一款专为 Atlassian Jira 实例设计的模块化安全侦查与漏洞利用框架,用于检测错误配置、信息泄露及已知 CVE。

Stars: 204 | Forks: 27

# Jiraffe 🦒

Jiraffe
Jiraffe 🦒 - One stop place for Jira security reconnaissance and exploitation in your proximity

安装    |    用法    |    演示    |    文档

Jiraffe 是一个现代化的 Jira 安全侦查与漏洞利用框架,用于识别 Atlassian Jira 部署中的错误配置、暴露的 API 以及易受攻击的组件。 专为注重准确性、信号质量和清晰架构的安全专业人员而构建。 ## 功能特点 Jiraffe 是一个专为真实 Jira 部署设计的半自动化安全评估框架。 ### 核心亮点 - 模块化的侦查与利用框架 - 被动侦查模块(未授权访问检查、信息泄露和错误配置检测) - 带有安全默认值和兼容性验证的 CVE 验证 - 具备 AWS SSRF 辅助工具(元数据、IAM、自定义目标)的交互式与自动执行模式 - Jira 版本与部署检测 - 区分 Cloud 与 Server/DC,以避免无效或误导性的检查 - 用于脚本和 CI 流程的结构化 JSON 输出 Jiraffe 遵循**侦查优先、利用在后**的模型,严格区分发现与利用阶段,从而保持评估的准确性和可控性。 **模块化设计**与**低噪声默认配置**确保了可扩展性,同时避免了自动执行 shell 或侵入性行为。 这使得 Jiraffe 适用于: - 漏洞赏金侦查 - 内部安全评估 - 红队工具 - 负责任的漏洞验证 ## 安装 使用 pip 安装 **Jiraffe**。这是推荐的运行 Jiraffe 的方式。 ``` $ pip install jiraffe ``` 或者,通过运行以下命令从源码安装 ``` # clone the repo $ git clone https://github.com/0x48piraj/jiraffe.git # 将工作目录更改为 jiraffe $ cd jiraffe # 安装 jiraffe python package $ python3 setup.py install --user # 或者,使用 modern 的方式 $ python3 -m pip install . ``` #### 用法 ``` $ python3 -m jiraffe --help usage: jiraffe [-h] [-t https://jira.company.com] /)/) ( ..\ ___ __ _______ __ _______ _______ _______ /'-._) | || \ / \ / \ / | / | / | /#/ v2.2.0 || ||| | |: | / \ (: ______)(: ______)(: ______) /#/ @03C0 |: ||: | |_____/ ) /' /\ \ \/ | \/ | \/ | ___| / |. | // / // __' \ // ___) // ___) // ___)_ / :|_/ )/\ |\ |: __ \ / / \\ \(: ( (: ( (: | (_______/(__\_|_)|__| \___)(___/ \___)\__/ \__/ \_______) optional arguments: -h, --help show this help message and exit -t https://jira.company.com, --target https://jira.company.com Target Jira instance URL -a, --auto Automatic mode --check-only, --dry-run Only check for vulnerabilities, do not run exploits --list-exploits --cmd CMD Command for CVE-2019-11581 --ssrf SSRF SSRF target URL --user-agent USER_AGENT Custom User-Agent header --severity {LOW,MEDIUM,HIGH,CRITICAL,INFO} Run only exploits of this severity --json Output results in JSON format (for automation / scripting) --insecure Disable TLS certificate verification (allow self-signed HTTPS) -v, --verbose Enable verbose output (debug information) $ python3 -m jiraffe -t https://jira.example.com $ python3 -m jiraffe -t https://jira.example.com --auto $ python3 -m jiraffe --list-exploits ``` ## 文档 详细的文档可在 [wiki](https://github.com/0x48piraj/jiraffe/wiki) 上找到,包括: * [架构与执行流程](https://github.com/0x48piraj/jiraffe/wiki/Architecture-&-Execution-Flow) * [侦查模块开发](https://github.com/0x48piraj/jiraffe/wiki/Recon-Module-Development) * [漏洞利用模块生命周期](https://github.com/0x48piraj/jiraffe/wiki/Exploit-Module-Lifecycle) * [严重性处理与过滤](https://github.com/0x48piraj/jiraffe/wiki/Exploit-Module-Lifecycle#severity-handling) * [机器可读输出与自动化](https://github.com/0x48piraj/jiraffe/wiki/Machine%E2%80%90readable-Output-&-Automation) * [报告与使用](https://github.com/0x48piraj/jiraffe/blob/master/security.md) * [支持的 CVE 与验证](https://github.com/0x48piraj/jiraffe/wiki/Supported-CVEs-&-Validation) * [威胁模型](https://github.com/0x48piraj/jiraffe/wiki/Threat-Model) ## 侦查模块 | 模块 | 严重性 | 摘要 | |--------|----------|---------| | Jira Dev Mode Enabled | LOW | 检测是否启用了 Jira 开发模式,这可能会暴露调试功能 | | Query Component Field Disclosure | LOW | 识别无需身份验证即可访问的暴露的 Query Component 字段 | | Service Desk Signup Enabled | MEDIUM | 检查可公开访问的 Service Desk 注册,可能允许未经授权创建账户 | | Unauthenticated Admin Menu | INFO | 检测无需身份验证的管理菜单是否存在 | | Unauthenticated Dashboards | INFO | 枚举无需身份验证即可访问的仪表板 | | Unauthenticated Gadget Configuration | LOW | 识别暴露的 gadget 配置 endpoint | | Unauthenticated Group Picker | INFO | 检查对 group picker 功能的未授权访问 | | Unauthenticated Popular Filters | INFO | 枚举无需身份验证即可访问的流行过滤器 | | Unauthenticated Project Categories | LOW | 识别通过未授权访问暴露的项目分类 | | Unauthenticated Projects API | LOW | 使用未授权的 Projects API 枚举项目 | | Unauthenticated Resolutions API | INFO | 检测对问题解决方式的未授权访问 | | Unauthenticated Screens API | LOW | 识别暴露的 Screens API endpoint | | Unauthenticated User Picker | INFO | 检查对 user picker 功能的未授权访问 | | User Registration Enabled | MEDIUM | 检测是否启用了未经身份验证的用户自注册功能 | ## 支持的漏洞 | CVE | 严重性 | 影响范围 | 摘要 | 参考 | |-----|----------|----------|---------|------------| | CVE-2017-9506 | HIGH | < 7.3.5 | OAuth `IconUriServlet` SSRF 导致内网访问和 XSS | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2017-9506) · [Atlassian](https://jira.atlassian.com/browse/JRASERVER-65862) | | CVE-2018-20824 | HIGH | - | Wallboard 仪表板 XSS | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2018-20824) | | CVE-2018-5230 | HIGH | - | 通过 Velocity 模板 (`.vm`) 的反射型 XSS | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2018-5230) | | CVE-2019-11581 | CRITICAL | < 7.6.14 | Velocity 模板注入导致远程代码执行 (RCE) | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2019-11581) · [Atlassian](https://jira.atlassian.com/browse/JRASERVER-69532) | | CVE-2019-3396 | CRITICAL | - | Tinymce macro 只读路径遍历 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2019-3396) | | CVE-2019-3402 | HIGH | - | Labels gadget XSS | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2019-3402) | | CVE-2019-3403 | LOW | - | 未授权 REST 用户枚举 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2019-3403) | | CVE-2019-8442 | LOW | - | Jira Maven `POM.xml` 泄露 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2019-8442) | | CVE-2019-8443 | LOW | - | 通过备用路径的 Jira Maven `POM.xml` 泄露 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2019-8443) | | CVE-2019-8449 | LOW | 2.1 - 8.3.4 | 通过 GroupUserPicker API 进行未授权用户名枚举 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2019-8449) · [Atlassian](https://jira.atlassian.com/browse/JRASERVER-69796) | | CVE-2019-8451 | HIGH | >=7.6.0,<7.13.9 and >=8.0.0,<8.4.0 | 通过 gadgets `makeRequest` 进行预认证 SSRF | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2019-8451) · [Atlassian](https://jira.atlassian.com/browse/JRASERVER-69793) | | CVE-2020-14178 | LOW | - | 未授权项目存在性泄露 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2020-14178) | | CVE-2020-14179 | LOW | - | 通过 `QueryComponent!Default.jspa` 资源泄露 QueryComponent | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2020-14179) | | CVE-2020-14181 | LOW | - | 通过 `ViewUserHover.jspa` 资源泄露 User hover | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2020-14181) | | CVE-2020-36287 | LOW | - | Gadget 偏好暴力破解泄露 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2020-36287) | | CVE-2020-36289 | MEDIUM | - | `QueryComponentRendererValue` 信息泄露 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2020-36289) |
CVE-2019-11581: 服务器端模板注入 (RCE) **POC** **组件** - ContactAdministrators 操作 - SendBulkMail 操作 - Velocity 模板渲染 pipeline **漏洞类型** - 服务器端模板注入 (SSTI) **影响** - 远程代码执行 (RCE) **攻击面** - 未授权(当启用 Contact Administrators 表单时) - 已授权(如果禁用表单,则需要 JIRA Administrators 角色) **利用前提条件** 至少必须满足以下条件之一: - 配置了 SMTP 服务器**并且**启用了 *Contact Administrators* 表单 - 配置了 SMTP 服务器**并且**攻击者拥有 *JIRA Administrators* 权限 **根本原因** - 在 Velocity 模板中对用户可控输入的不安全评估 - 在模板执行前输入清理不足 **受影响版本** - Jira Server / Data Center **4.4.0 ≤ version < 7.6.14** - Jira Server / Data Center **7.7.0 ≤ version < 7.13.5** - Jira Server / Data Center **8.0.0 ≤ version < 8.0.3** - Jira Server / Data Center **8.1.0 ≤ version < 8.1.2** - Jira Server / Data Center **8.2.0 ≤ version < 8.2.3** **已修复版本** - 7.6.14 (LTS) - 7.13.5 (LTS) - 8.0.3 - 8.1.2 - 8.2.3 - 8.3.0+ **严重性** - 严重 (CVSS High) **备注** 成功利用该漏洞可在 Jira 应用主机上执行任意代码,导致系统被全面攻破。 **参考** - Atlassian 安全公告: JRASERVER-69532
上述大多数漏洞都具有服务器端请求伪造 (SSRF) 漏洞,攻击者可以滥用服务器上的特定功能来读取或更新内部资源。攻击者可以提供或修改服务器上运行的代码将读取或向其提交数据的 URL,通过精心选择 URL,攻击者可能能够读取服务器配置(例如 AWS metadata)、连接到内部服务(例如启用 HTTP 的数据库),或者向不打算暴露的内部服务发送 POST 请求。 目前,包含了一些常见的 Amazon AWS 凭据泄露攻击,并提供了额外的**自定义 Payload 选项**,用于为任何云平台(Amazon AWS、Google Cloud 等)发送精心构造的 payload。要发送自定义 payload,请参考 [PayloadsAllTheThings — SSRF URL for Cloud Instances](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery#ssrf-url-for-cloud-instances)。欢迎自由实现更多针对特定供应商部署的后续利用模块。要了解底层原理,请阅读 [wiki](https://github.com/0x48piraj/jiraffe/wiki/Internals)。 ## 侦查模块 除了漏洞利用之外,Jiraffe 还包含一个模块化的**侦查(辅助)框架**,用于结构化信息收集和微弱信号检测。 侦查模块是**非利用性**检查,旨在识别可能促成或影响漏洞利用的条件,而不会主动攻击目标。 ### 侦查模块涵盖的内容 侦查模块通常属于以下类别之一: - **未授权访问检查:** 无需身份验证即可访问的 endpoint 或资源。 - **信息泄露:** 版本泄露、配置暴露、Banner、元数据或其他被动信号。 - **错误配置 / 薄弱设置:** 不安全的默认设置、暴露的服务或部署弱点。 ### 架构 侦查模块位于: ``` jiraffe/recons/ ``` 每个模块都作为 `ReconModule` 的子类实现,提供与漏洞利用模块类似的一致接口和生命周期,同时与利用逻辑严格分离。 这种辅助式设计允许侦查功能独立扩展,复用与漏洞利用相同的模块化发现模型,而无需将侦查与利用耦合。 ## 演示 以下是典型的 Jiraffe 工作流程,展示了目标检测、侦查和受控的漏洞利用验证。

Jiraffe Demo

## 测试 测试位于包旁边,即测试不是包的一部分,而是仓库的一部分。原因仅仅是为了保持包体积小巧。 **运行单元测试** ``` $ python3 -m unittest --verbose # Python 3 and up ``` ## 法律声明 Jiraffe 旨在用于授权的安全测试和防御性研究。仅评估您拥有或获得明确测试许可的系统。本项目遵循负责任的披露原则,旨在提高 Jira 部署的整体安全状况。 本项目属于[个人开发](https://en.wikipedia.org/wiki/Personal_development)。请尊重其理念,不要将其用于恶意用途。使用 Jiraffe 即表示您同意仓库中包含的 MIT 许可证。更多详情请参阅 [The MIT License — OpenSource](https://opensource.org/licenses/MIT)。 未经双方事先同意使用 Jiraffe 攻击目标是非法的。遵守所有适用的地方、州和联邦法律是最终用户的责任。开发者不承担任何责任,也不对由该程序造成的任何误用或损坏负责。 ## 许可证 本项目根据 MIT 许可证授权。
标签:Homebrew安装, Jira, Python, XXE攻击, 内存取证对抗, 实时处理, 密码管理, 无后门, 逆向工具