

Un'analisi statica del codice per plugin e temi WordPress (e PHP)
Basta clonare il repository, installare i requisiti ed eseguire lo script
$ git clone https://github.com/webarx-security/wpbullet wpbullet$ cd wpbullet$ pip install -r requirements.txt$ python wpbullet.pyOpzioni disponibili:
--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 creazione di un modulo è flessibile e consente di sovrascrivere i metodi della BaseClass per ogni modulo, oltre a creare i propri metodi.
Ogni modulo nella directory Modules implementa proprietà e metodi di core.modules.BaseClass;
quindi il parametro richiesto per ogni modulo è BaseClass.
Una volta creato, il modulo deve essere importato in modules/__init__.py. Il nome del modulo e della classe devono essere coerenti
affinché il modulo possa essere caricato.
Se stai aprendo una pull request per aggiungere un nuovo modulo, fornisci anche gli unit test per il tuo modulo.
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"
]
Il pattern regex viene generato in core.modules.BaseClass.build_pattern e pertanto può essere sovrascritto in ciascuna classe di modulo.
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
Esecuzione degli unit test: $ python3 -m unittest