WP Manifestindependent plugin directory
manifest / events / umich-events

University of Michigan: Events WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

Wordpress widget to get and display events from events.umich.edu.

★ 5stars
39release downloads
1.4.2latest · 4mo ago

Install

Download umich-events-1.4.2.zip From the 1.4.2 release on GitHub, Jun 17, 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/umdigital/umich-events/releases/download/1.4.2/umich-events-1.4.2.zip
Updates itself. It ships its own updater (Update URI header), so new versions appear under Dashboard → Updates.

Wordpress widget to get and display events from http://events.umich.edu.

Using default options will be slow when requesting data from events.umich.edu. It is highly recommended to use at least one filtering option (featured, ongoing, tags, types, groups, locations) to increase the events request speed.

Features

Widget

  • Unstyled so you can make it your own as easy as possible
  • Display event image, caches local resized copy for optimal performance, cached for 7 days
  • Caches feed for 5 minutes to improve performance
  • Ability to specify Tags, Groups, & Locations to display events for
  • Customize event template in your theme
    • THEME/umich-events/widget.tpl
    • THEME/umich-events/event-widget.tpl

Shortcode

[umichevents showimage="0" imagesize="full" featured="0" ongoing="0" tags="" types="" groups="" locations="" morelink="0" morelinktext="See all events" limit="25"]
  • Override templates in your theme
    • THEME/umich-events/shortcode.tpl (list of events, loads single event template)
    • THEME/umich-events/event-shortcode.tpl (single event)

Shortcode options

Option Values Default
showimage 1, 0 0
imagesize string full
featured 1, 0 0
ongoing 1, 0 0
tags string list null
types num list null
groups num list null
locations num list null
wraptpl string shortcode
eventtpl string event-shortcode
morelink 1, 0 0
morelinktext string See all events
limit number 25

lists are comma seperated

Template variables

To Do

  • Admin interface for cache timeouts
    • Feed Timeout (currently 5 min), minimum 1 minute
    • Image Timeout (currently 7 days), minimum 1 day
    • Meta Timeout (currently 7 days), minimum 1 day
  • Multisite support
    • Network admin cache management
    • Network admin cache storage (single or per site)

Releases

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

Tag
Published
Assets
Downloads
1.4.2 latest
Jun 17, 2026 4mo ago
umich-events-1.4.2.zip
20
Sep 19, 2025 1 year ago
umich-events-1.4.1.zip
11
Aug 28, 2025 1 year ago
umich-events-1.4.0.zip
4
Jun 25, 2025 1 year ago
umich-events-1.3.4.zip
3
Jun 23, 2025 1 year ago
umich-events-1.3.3.zip
1
D+ grade

Security

University of Michigan: Events 1.4.2 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
1.4.2
Findings
2
Worst severity
high
Content hash
9711f595c91db42c3df7259c…

Findings

  • high Contributor stored XSS via unescaped Gutenberg className on the events block

    xss_stored

    The umichevents/events dynamic block copies the Gutenberg className attribute (block style class plus the Additional CSS class(es) field) into a string and the template prints it raw inside a class="..." attribute. WordPress kses on save does not neutralize a quote-breakout payload because it contains no HTML tags, and this plugin does not use get_block_wrapper_attributes()/esc_attr(). A user with edit_posts (Contributor can plant it; Author can publish) can store className value x" onmouseover="alert(1) so the frontend renders <div class="wp-block-umichevents-events x" onmouseover="alert(1)">, executing in visitors' and previewing admins' browsers. moreLinkText is also echoed unescaped in the same template (text node of the more-link <a>); that is a second missing-escape but script tags there are largely stripped by kses, unlike the class attribute breakout.

    templates/block-events.tpl:1-23

    Recommendation

    Build the wrapper with get_block_wrapper_attributes() or echo esc_attr( sanitize_html_class() / a space-separated list of sanitized class tokens ) — never raw className. Escape moreLinkText with esc_html() and the more-link URL with esc_url(). Do not concatenate unsanitized attribute values into HTML.

  • medium Event feed fields rendered without escaping in frontend templates

    xss_stored

    Shortcode, widget, and block templates print events.umich.edu JSON properties directly into HTML: permalink in href, event_title/event_subtitle/location_name/building_name as element bodies, image_url as img src (getResizedEventImage returns the raw URL unchanged when size is full or the editor fails), and image_description as alt. There is no esc_url/esc_html/esc_attr. The feed is treated as trusted, but it is a campus-wide calendar that imports Maize Pages student-organization events; any HTML or quote in those fields is stored in uploads/umich-events-cache and replayed to every visitor of pages that embed the plugin. This is not writable by a WP Subscriber, but it is a persistent XSS sink for whoever can create or import an event on the upstream calendar.

    templates/event.tpl:1-14

    Recommendation

    Escape every feed field at the output boundary: esc_url() for permalink/image src (and reject non-https hosts if the image is fetched), esc_attr() for alt text, esc_html() for titles, subtitles, and location names. Apply the same escaping in templates/block-events.tpl, templates/widget.tpl, and any theme overrides. Optionally allowlist image_url to events.umich.edu before calling wp_get_image_editor().

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.