---
id: "CVE-2026-13576"
kind: "vulnerability"
aliases: ["CVE-2026-13576"]
title: "CallBackery: user passwords stored as unsalted fast hashes, crackable offline"
severity: "medium"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["callbackery", "package", "perl", "self-hosted"]
not_affected_if: ["version-0.62.0-or-later"]
published_at: "2026-10-30T13:18:32+00:00"
first_seen_at: "2026-10-30T13:30:27+00:00"
updated_at: "2026-10-30T13:32:18+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-13576", "first_seen_at": "2026-10-30T13:30:27+00:00"}]
---

# CallBackery: user passwords stored as unsalted fast hashes, crackable offline

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.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed CallBackery version; versions before `0.62.0` are affected.
- 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.

## Timeline

- 2026-10-30T13:30:27+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-13576

## From the sources

CallBackery versions before 0.62.0 for Perl store user passwords as unsalted HMAC-SHA1 hashes.

Passwords 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.

An attacker who obtains the user table can recover passwords by fast offline guessing.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
