Skip to content
eastbaycyber

CVE-2026-109218: Contact Manager File Upload Flaw

CVSS · Critical
9.8
In CISA KEV
No
Published
Oct 28
Patch SLA & TriageVector: Network
24 to 48 hours

Critical CVSS (9.8) reachable over network.

Exposure:
Control:
CVE explainers 10 min read
Security Research Desk Source-checked
Auto-checked against the official CVE record · Human-reviewed after publishing · Updated 2026-10-28
▲ Escalation ViewOne CVE, briefed at three altitudes — skim the Brief, weigh the Impact, or work the Runbook. The way a SOC actually reads it.
CISOBrief · 30-second brief

TL;DR - CVE-2026-109218 is a critical, unauthenticated arbitrary file-upload flaw in the Contact Manager WordPress plugin through version 9.1.2. - Upgrade to Contact Manager 9.1.3 or later and prevent script execution in upload directories. - No confirmed in-the-wild exploitation or public proof of concept was identified, and the issue is not listed in CISA KEV.

CVE-2026-109218 affects the Contact Manager WordPress plugin through version 9.1.2. The vulnerability allows unauthenticated arbitrary file uploads through the plugin’s add_message workflow. Under specific Apache and PHP configurations, an uploaded file could potentially lead to remote code execution.

Administrators should treat Contact Manager 9.1.2 and earlier as vulnerable and prioritize upgrading to version 9.1.3 or later.

AnalystImpact · assess the risk

Are You Affected?

The vulnerable functionality handles file uploads without requiring authentication. An incomplete extension blacklist can be bypassed with a specially crafted filename containing a trailing dot. WordPress subsequently normalizes the filename before writing it to disk, creating a mismatch between the name that passed validation and the name ultimately stored.

Field Assessment
CVE CVE-2026-109218
CVSS base score 9.8 Critical
CVSS vector Not supplied in the retrieved NVD data
Attack vector Network
Authentication None required
Privileges required None
Primary impact Arbitrary file upload
Potential secondary impact Remote code execution under specific Apache/PHP configurations
Affected product Contact Manager for WordPress
Affected versions All versions up to and including 9.1.2
Apparent fixed version 9.1.3
Patch available Yes; version 9.1.3 is listed on WordPress.org
CISA KEV Not listed

The official WordPress.org plugin page showed version 9.1.3 and a corresponding contact-manager.9.1.3.zip package. The available NVD record did not explicitly document a fixed version, so administrators should confirm the release with the plugin maintainer where possible. Remediation should not be delayed on exposed installations.

Analyst’s take: Upgrade first, then verify that upload directories cannot execute PHP-related extensions. The absence of a CISA KEV listing or confirmed public proof of concept lowers the evidence of active exploitation, but it does not eliminate the risk created by unauthenticated uploads.

Risk is highest where WordPress runs on Apache with libapache2-mod-php, .phar files are mapped to PHP by default, and uploaded files are reachable before the plugin deletes them. Even without those exact conditions, arbitrary file upload remains a serious integrity and abuse concern.

The Fix, If You’re in a Hurry

Upgrade Contact Manager to 9.1.3 or later. WordPress administrators can use the dashboard’s plugin update mechanism or WP-CLI:

wp plugin update contact-manager
wp plugin status contact-manager

To verify the installed version:

wp plugin get contact-manager --field=version

If the plugin is pinned to a specific package or managed outside the WordPress dashboard, obtain the release from the official WordPress.org plugin listing and verify that the installed version is at least 9.1.3.

The available evidence identifies 9.1.3 as the apparent post-vulnerability release, but does not include a formal vendor statement explicitly confirming that this version fixes CVE-2026-109218. If an immediate upgrade is not possible, temporarily deactivate and remove the plugin where operationally feasible. Blocking unauthenticated access to the affected message-submission functionality can reduce exposure, but it is a compensating control rather than a confirmed complete fix.

For broader WordPress hardening guidance, review the WordPress plugin security glossary and related security resources.

Technical Notes

Prevent web-server execution in WordPress upload locations. The precise configuration depends on the hosting stack, and changes should be tested before deployment. For Apache configurations that permit directory-level overrides, a defensive .htaccess rule can deny access to common PHP handlers:

<FilesMatch "\.(php|php[0-9]?|phtml|phar)$">
    Require all denied
</FilesMatch>

Review Apache MIME and handler mappings as well. If .phar is mapped to PHP and that behavior is not required, remove or disable the mapping in the applicable Apache or PHP configuration, then reload Apache using the service process appropriate to the operating system:

sudo apachectl configtest
sudo systemctl reload apache2

Blocking .php alone is not sufficient. The reported exploitation path specifically depends on .phar handling, so upload-directory protections should cover all executable PHP-related extensions supported by the deployment.

How This Vulnerability Works

The vulnerability is caused by a filename-validation and normalization mismatch. Contact Manager’s vulnerable add_message functionality uses an extension blacklist to reject dangerous uploads. A filename ending in a trailing dot can cause the extension-derivation routine to return an empty extension. Because that value does not match the blacklist, validation proceeds.

WordPress then applies sanitize_file_name(). This normalization step removes the trailing dot before the file is written to disk. The filename that passed validation is therefore different from the filename ultimately stored by the application. A file that evaded the blacklist can consequently be written under a potentially executable name.

The file is later removed with unlink() at the end of the request. That cleanup reduces persistence but does not eliminate risk. An attacker may attempt to retrieve the uploaded object during the short interval between file creation and cleanup.

Successful remote code execution requires additional environmental conditions, including Apache, libapache2-mod-php, default .phar-to-PHP handling, and successful timing of the retrieval request.

Technical Notes

The important defensive sequence is:

  1. An unauthenticated request reaches the message-upload path.
  2. A crafted trailing-dot filename bypasses the blacklist.
  3. WordPress normalizes the filename.
  4. The file is temporarily written under a potentially executable name.
  5. The attacker attempts retrieval before cleanup.

The supplied research identifies source references in the Contact Manager 9.1.2 tree, including add-message.php, processing.php, and the plugin’s primary source file. Those Trac pages returned HTTP 403 during retrieval, so defenders should treat the root-cause description as based on the published CVE record rather than independently reproduced source code.

Severity Explained

CVE-2026-109218 carries a CVSS base score of 9.8, classified as Critical. The retrieved NVD data did not provide the full CVSS vector string, so the exact individual metric selections cannot be verified from the available record.

The reported characteristics explain the high score: the attack is network-reachable, does not require authentication, and does not require pre-existing privileges.

An arbitrary file-upload issue can affect confidentiality, integrity, and availability. If the uploaded content becomes executable, an attacker could potentially run code with the privileges of the web-server process. Possible consequences include:

  • Website defacement
  • Credential theft
  • Malware deployment
  • Unauthorized data access
  • Further compromise of the WordPress host
  • Use of the server as a foothold into connected systems

The practical impact is configuration-dependent because the described execution path requires specific Apache/PHP behavior and a narrow retrieval window.

Administrators should not downgrade the issue solely because the application deletes the file. Short-lived files can still be retrieved, and the upload capability itself may support additional abuse depending on permissions, storage paths, monitoring coverage, and web-server behavior.

Is CVE-2026-109218 Being Exploited?

CVE-2026-109218 is not listed in CISA’s Known Exploited Vulnerabilities catalog according to the supplied lookup. There is no CISA KEV due date, required action, or ransomware-campaign designation for this CVE.

KEV absence is not proof that exploitation has never occurred. It means that confirmed exploitation was not represented in that catalog at the time of assessment.

No confirmed in-the-wild exploitation was identified in the supplied NVD or KEV data. No known public proof-of-concept repository was identified in the research results either. The vulnerability remains technically plausible for exploitation because it is unauthenticated and carries a 9.8 CVSS score, but successful code execution depends on the target’s Apache/PHP configuration and the timing of file retrieval.

The Wordfence vulnerability database independently describes the issue as “Contact Manager <= 9.1.2 - Unauthenticated Arbitrary File Upload via Trailing-Dot Filename Blacklist Bypass” and attributes the research to sermsak. This corroborates the affected versions and vulnerability class, but it is not evidence of active exploitation or a public exploit.

ResponderRunbook · act now

Detecting the Vulnerability in Your Environment

Start with WordPress and web-server logs covering unauthenticated POST requests to the Contact Manager message-submission functionality. The supplied record does not identify a canonical vulnerable endpoint or stable request signature, so defenders should correlate requests to the plugin’s message or upload routes rather than relying on one hard-coded URI.

Look for:

  • Multipart file uploads
  • Filenames ending in a dot
  • Unexpected .phar or PHP-like extensions
  • Immediate follow-up GET requests for the same path
  • Upload activity from unauthenticated clients
  • Files created in media or plugin upload directories

A likely sequence is an unauthenticated upload request followed within seconds by a request for a newly created file. Because the plugin may remove the file at the end of the request, its absence during later investigation does not rule out exploitation.

Technical Notes

A basic Apache log search for suspicious filename and upload indicators can provide an initial triage signal:

sudo grep -Eai \
  'contact-manager|add_message|multipart/form-data|\.phar|\.php[0-9]?|phtml|filename=.*\.[[:space:]]*"' \
  /var/log/apache2/access.log* /var/log/apache2/error.log*

The exact endpoint and log format vary, so this is a hunting expression rather than a validated exploit signature. Investigate matching entries alongside request timestamps, source addresses, HTTP methods, status codes, response sizes, and user agents.

A Splunk-style search for an upload-then-retrieve pattern might look like this:

index=web
| eval uri_l=lower(uri_path), body_l=lower(request_body)
| search (method=POST AND (uri_l="*contact-manager*" OR uri_l="*add_message*"))
    OR (method=GET AND (uri_l="*.phar" OR uri_l="*.php*" OR uri_l="*.phtml"))
| bin _time span=10s
| stats values(method) as methods
        values(uri_path) as paths
        values(src_ip) as source_ips
        values(status) as statuses
        count
  by _time, host
| where mvfind(methods,"POST") >= 0 AND mvfind(methods,"GET") >= 0

If request bodies are not logged, inspect reverse-proxy, WAF, and application telemetry for multipart uploads. Examine WordPress upload directories for recently created executable-looking files:

find /var/www -type f \
  \( -iname '*.phar' -o -iname '*.php' -o -iname '*.phtml' \) \
  -printf '%TY-%Tm-%Td %TH:%TM:%TS %u %g %m %p\n' \
  2>/dev/null | sort -r | head -100

This query cannot prove exploitation and may produce legitimate results. Prioritize files created near suspicious unauthenticated requests, files containing unexpected PHP code, and files located in directories intended only for media uploads.

  1. Identify affected installations. Inventory Contact Manager versions across all WordPress sites.
  2. Upgrade immediately. Install version 9.1.3 or later.
  3. Verify the installed version. Confirm the running plugin version after deployment.
  4. Restrict upload execution. Block PHP-related execution in upload directories, including .phar.
  5. Review logs. Search for unauthenticated uploads, trailing-dot filenames, and rapid upload-then-retrieve activity.
  6. Inspect upload directories. Look for unexpected executable files and recently modified content.
  7. Preserve evidence. Retain web, reverse-proxy, WAF, and WordPress logs before rotation.
  8. Investigate suspicious activity. Review outbound connections, process execution, administrator accounts, and scheduled tasks.
  9. Rotate credentials if compromise is suspected. Include WordPress, hosting, database, SSH, and API credentials.
  10. Isolate affected systems when necessary. Follow the organization’s incident-response procedures.

Organizations handling regulated payment data should also assess whether the affected WordPress site is within the scope of their segmentation and monitoring controls. See the PCI DSS network segmentation FAQ for related considerations.

References and Further Reading

The NVD record is the primary source for the CVE description, affected range, CVSS score, and technical conditions described here. Its publication timestamp was 2026-10-28 07:16:44 UTC, with the same timestamp reported for the last modification in the supplied data.

Relevant references include:

The Trac source references returned HTTP 403 during the supplied research, so they should be treated as pointers to the relevant code rather than independently verified excerpts. The WordPress.org page showed Contact Manager 9.1.3, which is the apparent remediation release. Because the supplied data did not include a formal maintainer advisory explicitly confirming the fix, organizations should record the upgrade and validate the installed version after deployment.

For incident response, preserve web and reverse-proxy logs before rotating them, capture the WordPress plugin inventory, inspect upload directories, and review outbound connections from the web server. If suspicious activity is found, isolate the host or site, rotate WordPress and hosting credentials, and investigate for persistence beyond the transient uploaded file.

This article may contain affiliate links. We earn a commission on qualifying purchases at no extra cost to you.

Choosing a tool? Pricing and head-to-head guides

Last verified: 2026-10-28

Disclaimer: This article may contain affiliate links. We earn a commission on qualifying purchases at no extra cost to you.