WP Manifestindependent plugin directory
manifest / builders / art-elements

Art Elements WP Registry grade B. Medium-severity findings · 1 findingWP RegistryMedium-severity findings · 1 findingOpen the reportB

Light-версия Elements от Kadence Pro

★ 0stars
13release downloads
≈10active sites
1.0.2latest · 8mo ago

Install

Download art-elements.zip From the 1.0.2 release on GitHub, Feb 25, 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/artikus11/art-elements/releases/download/1.0.2/art-elements.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Добавление элементов на хуки.

Changelog

= 1.0.0 =

  • Релиз

Releases

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

Tag
Published
Assets
Downloads
1.0.2 latest
Feb 25, 2026 8mo ago
art-elements.zip
4
Feb 25, 2026 8mo ago
art-elements.zip
2
Jun 3, 2023 3 years ago
art-elements.zip
7

Active-site estimate ≈10 comes from the median of recent superseded releases. Method.

B grade

Security

Art Elements 1.0.2 · audited by WP Registry

Medium-severity findings.

1 medium
Audited release
1.0.2
Findings
1
Worst severity
medium
Content hash
5fb31428e1879e927ca09d6e…

Findings

  • medium Author+ can inject HTML onto arbitrary frontend hooks via the Elements CPT

    missing_capability

    register_post_type('ae_element') leaves capability_type at the default 'post' (the Kadence-style ['kadence_element','kadence_elements'] pair is commented out) with map_meta_cap true, show_ui/show_in_menu/show_in_rest true. Any role with publish_posts (Author, Editor, Administrator) can therefore create a published element from wp-admin or POST /wp/v2/ae_element. Metabox::save_metabox (save_post_ae_element) then writes the attacker-chosen hook name from $_POST['_ae_element_fields_hook_custom'] after sanitize_text_field, gated only by edit_post/edit_page on that object — not manage_options or a dedicated cap — and never calls wp_verify_nonce on the ainsys_template_inner field it prints. On the front end, Controller::init_frontend_hooks (wp priority 99; the apply_filters('ae_element_display', check_element_conditionals(...)) limiter is commented out) loads every published ae_element and add_action()s the stored hook (or the 'custom' alias) to output_element, which echoes apply_filters('ae_the_content', $post->post_content) with do_blocks/do_shortcode and no wp_kses_post. Observable: an Author sets Hook Name to wp_footer or woocommerce_before_checkout_form, publishes, and kses-allowed markup (links, images, layout HTML) appears on every matching public request, including pages and checkout they cannot edit. Users without unfiltered_html cannot store <script> (core kses on save); this is site-wide content injection / defacement, not Subscriber XSS. Fix: restore a dedicated capability_type (or require edit_theme_options/manage_options), verify the metabox nonce, re-enable display conditionals, and kses output unless the author has unfiltered_html.

    classes/class-cpt.php:190-217

    Recommendation

    Give ae_element a dedicated capability_type (or cap_type page / manage_options) so Author/Contributor cannot publish site-wide injections; map those caps only onto trusted roles. In save_metabox, wp_verify_nonce('ainsys_template_inner') and keep current_user_can on the element. Restore the check_element_conditionals / ae_element_display gate before add_action. Escape or wp_kses_post frontend output unless the storing user had unfiltered_html. Allow-list hook names instead of passing the metabox string straight to add_action.

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.