115 lines
5.6 KiB
Markdown

# Jira & Confluence
{{#include ../../banners/hacktricks-training.md}}
## Check Privileges
Jira에서 **권한은** 인증된 사용자든 아닌 사용자든 `/rest/api/2/mypermissions` 또는 `/rest/api/3/mypermissions` 엔드포인트를 통해 확인할 수 있습니다. 이러한 엔드포인트는 사용자의 현재 권한을 드러냅니다. **비인증 사용자에게 권한이 있는 경우**는 **보안 취약점**을 나타내며, 이는 **보상**의 대상이 될 수 있습니다. 마찬가지로, **인증된 사용자에게 예상치 못한 권한**이 있는 경우도 **취약점**을 강조합니다.
중요한 **업데이트**가 **2019년 2월 1일**에 이루어졌으며, 'mypermissions' 엔드포인트에 **'permission' 매개변수**를 포함해야 합니다. 이 요구 사항은 쿼리되는 권한을 명시하여 **보안을 강화**하는 것을 목표로 합니다: [check it here](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
- 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`
```bash
#Check non-authenticated privileges
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
```
## 자동화된 열거
- [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
- [https://github.com/bcoles/jira_scan](https://github.com/bcoles/jira_scan)
## Atlassian 플러그인
이 [**블로그**](https://cyllective.com/blog/posts/atlassian-audit-plugins)에서 언급된 바와 같이, [플러그인 모듈에 대한 문서 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/plugin-modules/)에서는 다음과 같은 다양한 유형의 플러그인을 확인할 수 있습니다:
- [REST 플러그인 모듈 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): RESTful API 엔드포인트 노출
- [서블릿 플러그인 모듈 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): 플러그인의 일부로 Java 서블릿 배포
- [매크로 플러그인 모듈 ↗](https://developer.atlassian.com/server/confluence/macro-module/): Confluence 매크로 구현, 즉 매개변수화된 HTML 템플릿
이것은 매크로 플러그인 유형의 예입니다:
```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 ("<h1>Hello " + map.get("Name") + "!</h1>");
} else {
return "<h1>Hello World!<h1>";
}
}
public BodyType getBodyType() { return BodyType.NONE; }
public OutputType getOutputType() { return OutputType.BLOCK; }
}
```
이 플러그인들이 XSS와 같은 일반적인 웹 취약점에 취약할 수 있음을 관찰할 수 있습니다. 예를 들어, 이전 예시는 사용자가 제공한 데이터를 반영하기 때문에 취약합니다.
XSS가 발견되면, [**이 github repo**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence)에서 XSS의 영향을 증가시킬 수 있는 몇 가지 페이로드를 찾을 수 있습니다.
## 백도어 플러그인
[**이 게시물**](https://cyllective.com/blog/posts/atlassian-malicious-plugin)은 악의적인 Jira 플러그인이 수행할 수 있는 다양한 (악의적인) 작업을 설명합니다. [**이 repo에서 코드 예제를 찾을 수 있습니다**](https://github.com/cyllective/malfluence).
악의적인 플러그인이 수행할 수 있는 작업은 다음과 같습니다:
- **관리자로부터 플러그인 숨기기**: 프론트엔드 자바스크립트를 주입하여 악의적인 플러그인을 숨길 수 있습니다.
- **첨부파일 및 페이지 유출**: 모든 데이터에 접근하고 유출할 수 있습니다.
- **세션 토큰 도용**: 응답에서 헤더를 에코하는 엔드포인트를 추가하고, 이를 연락하여 쿠키를 유출하는 자바스크립트를 추가할 수 있습니다.
- **명령 실행**: 물론 코드를 실행하는 플러그인을 생성할 수 있습니다.
- **리버스 셸**: 또는 리버스 셸을 얻을 수 있습니다.
- **DOM 프록시**: 만약 컨플루언스가 사설 네트워크 내에 있다면, 접근 권한이 있는 사용자의 브라우저를 통해 연결을 설정하고 예를 들어 서버 명령을 실행할 수 있습니다.
{{#include ../../banners/hacktricks-training.md}}