The vulnerability was discovered during a manual review of the osTicket password recovery mechanism.
During the audit, it was observed that the validation of password recovery tokens used the following logical condition:
elseif (!($ts = $_config->lastModified($_POST['token'])) && ($ost->getConfig()->getPwResetWindow() < (time() - strtotime($ts))))
The purpose of this check was to invalidate a token when no associated timestamp existed or when the configured validity window had been exceeded.
However, due to the use of the logical operator &&, the condition only considered the token invalid when both checks were simultaneously met. As a result, a token could remain valid in situations where it should already have been considered invalid.
After receiving the report, the vendor confirmed the finding and released a patch modifying the condition to:
elseif (!($ts = $_config->lastModified($_POST['token'])) || ($ost->getConfig()->getPwResetWindow() < (time() - strtotime($ts))))
Replacing the && operator with || ensures that the token is rejected when a valid timestamp does not exist or when the configured validity window has been exceeded, thereby restoring the expected behavior of the password recovery mechanism.

The vulnerability was fully verified through source code analysis and review of the patch published by the vendor, making it unnecessary to develop a dedicated proof-of-concept exploit.
The vendor confirmed the finding, implemented the fix, and released the patch in osTicket versions 1.17.8 and 1.18.4. Subsequently, the process continued with the coordination of INCIBE-CERT for the assignment of the CVE-2026-18363 identifier.