---
id: "CVE-2026-104739"
kind: "vulnerability"
aliases: ["CVE-2026-104739"]
title: "JS Help Desk WordPress plugin: admin can delete arbitrary server files"
severity: "medium"
cvss: 4.9
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["package", "php", "self-hosted", "wordpress", "wordpress-plugin"]
not_affected_if: ["no-untrusted-admins", "plugin-above-5.0.1", "plugin-not-installed"]
published_at: "2026-10-30T18:17:15+00:00"
first_seen_at: "2026-10-30T18:55:28+00:00"
updated_at: "2026-10-30T18:57:12+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-104739", "first_seen_at": "2026-10-30T18:55:28+00:00"}]
---

# JS Help Desk WordPress plugin: admin can delete arbitrary server files

The JS Help Desk WordPress plugin up to and including 5.0.1 fails to validate file paths in its support custom image handler. An administrator can make it delete any file on the server, such as wp-config.php, which can lead to remote code execution.

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

## How to check

- Check whether the installed plugin version is `5.0.1` or lower in the WordPress plugins list or the plugin's main file header.
- Look for the `support_custom_img` setting in the plugin configuration.

## Timeline

- 2026-10-30T18:55:28+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-104739

## From the sources

The JS Help Desk – AI-Powered Support & Ticketing System plugin for WordPress is vulnerable to arbitrary file deletion due to insufficient file path validation in the setSupportCustomImage function in all versions up to, and including, 5.0.1. This makes it possible for authenticated attackers, with administrator-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). Exploitation requires a two-step sequence: an administrator first saves a traversal-crafted value in the support_custom_img configuration field, then triggers deletion by uploading a new support custom image, at which point setSupportCustomImage() resolves and deletes the attacker-controlled path.

---

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