{"id":"CVE-2026-13576","kind":"vulnerability","aliases":["CVE-2026-13576"],"related":[],"title":"CallBackery: user passwords stored as unsalted fast hashes, crackable offline","description":"CallBackery versions before 0.62.0 for Perl store user passwords as unsalted HMAC-SHA1 hashes.\n\nPasswords are hashed with hmac_sha1_sum() from Mojo::Util with no key, a single fast SHA-1 HMAC. There is no salt, so equal passwords give equal hashes, and no work factor slows down guessing.\n\nAn attacker who obtains the user table can recover passwords by fast offline guessing.","summary":"CallBackery, a Perl web application, hashes user passwords with unkeyed HMAC-SHA1 and no salt. An attacker who gets the user table can guess passwords offline quickly and recover them, and equal passwords produce equal hashes.","severity":"medium","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["callbackery","package","perl","self-hosted"],"not_affected_if":["version-0.62.0-or-later"],"how_to_check":"- Check the installed CallBackery version; versions before `0.62.0` are affected.\n- Look for calls to `hmac_sha1_sum` in the password-hashing code of the installed copy.","fix":"- Move to CallBackery `0.62.0` or later.","status":"open","published_at":"2026-10-30T13:18:32+00:00","first_seen_at":"2026-10-30T13:30:27+00:00","triaged_at":"2026-10-30T13:32:18+00:00","updated_at":"2026-10-30T13:32:18+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-30T13:32:18Z","model":"claude-haiku-5-5","output":{"fix":"- Move to CallBackery `0.62.0` or later.","reach":"local","title":"CallBackery: user passwords stored as unsalted fast hashes, crackable offline","impact":"medium","summary":"CallBackery, a Perl web application, hashes user passwords with unkeyed HMAC-SHA1 and no salt. An attacker who gets the user table can guess passwords offline quickly and recover them, and equal passwords produce equal hashes.","audience":"businesses","category":"package","nicknames":[],"who_cares":["perl","callbackery","self-hosted"],"confidence":0.6,"fix_status":"available","needs_auth":"unknown","worst_case":"Attacker recovers user passwords from a stolen user table offline","analyst_note":"","how_to_check":"- Check the installed CallBackery version; versions before `0.62.0` are affected.\n- Look for calls to `hmac_sha1_sum` in the password-hashing code of the installed copy.","plain_action":"","needs_analyst":false,"not_affected_if":["version-0.62.0-or-later"],"who_is_affected":"Teams running CallBackery versions before 0.62.0 that store user accounts with passwords in its database. Exposure depends on someone obtaining the user table, for example through a database leak or backup exposure. Deployments that do not use CallBackery's local user passwords can skip it.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000671,"input_tokens":4171,"output_tokens":507,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-1':92C '-13576':13A,16A '-2026':12A,15A '0.62.0':63C 'applic':27B 'attack':40B,112C 'callbackeri':1A,17B,23B,60C 'crackabl':9A 'cve':11A,14A 'equal':55B,58B,99C,102C 'factor':107C 'fast':7A,90C,122C 'get':42B 'give':101C 'guess':47B,110C,124C 'hash':8A,28B,59B,74C,77C,103C 'hmac':34B,72C,79C,93C 'hmac-sha1':33B,71C 'host':22B 'key':87C 'mojo':83C 'obtain':114C 'offlin':10A,49B,123C 'packag':18B 'password':3A,30B,48B,56B,68C,75C,100C,120C 'perl':19B,25B,65C 'produc':57B 'quick':50B 'recov':52B,119C 'salt':38B,97C 'self':21B 'self-host':20B 'sha':91C 'sha1':35B,73C,80C 'singl':89C 'slow':108C 'store':4A,66C 'sum':81C 'tabl':45B,117C 'unkey':32B 'unsalt':6A,70C 'user':2A,29B,44B,67C,116C 'util':84C 'version':61C 'web':26B 'work':106C","nicknames":[],"mitigations":[],"who_affected":"Teams running CallBackery versions before 0.62.0 that store user accounts with passwords in its database. Exposure depends on someone obtaining the user table, for example through a database leak or backup exposure. Deployments that do not use CallBackery's local user passwords can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"first_public_at":"2026-10-30T13:18:32+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-13576","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-13576","severity":null,"published_at":"2026-10-30T13:18:32+00:00","modified_at":"2026-10-30T13:18:32+00:00","first_seen_at":"2026-10-30T13:30:27+00:00","fetched_at":"2026-10-30T13:30:27+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"}