

Une analyse statique de code pour les plugins/thèmes WordPress (et PHP)
Clonez simplement le dépôt, installez les dépendances et exécutez le script.
$ git clone https://github.com/webarx-security/wpbullet wpbullet$ cd wpbullet$ pip install -r requirements.txt$ python wpbullet.pyOptions disponibles :
--path (required) System path or download URL
Examples:
--path="/path/to/plugin"
--path="https://wordpress.org/plugins/example-plugin"
--path="https://downloads.wordpress.org/plugin/example-plugin.1.5.zip"
--enabled (optional) Check only for given modules, ex. --enabled="SQLInjection,CrossSiteScripting"
--disabled (optional) Don't check for given modules, ex. --disabled="SQLInjection,CrossSiteScripting"
--cleanup (optional) Automatically remove content of .temp folder after scanning remotely downloaded plugin (boolean)
--report (optional) Saves result inside reports/ directory in JSON format (boolean)
$ python wpbullet.py --path="/var/www/wp-content/plugins/plugin-name"
La création d'un module est flexible et permet de surcharger les méthodes BaseClass pour chaque module, ainsi que de créer ses propres méthodes.
Chaque module dans le répertoire Modules implémente les propriétés et méthodes de core.modules.BaseClass. Ainsi, le paramètre requis pour chaque module est BaseClass.
Une fois créé, le module doit être importé dans modules/__init__.py. Le nom du module et celui de la classe doivent être cohérents pour que le module soit chargé.
Si vous ouvrez une pull request pour ajouter un nouveau module, veuillez également fournir des tests unitaires pour votre module.
Modules/ExampleVulnerability.py
from core.modules import BaseClass
class ExampleVulnerability(object):
# Vulnerability name
name = "Cross-site Scripting"
# Vulnerability severity
severity = "Low-Medium"
# Functions causing vulnerability
functions = [
"print"
"echo"
]
# Functions/regex that prevent exploitation
blacklist = [
"htmlspecialchars",
"esc_attr"
]
Le motif regex est généré dans core.modules.BaseClass.build_pattern et peut donc être surchargé dans chaque classe de module.
Modules/ExampleVulnerability.py
import copy
...
# Build dynamic regex pattern to locate vulnerabilities in given content
def build_pattern(self, content, file):
user_input = copy.deepcopy(self.user_input)
variables = self.get_input_variables(self, content)
if variables:
user_input.extend(variables)
if self.blacklist:
blacklist_pattern = r"(?!(\s?)+(.*(" + '|'.join(self.blacklist) + ")))"
else:
blacklist_pattern = ""
self.functions = [self.functions_prefix + x for x in self.functions]
pattern = r"((" + '|'.join(self.functions) + ")\s{0,}\(?\s{0,1}" + blacklist_pattern + ".*(" + '|'.join(user_input) + ").*)"
return pattern
Exécution des tests unitaires : $ python3 -m unittest