Notification : BuddyPress Security & Risk Analysis

wordpress.org/plugins/notification-buddypress

Notification triggers for BuddyPress

90 active installs v3.0.0 PHP + WP 4.9+ Updated Aug 25, 2025
buddypressemailmailnotificationnotify
100
A · Safe
CVEs total0
Unpatched0
Last CVENever
Safety Verdict

Is Notification : BuddyPress Safe to Use in 2026?

Generally Safe

Score 100/100

Notification : BuddyPress has no known CVEs and is actively maintained. It's a solid choice for most WordPress installations.

No known CVEs Updated 7mo ago
Risk Assessment

The "notification-buddypress" v3.0.0 plugin exhibits a mixed security posture. On one hand, the absence of known CVEs and a clean vulnerability history are positive indicators of ongoing maintenance and security awareness. Furthermore, the plugin exclusively uses prepared statements for SQL queries, which is a strong defense against SQL injection vulnerabilities.

However, significant concerns arise from the static code analysis. The presence of 110 dangerous functions, including functions like `exec`, `system`, and `shell_exec`, points to a high potential for privilege escalation and remote code execution if any of these functions are triggered with user-controlled input. While the taint analysis reported no critical or high severity flows, the fact that all 4 analyzed flows had unsanitized paths is alarming and suggests a potential for exploitation, even if not currently manifesting as severe vulnerabilities.

The lack of capability checks on any entry points is a critical oversight, meaning that potentially sensitive actions could be performed by unauthenticated or low-privileged users. While the attack surface is reported as zero, this is contradicted by the presence of dangerous functions that could be invoked in various ways. The 74% proper output escaping is also a point of concern, leaving room for cross-site scripting (XSS) vulnerabilities. The overall security is weakened by these code-level risks, despite the positive historical data.

Key Concerns

  • High number of dangerous functions
  • All taint flows have unsanitized paths
  • No capability checks on entry points
  • Moderate output escaping percentage
Vulnerabilities
None known

Notification : BuddyPress Security Vulnerabilities

No known vulnerabilities — this is a good sign.
Code Analysis
Analyzed Mar 16, 2026

Notification : BuddyPress Code Analysis

Dangerous Functions
110
Raw SQL Queries
0
17 prepared
Unescaped Output
6
17 escaped
Nonce Checks
1
Capability Checks
0
File Operations
306
External Requests
2
Bundled Libraries
0

Dangerous Functions Found

assertassert(is_string($name));dependencies\composer\class-map-generator\src\PhpFileParser.php:84
assertassert($this->composer instanceof Composer);dependencies\composer\composer\src\Composer\Command\BaseCommand.php:107
execif (exec('which '.$candidate)) {dependencies\composer\composer\src\Composer\Command\ConfigCommand.php:240
systemsystem($editor . ' ' . $file . (Platform::isWindows() ? '' : ' > `tty`'));dependencies\composer\composer\src\Composer\Command\ConfigCommand.php:251
assertassert(is_string($match['name']));dependencies\composer\composer\src\Composer\Command\InitCommand.php:476
execexec('fltmc.exe filters', $output, $exitCode);dependencies\composer\composer\src\Composer\Command\SelfUpdateCommand.php:587
execexec('"'.$script.'"');dependencies\composer\composer\src\Composer\Command\SelfUpdateCommand.php:637
assertassert(isset($versions));dependencies\composer\composer\src\Composer\Command\ShowCommand.php:334
assertassert(is_string($require['name']));dependencies\composer\composer\src\Composer\Command\ShowCommand.php:1341
assertassert(is_string($require['version']));dependencies\composer\composer\src\Composer\Command\ShowCommand.php:1342
assertassert(is_string($match[1]));dependencies\composer\composer\src\Composer\Config.php:537
assertassert(is_string($matches[1]));dependencies\composer\composer\src\Composer\Console\HtmlOutputFormatter.php:87
assertassert(count($urls) > 0);dependencies\composer\composer\src\Composer\Downloader\FileDownloader.php:155
assertassert($this->composer instanceof Composer, new \LogicException('This should only be reached with a dependencies\composer\composer\src\Composer\EventDispatcher\EventDispatcher.php:134
assertassert($this->composer instanceof Composer, new \LogicException('This should only be reached with a dependencies\composer\composer\src\Composer\EventDispatcher\EventDispatcher.php:153
assertassert($this->composer instanceof Composer, new \LogicException('This should only be reached with a dependencies\composer\composer\src\Composer\EventDispatcher\EventDispatcher.php:171
assertassert(is_string($path[0]));dependencies\composer\composer\src\Composer\EventDispatcher\EventDispatcher.php:392
assertassert($this->composer instanceof Composer, new \LogicException('This should only be reached with a dependencies\composer\composer\src\Composer\EventDispatcher\EventDispatcher.php:580
assertassert($this->downloadManager instanceof DownloadManager, new \LogicException(self::class.' should bdependencies\composer\composer\src\Composer\Installer\LibraryInstaller.php:346
assertassert($this->composer instanceof Composer, new \LogicException(self::class.' should be initialized dependencies\composer\composer\src\Composer\Installer\PluginInstaller.php:139
assertassert(is_string($matches[1]));dependencies\composer\composer\src\Composer\IO\BufferIO.php:60
assertassert(is_string($matches[2]));dependencies\composer\composer\src\Composer\IO\BufferIO.php:61
assertassert(is_string($match[1]));dependencies\composer\composer\src\Composer\Json\JsonFormatter.php:76
assertassert(is_string($match[2]));dependencies\composer\composer\src\Composer\Json\JsonFormatter.php:77
assertassert(is_string($matches['start']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:79
assertassert(is_string($matches['value']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:80
assertassert(is_string($matches['end']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:81
assertassert(is_string($packageMatches['package']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:89
assertassert(is_string($match['start']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:271
assertassert(is_string($match['content']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:272
assertassert(is_string($match['end']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:273
assertassert(is_string($match['start']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:368
assertassert(is_string($match['content']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:369
assertassert(is_string($match['end']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:370
assertassert(is_string($match));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:396
assertassert(is_string($matches['content']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:442
assertassert(is_string($matches['start']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:513
assertassert(is_string($matches['removal']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:514
assertassert(is_string($matches['end']));dependencies\composer\composer\src\Composer\Json\JsonManipulator.php:515
assertassert(is_string($match[0]));dependencies\composer\composer\src\Composer\Package\Version\VersionBumper.php:102
assertassert(is_string($matches[1]));dependencies\composer\composer\src\Composer\Package\Version\VersionGuesser.php:414
assertassert(null !== $this->globalComposer);dependencies\composer\composer\src\Composer\Plugin\PluginManager.php:566
assertassert($baseUrl !== '');dependencies\composer\composer\src\Composer\Repository\ComposerRepository.php:185
assertassert(is_string($match[3]));dependencies\composer\composer\src\Composer\Repository\Vcs\GitHubDriver.php:71
assertassert(is_string($match[4]));dependencies\composer\composer\src\Composer\Repository\Vcs\GitHubDriver.php:72
assertassert(is_string($match['parts']));dependencies\composer\composer\src\Composer\Repository\Vcs\GitLabDriver.php:105
assertassert(is_string($match['repo']));dependencies\composer\composer\src\Composer\Repository\Vcs\GitLabDriver.php:106
assertassert(is_string($match['parts']));dependencies\composer\composer\src\Composer\Repository\Vcs\GitLabDriver.php:574
assertassert(is_string($match['repo']));dependencies\composer\composer\src\Composer\Repository\Vcs\GitLabDriver.php:575
assertassert($url !== '');dependencies\composer\composer\src\Composer\Util\ComposerMirror.php:48
assertassert(is_string($m[0]));dependencies\composer\composer\src\Composer\Util\Filesystem.php:616
assertassert($sourceHandle !== false, 'Could not open "'.$source.'" for reading.');dependencies\composer\composer\src\Composer\Util\Filesystem.php:913
assertassert($targetHandle !== false, 'Could not open "'.$target.'" for writing.');dependencies\composer\composer\src\Composer\Util\Filesystem.php:915
assertassert($aHandle !== false, 'Could not open "'.$a.'" for reading.');dependencies\composer\composer\src\Composer\Util\Filesystem.php:938
assertassert($bHandle !== false, 'Could not open "'.$b.'" for reading.');dependencies\composer\composer\src\Composer\Util\Filesystem.php:940
assertassert(isset($job['resolve']));dependencies\composer\composer\src\Composer\Util\HttpDownloader.php:321
assertassert(isset($job['reject']));dependencies\composer\composer\src\Composer\Util\HttpDownloader.php:322
assertassert(isset($this->jobs[$index]['exception']));dependencies\composer\composer\src\Composer\Util\HttpDownloader.php:426
assertassert(is_string($matches['var']));dependencies\composer\composer\src\Composer\Util\Platform.php:108
assertassert('' !== $matches['var']);dependencies\composer\composer\src\Composer\Util\Platform.php:109
assertassert(is_string($m['user']));dependencies\composer\composer\src\Composer\Util\ProcessExecutor.php:463
assertassert($downloader instanceof DownloaderInterface || $downloader instanceof DownloadManager);dependencies\composer\composer\src\Composer\Util\SyncHelper.php:40
assertassert($url !== '');dependencies\composer\composer\src\Composer\Util\Url.php:63
assertassert(is_string($m['user']));dependencies\composer\composer\src\Composer\Util\Url.php:118
proc_open$process = proc_open($cmd, [], $pipes);dependencies\composer\xdebug-handler\src\XdebugHandler.php:302
assertassert(\is_callable($canceller));dependencies\react\promise\src\functions.php:40
assertassert($callback instanceof \Closure || \is_string($callback));dependencies\react\promise\src\functions.php:279
assertassert($typeToMatch instanceof \ReflectionNamedType);dependencies\react\promise\src\functions.php:321
assertassert(isset($matches));dependencies\react\promise\src\functions.php:327
assertassert($type instanceof \ReflectionNamedType);dependencies\react\promise\src\functions.php:329
assertassert(\method_exists($cancellable, 'cancel'));dependencies\react\promise\src\Internal\CancellationQueue.php:51
assertassert($parent instanceof self);dependencies\react\promise\src\Promise.php:70
assertassert($callback instanceof \Closure || \is_string($callback));dependencies\react\promise\src\Promise.php:269
assertassert(isset($symbol));dependencies\seld\jsonlint\src\Seld\JsonLint\JsonParser.php:261
assertassert(isset($symbol));dependencies\seld\jsonlint\src\Seld\JsonLint\JsonParser.php:350
assertassert(\is_array($this->vstack[$len]));dependencies\seld\jsonlint\src\Seld\JsonLint\JsonParser.php:469
assertassert(\is_array($this->vstack[$len]));dependencies\seld\jsonlint\src\Seld\JsonLint\JsonParser.php:484
assertassert(\is_array($this->vstack[$len-2]));dependencies\seld\jsonlint\src\Seld\JsonLint\JsonParser.php:486
assertassert($this->vstack[$len-2] instanceof stdClass);dependencies\seld\jsonlint\src\Seld\JsonLint\JsonParser.php:510
assertassert(\is_array($this->vstack[$len-2]));dependencies\seld\jsonlint\src\Seld\JsonLint\JsonParser.php:549
proc_open$process = proc_open($command, $descriptorspec, $pipes);dependencies\seld\phar-utils\src\Linter.php:71
unserialize$value = unserialize($value);dependencies\symfony\cache\Adapter\ArrayAdapter.php:381
unserializeself::$signalingException ?? self::$signalingException = unserialize("O:9:\"Exception\":1:{s:16:\"\0dependencies\symfony\cache\LockRegistry.php:102
unserializeif (false !== $value = unserialize($value)) {dependencies\symfony\cache\Marshaller\DefaultMarshaller.php:82
shell_exec$sttyMode = shell_exec('stty -g');dependencies\symfony\console\Application.php:1009
shell_execshell_exec('stty '.$sttyMode);dependencies\symfony\console\Application.php:1013
proc_open$isTtySupported = (bool) @proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/dependencies\symfony\console\Cursor.php:189
shell_exec$sttyMode = shell_exec('stty -g');dependencies\symfony\console\Cursor.php:196
shell_execshell_exec('stty -icanon -echo');dependencies\symfony\console\Cursor.php:197
shell_execshell_exec(sprintf('stty %s', $sttyMode));dependencies\symfony\console\Cursor.php:203
shell_exec$sttyMode = shell_exec('stty -g');dependencies\symfony\console\Helper\QuestionHelper.php:267
shell_execshell_exec('stty -icanon -echo');dependencies\symfony\console\Helper\QuestionHelper.php:273
shell_execshell_exec('stty '.$sttyMode);dependencies\symfony\console\Helper\QuestionHelper.php:288
shell_execshell_exec('stty '.$sttyMode);dependencies\symfony\console\Helper\QuestionHelper.php:393
shell_exec$sExec = shell_exec('"'.$exe.'"');dependencies\symfony\console\Helper\QuestionHelper.php:433
shell_exec$sttyMode = shell_exec('stty -g');dependencies\symfony\console\Helper\QuestionHelper.php:445
shell_execshell_exec('stty -echo');dependencies\symfony\console\Helper\QuestionHelper.php:446
shell_execshell_exec('stty '.$sttyMode);dependencies\symfony\console\Helper\QuestionHelper.php:454
shell_execreturn self::$stty = (bool) shell_exec('stty 2> '.('\\' === \DIRECTORY_SEPARATOR ? 'NUL' : '/dev/nuldependencies\symfony\console\Terminal.php:74
proc_open$process = proc_open($command, $descriptorspec, $pipes, null, null, ['suppress_errors' => true]);dependencies\symfony\console\Terminal.php:163
execif ($php = strtok(exec($command.' '.escapeshellarg($php)), \PHP_EOL)) {dependencies\symfony\process\PhpExecutableFinder.php:41
proc_open$this->process = @proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envdependencies\symfony\process\Process.php:355
proc_open$isTtySupported = (bool) @proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/dependencies\symfony\process\Process.php:1263
proc_openreturn $result = (bool) @proc_open('echo 1 >/dev/null', [['pty'], ['pty'], ['pty']], $pipes);dependencies\symfony\process\Process.php:1286
execexec(sprintf('taskkill /F /T /PID %d 2>&1', $pid), $output, $exitCode);dependencies\symfony\process\Process.php:1525
proc_open} elseif ($ok = proc_open(sprintf('kill -%d %d', $signal, $pid), [2 => ['pipe', 'w']], $pipes)) {dependencies\symfony\process\Process.php:1538
unserialize$wrappedInstance = [unserialize('C:'.\strlen($class).':"'.$class.'":0:{}')];dependencies\symfony\var-exporter\Instantiator.php:71
unserialize$wrappedInstance = [unserialize('O:'.\strlen($class).':"'.$class.'":0:{}')];dependencies\symfony\var-exporter\Instantiator.php:73
unserialize$objects[$k] = unserialize($v);dependencies\symfony\var-exporter\Internal\Registry.php:45
unserialize$proto = @unserialize($proto.\strlen($class).':"'.$class.'":0:{}');dependencies\symfony\var-exporter\Internal\Registry.php:96

SQL Query Safety

100% prepared17 total queries

Output Escaping

74% escaped23 total outputs
Data Flows
4 unsanitized

Data Flow Analysis

4 flows4 with unsanitized paths
execute (dependencies\composer\composer\src\Composer\Command\SelfUpdateCommand.php:83)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface

Notification : BuddyPress Attack Surface

Entry Points0
Unprotected0
WordPress Hooks 9
actionnotification/initcompat\register-hooks.php:13
actioninitcompat\register-hooks.php:14
actionnotification/settings/registercompat\register-hooks.php:15
actionnotification/settings/registercompat\register-hooks.php:16
filterbp_notifications_get_registered_componentscompat\register-hooks.php:17
filterbp_notifications_get_notifications_for_usercompat\register-hooks.php:18
actionadmin_noticesdependencies\micropackage\requirements\src\Requirements.php:267
actionnotification/initload.php:18
actionnotification/initnotification-buddypress.php:108
Maintenance & Trust

Notification : BuddyPress Maintenance & Trust

Maintenance Signals

WordPress version tested6.8.5
Last updatedAug 25, 2025
PHP min version
Downloads4K

Community Trust

Rating0/100
Number of ratings0
Active installs90
Developer Profile

Notification : BuddyPress Developer Profile

Kuba Mikita

9 plugins · 51K total installs

76
trust score
Avg Security Score
95/100
Avg Patch Time
237 days
View full developer profile
Detection Fingerprints

How We Detect Notification : BuddyPress

Patterns used to identify this plugin on WordPress sites during automated security audits and web crawling.

Asset Fingerprints

Asset Paths
/wp-content/plugins/notification-buddypress/assets/css/main.css/wp-content/plugins/notification-buddypress/assets/js/main.js
Script Paths
/wp-content/plugins/notification-buddypress/assets/js/main.js
Version Parameters
/wp-content/plugins/notification-buddypress/assets/css/main.css?ver=/wp-content/plugins/notification-buddypress/assets/js/main.js?ver=

HTML / DOM Fingerprints

FAQ

Frequently Asked Questions about Notification : BuddyPress