{"id":"CVE-2026-54455","kind":"vulnerability","aliases":["CVE-2026-54455"],"related":[],"title":"OpenCATS: date filters in activity grids allow SQL injection","description":"OpenCATS is an open-source applicant tracking system and recruitment CRM for staffing agencies and hiring teams. Prior to version 0.10.0, activity DataGrid date filtering in `home:CallsDataGrid` and `activity:ActivityDataGrid` uses request-controlled `period`, `startDate` and `endDate` parameters without sufficient validation or escaping. The vulnerable code is in `modules/home/dataGrids.php` and `modules/activity/dataGrids.php`. The `startDate` and `endDate` values are inserted into SQL string comparisons without safe escaping, and `period` can directly influence generated SQL. An authenticated user with access to the affected DataGrid endpoints can alter the intended query to access sensitive database contents, including user account data, candidate records, contact details, company information, job orders and activity history. A valid OpenCATS login is required; unauthenticated exploitation is not established. This issue is fixed in version 0.10.0.","summary":"OpenCATS, a recruitment CRM, builds SQL from request-supplied date and period parameters in its home and activity DataGrid endpoints without proper escaping. An logged-in user can alter the query to read user accounts, candidate records, contacts, companies, job orders and activity history.","severity":"high","cvss":7.6,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["opencats","package","php","self-hosted","sql-injection"],"not_affected_if":["no-user-accounts","version-0.10.0-or-later"],"how_to_check":"- Check the installed OpenCATS version in its config or release files; affected versions are those before `0.10.0`.\n- Confirm whether `modules/home/dataGrids.php` and `modules/activity/dataGrids.php` exist and contain the date filtering code described in the advisory.","fix":"- Upgrade OpenCATS to `0.10.0` or later.\n- Until upgraded, restrict login to trusted staff, since exploitation needs a valid account.","status":"open","published_at":"2026-10-28T22:17:15+00:00","first_seen_at":"2026-10-28T22:35:35+00:00","triaged_at":"2026-10-28T22:36:45+00:00","updated_at":"2026-10-28T22:36:45+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-28T22:36:45Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade OpenCATS to `0.10.0` or later.\n- Until upgraded, restrict login to trusted staff, since exploitation needs a valid account.","reach":"network","title":"OpenCATS: date filters in activity grids allow SQL injection","impact":"high","summary":"OpenCATS, a recruitment CRM, builds SQL from request-supplied date and period parameters in its home and activity DataGrid endpoints without proper escaping. An logged-in user can alter the query to read user accounts, candidate records, contacts, companies, job orders and activity history.","category":"package","nicknames":[],"who_cares":["opencats","self-hosted","php","sql-injection"],"confidence":0.8,"needs_auth":"yes","worst_case":"Authenticated user reads user accounts, candidate and contact records from the database","analyst_note":"","how_to_check":"- Check the installed OpenCATS version in its config or release files; affected versions are those before `0.10.0`.\n- Confirm whether `modules/home/dataGrids.php` and `modules/activity/dataGrids.php` exist and contain the date filtering code described in the advisory.","needs_analyst":false,"not_affected_if":["version-0.10.0-or-later","no-user-accounts"],"who_is_affected":"Any self-hosted OpenCATS instance before `0.10.0` where users have accounts that can reach the home and activity DataGrid endpoints. Exposure depends on who holds a login, so instances limited to a small trusted team are at lower practical risk but still need the upgrade.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000638,"input_tokens":3540,"output_tokens":568,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,14A '-54455':12A,15A '0.10.0':92C,198C 'access':150C,162C 'account':61B,168C 'activ':5A,43B,69B,93C,101C,179C 'activitydatagrid':102C 'affect':153C 'agenc':85C 'allow':7A 'alter':55B,157C 'applic':77C 'authent':147C 'build':29B 'callsdatagrid':99C 'candid':62B,170C 'code':119C 'compani':65B,174C 'comparison':135C 'contact':64B,172C 'content':165C 'control':106C 'crm':28B,82C 'cve':10A,13A 'data':169C 'databas':164C 'datagrid':44B,94C,154C 'date':2A,35B,95C 'detail':173C 'direct':142C 'enddat':110C,128C 'endpoint':45B,155C 'escap':48B,116C,138C 'establish':191C 'exploit':188C 'filter':3A,96C 'fix':195C 'generat':144C 'grid':6A 'hire':87C 'histori':70B,180C 'home':41B,98C 'host':21B 'includ':166C 'influenc':143C 'inform':175C 'inject':9A,24B 'insert':131C 'intend':159C 'issu':193C 'job':66B,176C 'log':51B 'logged-in':50B 'login':184C 'modules/activity/datagrids.php':124C 'modules/home/datagrids.php':122C 'open':75C 'open-sourc':74C 'opencat':1A,16B,25B,71C,183C 'order':67B,177C 'packag':17B 'paramet':38B,111C 'period':37B,107C,140C 'php':18B 'prior':89C 'proper':47B 'queri':57B,160C 'read':59B 'record':63B,171C 'recruit':27B,81C 'request':33B,105C 'request-control':104C 'request-suppli':32B 'requir':186C 'safe':137C 'self':20B 'self-host':19B 'sensit':163C 'sourc':76C 'sql':8A,23B,30B,133C,145C 'sql-inject':22B 'staf':84C 'startdat':108C,126C 'string':134C 'suffici':113C 'suppli':34B 'system':79C 'team':88C 'track':78C 'unauthent':187C 'use':103C 'user':53B,60B,148C,167C 'valid':114C,182C 'valu':129C 'version':91C,197C 'vulner':118C 'without':46B,112C,136C","nicknames":[],"mitigations":[],"who_affected":"Any self-hosted OpenCATS instance before `0.10.0` where users have accounts that can reach the home and activity DataGrid endpoints. Exposure depends on who holds a login, so instances limited to a small trusted team are at lower practical risk but still need the upgrade.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-28T22:17:15+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-54455","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54455","severity":null,"published_at":"2026-10-28T22:17:15+00:00","modified_at":"2026-10-28T22:17:15+00:00","first_seen_at":"2026-10-28T22:35:35+00:00","fetched_at":"2026-10-28T22:35:35+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}