CVE-2025-12747
Executive Summary
CVE-2025-12747 is a vulnerability in the Tainacan WordPress plugin, affecting all versions up to and including 1.0.0. The flaw allows unauthenticated attackers to access files that were marked as private by the plugin. These files are stored in the wp-content/uploads/tainacan directory without adequate access controls, leading to an Information Exposure (CWE-200). The CVSS score is 5.3 (Medium), with a low confidentiality impact. No public exploit code or patch is currently available, and the EPSS score is 0.0%, indicating low exploitation likelihood at this time.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
WordPress Ecosystem Context
This vulnerability is specific to the Tainacan WordPress plugin. It does not affect the core WordPress application or other server components like Apache or Nginx. The issue lies in how the plugin handles file uploads and permissions.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Base Score: 5.3 (Medium)
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action is required.
- Scope: Unchanged (S:U) – The impact is confined to the vulnerable component.
- Confidentiality Impact: Low (C:L) – Only limited information is exposed.
- Integrity Impact: None (I:N) – No data modification is possible.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. The vulnerability is easy to exploit but only exposes file metadata or content, not system-level access.
Deep Dive & Mechanics
The Tainacan plugin allows users to upload files and mark them as private. However, the plugin stores these files in the standard WordPress uploads directory (wp-content/uploads/tainacan/) without implementing proper access control mechanisms (e.g., .htaccess rules, token-based authentication, or direct file serving through PHP). As a result, any unauthenticated visitor can directly access the file URL if they know or guess the filename.
Root Cause: The plugin fails to enforce access restrictions on uploaded files. Instead of serving private files through a PHP script that checks permissions, it stores them in a publicly accessible directory.
Attack Vector: An attacker can enumerate or guess file paths (e.g., wp-content/uploads/tainacan/2025/01/private-file.pdf) and retrieve sensitive data such as user-submitted documents, images, or other private content.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code pattern is described conceptually.
Vulnerable Code (Conceptual):
// In Tainacan plugin, file upload handler
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/tainacan/' . $filename;
move_uploaded_file($tmp_name, $file_path);
// No permission check when serving the file
Patched Code (Expected):
// Patched version would serve files through a PHP endpoint
function serve_private_file($file_id) {
if (!current_user_can('read_private_tainacan_files')) {
wp_die('Unauthorized');
}
$file_path = get_attached_file($file_id);
header('Content-Type: ' . wp_get_mime_type($file_path));
readfile($file_path);
exit;
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with Tainacan plugin version <= 1.0.0 installed and active.
- At least one file marked as private uploaded by a user.
Exploitation Steps:
- Identify the Tainacan upload directory:
wp-content/uploads/tainacan/. - Enumerate files by guessing common patterns (e.g.,
private-document.pdf,report.docx). - Directly access the file URL in a browser or via
curl:curl -O http://target.com/wp-content/uploads/tainacan/2025/01/private-file.pdf - If successful, the file is downloaded without authentication.
No public exploit code is available.
Blue Team (Detection & Prevention)
Detection:
- Monitor web server logs for direct access to
wp-content/uploads/tainacan/by unauthenticated users. - Look for unusual file enumeration patterns (e.g., 404 errors followed by 200 on similar paths).
Prevention:
- Implement a Web Application Firewall (WAF) rule to block direct access to the Tainacan upload directory for unauthenticated users.
- Use a
.htaccessfile in the uploads directory to deny all access and serve files via a PHP proxy:# .htaccess in wp-content/uploads/tainacan/ Deny from all - Alternatively, move private files outside the web root.
Indicators of Compromise (IOCs)
- File Paths:
wp-content/uploads/tainacan/* - HTTP Requests: GET requests to
/wp-content/uploads/tainacan/without authentication. - Log Entries: Apache/Nginx access logs showing direct file access to the Tainacan directory.
- Network Traffic: Outbound data transfers of files from the Tainacan directory.
Detection Engineering
YARA Rule
rule Detect_Tainacan_Private_File_Exposure {
meta:
description = "Detects direct access to Tainacan private files in web logs"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-12747"
strings:
$tainacan_path = /wp-content\/uploads\/tainacan\//
$private_file = /\.(pdf|docx|xlsx|zip|txt)$/i
condition:
$tainacan_path and $private_file
}
Sigma Rule
title: Tainacan Private File Exposure
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects unauthenticated access to Tainacan private files
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'GET'
cs-uri-stem|contains: '/wp-content/uploads/tainacan/'
condition: selection
falsepositives:
- Legitimate authenticated users (if access control is misconfigured)
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-12747 Tainacan Private File Exposure"; flow:to_server,established; http.method; content:"GET"; http.uri; content:"/wp-content/uploads/tainacan/"; nocase; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the Tainacan plugin until a patch is released.
- Restrict access to the
wp-content/uploads/tainacan/directory via.htaccessor server configuration:<Directory /var/www/html/wp-content/uploads/tainacan/> Require all denied </Directory> - Audit existing files in the Tainacan upload directory and remove any sensitive data.
Long-term Fix:
- Apply a patch from the vendor when available.
- Implement a file serving proxy that checks user permissions before delivering private files.
Workaround:
- Use a WordPress security plugin (e.g., Wordfence) to block direct access to the uploads directory for unauthenticated users.
Valters IT
DevSecOps & Cyber Threat Intelligence
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.