{"id":"CVE-2026-118991","kind":"vulnerability","aliases":["CVE-2026-118991"],"related":[],"title":"CallBackery: weak backup encryption lets attackers guess passwords offline","description":"CallBackery versions before 0.62.0 for Perl encrypt configuration backups with the padded password as the AES key.\n\ngetCrypt() pads the backup password with \"x\" characters and cuts it to 32 bytes to form the AES key, with no salt and no key derivation. The first block of a backup holds a 16 hex digit length field, so decrypting one block confirms a password guess at raw AES speed.\n\nAn attacker who obtains a backup can recover its password by fast offline guessing, and with it every credential the backup holds.","summary":"CallBackery, a Perl configuration tool, encrypts its backups with a key made by padding the password with 'x' characters, with no salt or key derivation. An attacker who obtains a backup can guess the password quickly offline and then read every credential the backup holds.","severity":"high","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["callbackery","package","perl","self-hosted"],"not_affected_if":["no-callbackery-backups","version-0.62.0-or-later"],"how_to_check":"- Check the installed CallBackery version; `unknown` if the sources do not give the command.\n- Look for backup files produced by CallBackery and whether they were created by a version before `0.62.0`.","fix":"- CallBackery versions before `0.62.0` are affected; move to `0.62.0` or later.","status":"open","published_at":"2026-10-30T13:18:31+00:00","first_seen_at":"2026-10-30T13:30:27+00:00","triaged_at":"2026-10-30T13:32:28+00:00","updated_at":"2026-10-30T13:32:28+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-30T13:32:28Z","model":"claude-haiku-5-5","output":{"fix":"- CallBackery versions before `0.62.0` are affected; move to `0.62.0` or later.","reach":"local","title":"CallBackery: weak backup encryption lets attackers guess passwords offline","impact":"high","summary":"CallBackery, a Perl configuration tool, encrypts its backups with a key made by padding the password with 'x' characters, with no salt or key derivation. An attacker who obtains a backup can guess the password quickly offline and then read every credential the backup holds.","audience":"developers","category":"package","nicknames":[],"who_cares":["perl","callbackery","self-hosted"],"confidence":0.6,"fix_status":"available","needs_auth":"no","worst_case":"attacker recovers backup password and reads stored credentials","analyst_note":"Confirm the exact affected version range and whether the fix at 0.62.0 changes key derivation; check the upstream CallBackery release notes via the NVD entry.","how_to_check":"- Check the installed CallBackery version; `unknown` if the sources do not give the command.\n- Look for backup files produced by CallBackery and whether they were created by a version before `0.62.0`.","plain_action":"","needs_analyst":true,"not_affected_if":["no-callbackery-backups","version-0.62.0-or-later"],"who_is_affected":"Teams that run CallBackery for Perl and keep its encrypted configuration backups. The risk needs someone to obtain a backup file, so exposure depends on where backups are stored and who can read them. Teams not running CallBackery can skip it.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000701,"input_tokens":4186,"output_tokens":564,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-118991':12A,15A '-2026':11A,14A '0.62.0':70C '16':118C '32':96C 'ae':82C,101C,133C 'attack':6A,48B,136C 'backup':3A,29B,52B,65B,75C,87C,115C,140C,155C 'block':112C,126C 'byte':97C 'callbackeri':1A,16B,22B,67C 'charact':40B,91C 'configur':25B,74C 'confirm':127C 'credenti':63B,153C 'cut':93C 'cve':10A,13A 'decrypt':124C 'deriv':46B,109C 'digit':120C 'encrypt':4A,27B,73C 'everi':62B,152C 'fast':146C 'field':122C 'first':111C 'form':99C 'getcrypt':84C 'guess':7A,54B,130C,148C 'hex':119C 'hold':66B,116C,156C 'host':21B 'key':32B,45B,83C,102C,108C 'length':121C 'let':5A 'made':33B 'obtain':50B,138C 'offlin':9A,58B,147C 'one':125C 'packag':17B 'pad':35B,78C,85C 'password':8A,37B,56B,79C,88C,129C,144C 'perl':18B,24B,72C 'quick':57B 'raw':132C 'read':61B 'recov':142C 'salt':43B,105C 'self':20B 'self-host':19B 'speed':134C 'tool':26B 'version':68C 'weak':2A 'x':39B,90C","nicknames":[],"mitigations":[],"who_affected":"Teams that run CallBackery for Perl and keep its encrypted configuration backups. The risk needs someone to obtain a backup file, so exposure depends on where backups are stored and who can read them. Teams not running CallBackery can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"first_public_at":"2026-10-30T13:18:31+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-118991","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-118991","severity":null,"published_at":"2026-10-30T13:18:31+00:00","modified_at":"2026-10-30T13:18:31+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"}