---
id: "CVE-2026-109221"
kind: "vulnerability"
aliases: ["CVE-2026-109221"]
title: "WordPress Groundhogg plugin: arbitrary file deletion enables code execution"
severity: "high"
cvss: 8.1
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["package", "self-hosted", "wordpress", "wordpress-plugin"]
not_affected_if: ["no-sales-rep-accounts", "plugin-updated"]
published_at: "2026-10-16T05:17:29+00:00"
first_seen_at: "2026-10-23T21:57:12+00:00"
updated_at: "2026-10-25T03:07:50+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-109221", "first_seen_at": "2026-10-23T21:57:12+00:00"}]
---

# WordPress Groundhogg plugin: arbitrary file deletion enables code execution

The Groundhogg WordPress CRM plugin up to and including 4.9.3 fails to validate file paths in its copy_file function, so an authenticated user can delete arbitrary files on the server. Deleting a file such as wp-config.php can lead to remote code execution.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed Groundhogg plugin version in the WordPress admin under Plugins, or with `wp plugin get groundhogg --field=version`
- Look for users holding the import_contacts capability, such as the Sales Representative role

## Fix

- Update the Groundhogg plugin to a version later than `4.9.3`
- Until updated, restrict or remove the Sales Representative role and any accounts holding import_contacts

## Timeline

- 2026-10-23T21:57:12+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-109221

## From the sources

The Groundhogg — CRM, Newsletters, and Marketing Automation plugin for WordPress is vulnerable to arbitrary file deletion due to insufficient file path validation in the copy_file function in all versions up to, and including, 4.9.3 This makes it possible for authenticated attackers, with Sales Representative-level access and above, to delete arbitrary files on the server, which can easily lead to remote code execution when the right file is deleted (such as wp-config.php). This is exploitable by any user holding the plugin-defined import_contacts capability, which is granted by default to the plugin's custom Sales Representative role.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
