Redux Framework est un script de structure de code permettant de créer facilement des pages d’options stylisées et apportant ses propres fonctionnalités.
Les versions 3.5.6.8 est antérieures sont victimes d’une escalade de privilège, le scénario de l’exploit n’est pas très courant, voici les pré-requis pour être touché:
- Avoir le thème actif utilisant Redux Framework,
- Avoir un plugin actif utilisant Redux Framework,
- Avoir un membre ayant un rôle n’ayant pas la capacité
manage_options
, mais ayant tout de mêmeedit_theme_options
.
Le code en question se trouve dans le fichier /ReduxCore/framework.php
:
[pastacode lang=”php” message=”” highlight=”” provider=”manual” manual=”%20%20%20%20%20%20%20%20%20%20%20%20public%20function%20ajax_save()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(%20!%20wp_verify_nonce(%20%24_REQUEST%5B’nonce’%5D%2C%20%22redux_ajax_nonce%22%20)%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20json_encode(%20array(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20’status’%20%3D%3E%20__(%20’Invalid%20security%20credential.%20%20Please%20reload%20the%20page%20and%20try%20again.’%2C%20’redux-framework’%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20’action’%20%3D%3E%20”%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%20)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20die()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%2F%2F%20…”/]
L’action redux_ajax_nonce
est la même pour un thème ou un plugin, le jeton sera alors le même.
Le membre capable de toucher les options du thèmes ne peut théoriquement pas modifier les options d’un plugin.
Cependant le jeton de sécurité (nonce) est le même pour chaque instance du framework, ce qui signifie que le membre n’ayant pas la capacité manage_options
peut tout de même envoyer une requête contenant les nouveaux paramètres du plugin qui utilise aussi Redux Framework puisqu’il connait son jeton de sécurité.
La version 3.5.6.9 corrige ce jeton en lui ajoutant le nom de l’option à sauvegarder (ne peut être identique entre le thème et un plugin).