StickEasy Protected Contact Form <= 1.0.1 - Unauthenticated Information Disclosure
Description
The StickEasy Protected Contact Form plugin for WordPress is vulnerable to Sensitive Information Disclosure in all versions up to, and including, 1.0.2. The plugin stores spam detection logs at a predictable publicly accessible location (wp-content/uploads/stickeasy-protected-contact-form/spcf-log.txt). This makes it possible for unauthenticated attackers to download the log file and access sensitive information including visitor IP addresses, email addresses, and comment snippets from contact form submissions that were flagged as spam.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:NTechnical Details
<=1.0.1Source Code
WordPress.org SVN# Exploitation Research Plan: CVE-2025-13973 ## 1. Vulnerability Summary The **StickEasy Protected Contact Form** plugin (versions <= 1.0.1) suffers from an unauthenticated sensitive information disclosure vulnerability. The plugin implements a spam detection mechanism that logs details of flagged …
Show full research plan
Exploitation Research Plan: CVE-2025-13973
1. Vulnerability Summary
The StickEasy Protected Contact Form plugin (versions <= 1.0.1) suffers from an unauthenticated sensitive information disclosure vulnerability. The plugin implements a spam detection mechanism that logs details of flagged submissions to a static text file: wp-content/uploads/stickeasy-protected-contact-form/spcf-log.txt. Because this file is stored within the public uploads directory without restrictive access controls (like an .htaccess file or an empty index.php), any unauthenticated user can predict the URL and download the log, exposing visitor IP addresses, email addresses, and form content.
2. Attack Vector Analysis
- Target Endpoint:
http://<target>/wp-content/uploads/stickeasy-protected-contact-form/spcf-log.txt - Method: HTTP GET
- Authentication: None (Unauthenticated)
- Preconditions:
- The plugin must have processed at least one submission that was flagged as "spam".
- The directory
wp-content/uploads/stickeasy-protected-contact-form/must have been created (typically happens upon the first spam event).
3. Code Flow (Inferred)
Since source files are not provided, the following flow is inferred from the vulnerability description and common WordPress plugin patterns:
- Form Submission: A user submits a contact form (likely via a
wp_ajax_nopriv_handler or aPOSTrequest to a page containing the plugin's shortcode). - Spam Detection: The plugin runs a check (e.g., honeypot, timing, or content filtering).
- Logging Sink: If the check fails (spam detected), the plugin calls a logging function.
- It likely uses
wp_upload_dir()to find the path. - It writes data to
spcf-log.txtusingfile_put_contents($file, $data, FILE_APPEND). - The data includes
$_SERVER['REMOTE_ADDR'], the email field, and the message snippet.
- It likely uses
- Exposure: The file is saved with default permissions in a web-accessible directory.
4. Nonce Acquisition Strategy
Reading the sensitive log file requires no nonce, as it is a direct request to a static file served by the webserver (Nginx/Apache).
However, to generate test data (triggering the log entry), a nonce might be required for the form submission.
- Identify Shortcode: Search for
add_shortcodein the plugin directory to find the form's tag (likely[stickeasy-contact-form]or similar). - Identify Nonce Key: Look for
wp_create_nonceorwp_localize_scriptin the plugin code to see if the form uses a CSRF token. - Strategy:
- Use
wp-clito create a page with the discovered shortcode. - Navigate to the page using
browser_navigate. - Extract any nonce using
browser_eval. - Submit the form via
http_requestorbrowser_click.
- Use
5. Exploitation Strategy
- Discovery: Confirm the plugin is active and determine the exact shortcode by grepping the source:
grep -r "add_shortcode" . - Environment Setup: Create a post/page containing the form.
- Trigger Logging:
- Analyze the spam detection logic (e.g., search for "honeypot" or "hidden" fields).
- Submit a form entry that intentionally triggers the spam filter (e.g., filling out a hidden honeypot field or submitting too quickly).
- Information Retrieval: Perform a GET request to the log file location.
Expected HTTP Request (Data Retrieval)
GET /wp-content/uploads/stickeasy-protected-contact-form/spcf-log.txt HTTP/1.1
Host: localhost
Connection: close
6. Test Data Setup
- Install Plugin: Ensure
stickeasy-protected-contact-formversion 1.0.1 is installed. - Create Page:
(Note: Replacewp post create --post_type=page --post_title="Contact Us" --post_status=publish --post_content='[stickeasy-contact-form]'[stickeasy-contact-form]with the actual shortcode found in the code.) - Identify Spam Trigger:
- Grep the code for the logging logic:
grep -r "spcf-log.txt" . - Identify what causes the plugin to write to this file (e.g., if a field named
spcf_honeypotis not empty).
- Grep the code for the logging logic:
7. Expected Results
- Successful Trigger: The plugin creates the directory and file in
wp-content/uploads/. - Successful Disclosure: The HTTP GET request returns a
200 OKwith a response body containing plain text logs, for example:[2023-10-27 10:00:00] SPAM Detected - IP: 192.168.1.1, Email: victim@example.com, Message: "Check out this link..."
8. Verification Steps
- Check Filesystem via CLI:
ls -l /var/www/html/wp-content/uploads/stickeasy-protected-contact-form/spcf-log.txt - Verify Content:
cat /var/www/html/wp-content/uploads/stickeasy-protected-contact-form/spcf-log.txt - Confirm Accessibility: Check the HTTP response status of the direct URL.
9. Alternative Approaches
If the plugin uses an obscure spam detection method:
- Analysis: Look for
is_spamorcheck_spamfunctions in the code. - Brute Force: If the trigger is just "high frequency", use a loop to submit multiple requests quickly to see if the log populates.
- Direct Path Check: If the uploads directory is protected by a generic
.htaccess(unlikely in default WP), try to see if the plugin provides an admin setting to view logs, which might have its own IDOR or access control flaw.
Summary
The StickEasy Protected Contact Form plugin for WordPress (versions up to 1.0.1) stores spam detection logs in a publicly accessible text file within the WordPress uploads directory. This allows unauthenticated attackers to download the log file and access sensitive information including visitor IP addresses, email addresses, and form submission content.
Exploit Outline
The exploit involves two main steps: first, triggering the creation or update of the log file by submitting a contact form entry that fails the plugin's spam detection logic (such as filling out a hidden honeypot field). Second, an unauthenticated attacker performs a direct HTTP GET request to the predictable file path: `http://[target-site]/wp-content/uploads/stickeasy-protected-contact-form/spcf-log.txt`. If successful, the server returns the plain-text log containing PII of previous site visitors.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.