CVE-2026-40498
Description
FreeScout is a free self-hosted help desk and shared mailbox. Prior to version 1.8.213, an unauthenticated attacker can access diagnostic and system tools that should be restricted to administrators. The /system/cron endpoint relies on a static MD5 hash derived from the APP_KEY, which is exposed in the response and logs. Accessing these endpoints reveals sensitive server information (Full Path Disclosure), process IDs, and allows for Resource Exhaustion (DoS) by triggering heavy background tasks repeatedly without any rate limiting. The cron hash is generated using md5(APP_KEY . 'web_cron_hash'). Since this hash is often transmitted via GET requests, it is susceptible to exposure in server logs, browser history, and proxy logs. Furthermore, the lack of rate limiting on these endpoints allows for automated resource exhaustion (DoS) and brute-force attempts. Version 1.8.213 fixes the issue.
Affected products
1Patches
1b1d6c2c601a6Improve Helper::getWebCronHash()
3 files changed · +8 −3
app/Http/Controllers/SystemController.php+6 −1 modified@@ -399,7 +399,12 @@ public function cron(Request $request) \Artisan::call('schedule:run', [], $outputLog); $output = $outputLog->fetch(); - return response($output, 200)->header('Content-Type', 'text/plain'); + preg_match_all("#'artisan'\s+([^\s>]+)#", $output ?? '', $m); + + $commands = $m[1] ?? []; + $result = count($commands)." commands executed:\r\n".(count($commands) ? '- ' : '').implode("\r\n- ", $commands); + + return response($result, 200)->header('Content-Type', 'text/plain'); } /**
app/Misc/Helper.php+1 −1 modified@@ -2108,7 +2108,7 @@ public static function getClassName($param) public static function getWebCronHash() { - return md5(config('app.key').'web_cron_hash'); + return hash_hmac('sha512', 'web_cron_hash', config('app.key')); } public static function getProtocol($url = '')
resources/views/system/status.blade.php+1 −1 modified@@ -230,7 +230,7 @@ <code>* * * * * php {{ base_path() }}/artisan schedule:run >> /dev/null 2>&1</code> <br/> {{ __('Alternatively cron job can be executed by requesting the following URL every minute (this method is not recommended as some features may not work as expected, use it at your own risk)') }}:<br/> - <a href="{{ route('system.cron', ['hash' => \Helper::getWebCronHash()]) }}" target="_blank">{{ route('system.cron', ['hash' => \Helper::getWebCronHash()]) }}</a> + <pre><a href="{{ route('system.cron', ['hash' => \Helper::getWebCronHash()]) }}" target="_blank">{{ route('system.cron', ['hash' => \Helper::getWebCronHash()]) }}</a></pre> </p> <table class="table table-dark-header table-bordered table-responsive"> <tbody>
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
3News mentions
0No linked articles in our index yet.