WP Manifestindependent plugin directory
manifest / privacy / affiliate-disclosure-pro

Affiliate Disclosure Pro WP Registry grade C-. High-severity findings · 1 findingWP RegistryHigh-severity findings · 1 findingOpen the reportC-

Professional affiliate disclosure management for WordPress with FTC compliance, multiple styles, and per-article overrides.

★ 8stars
18release downloads
v1.2.0latest · 4mo ago

Install

Download affiliate-disclosure-pro.zip From the v1.2.0 release on GitHub, Jun 23, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/kabde/affiliate-disclosure-pro/releases/download/v1.2.0/affiliate-disclosure-pro.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Releases

3 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v1.2.0 latest
Jun 23, 2026 4mo ago
affiliate-disclosure-pro.zip
17
Jun 23, 2026 4mo ago
affiliate-disclosure-pro.zip
0
Jun 21, 2026 4mo ago
affiliate-disclosure-pro.zip
1
C- grade

Security

Affiliate Disclosure Pro 1.2.0 · audited by WP Registry

High-severity findings.

1 high
Audited release
1.2.0
Findings
1
Worst severity
high
Content hash
a65ccdf4e981f808d9483a3a…

Findings

  • high Remote Worker PHP stored in adp_premium_files is eval()'d on every licensed request

    eval_by_design

    After a successful license, adp_download_premium() POSTs the license key to https://dp-starter.khalid.digital/premium and writes the JSON files object to option adp_premium_files. adp_load_premium_code() runs from the main plugin file on every request (front-end included) whenever adp_is_licensed() is true: it re-downloads when transient adp_premium_fresh is missing (daily), AES-256-GCM-decrypts the named 'display' blob with a key derived from the license key (str_pad(substr(strtoupper(str_replace('-','',$key)),0,32),32,'0')), and eval()s the plaintext. There is no public-key signature, hash allow-list, or on-disk reviewed file — AES-GCM only proves the Worker that knows the license key produced the ciphertext, and that Worker can change the PHP at the next refresh without a plugin update. The zip ships settings/metabox/license only; the public disclosure renderer is entirely this eval'd module, so a compromised or malicious Worker is site RCE plus a skimmer-class HTML injection on every disclosed post. A second path from the same host: adp_check_plugin_update() GETs /update-check?product=affiliate-disclosure-pro with no license check and copies data.download_url into the update_plugins transient package field (no zip hash). adp_force_update_check on admin_init (no capability) can delete that transient once per hour, including from unauthenticated admin-ajax.php, accelerating the next fetch. This is vendor DRM rather than a hidden webshell, but it is persistent DB-stored PHP execution scanners will not see in wp-content/plugins.

    inc/license.php:299-354

    Recommendation

    Ship the display PHP in the plugin zip (or extract a signed package onto disk and include those files). Do not eval() option-stored blobs. If remote delivery stays, verify an Ed25519/public-key signature over the plaintext, pin the Worker identity, and fail closed on mismatch. Stop injecting an unsigned download_url into update_plugins; at least require a sha256 of the zip. Gate adp_force_update_check behind manage_options (or remove it).

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.