A locksmith's notepad that scribbles over the wrong line when you tell it to write past the last page
luksmeta is a small Red Hat utility that stores arbitrary metadata in the unused header slots of a LUKS1 volume — most notably used by Clevis for network-bound disk encryption (NBDE/Tang). CVE-2025-11568 is an *improper input validation* (CWE-1284) bug where the tool fails to correctly bounds-check slot indices or sizes, and on a LUKS1 header it can overwrite adjacent slot metadata. The affected component is the standalone luksmeta binary and library; LUKS2 volumes use a different on-disk metadata layout and are not impacted. Affected packages: luksmeta ≤ upstream HEAD prior to the October 2025 fix and the corresponding RHEL/Fedora rebuilds.
Vendor MEDIUM (4.4) is a defensible label on the CVSS calculator — AV:L/AC:L/PR:H/UI:N/C:N/I:H/A:N is literally a 4.4 — but in operational reality this is a LOW. PR:H means the attacker is already root on the box and has the LUKS passphrase or keyfile. Anyone who can run luksmeta against a header can already run cryptsetup luksErase, dd if=/dev/zero of=/dev/sdX, or simply unlock and tamper with the filesystem. The CVSS Integrity:High rating reflects header corruption, but the marginal capability over what the attacker already possesses is zero.
3 steps from start to impact.
Obtain root and LUKS key on the target host
luksmeta against the device. This means root shell on the host plus either the LUKS1 passphrase, a keyfile, or an unlocked /dev/mapper handle. There is no remote vector.- root or equivalent on the host
- access to LUKS1 passphrase/keyfile
- physical or logical access to the encrypted block device
- LUKS1 is increasingly rare — Fedora/RHEL default to LUKS2 since RHEL 8.2 / Fedora 30
- Root with the LUKS key already owns the data; this bug is redundant capability
- Clevis NBDE deployments largely migrated to LUKS2
execve of /usr/bin/luksmeta is trivial; almost no scanner flags this CVE meaningfully because the prerequisites are so steepInvoke luksmeta with crafted slot index or oversized payload
luksmeta save -d /dev/sdX -s <slot> -u <uuid> with a slot index or input size that the tool fails to validate. The write overruns into adjacent LUKS1 header metadata regions because the bounds check is incorrect for the LUKS1 layout.- target volume is LUKS1 (not LUKS2)
- luksmeta package present and unpatched
- LUKS2 systems are immune
- luksmeta is not installed by default on most distros — only where Clevis NBDE was provisioned
Header metadata corruption / potential keyslot loss
- volume must be re-mounted or re-keyed for impact to surface
- a backup of the LUKS header (
cryptsetup luksHeaderBackup) fully reverses the damage - the same attacker could have done worse with one line of
dd
cryptsetup luksDump mismatches are the operational signalThe supporting signals.
| In-the-wild exploitation | None observed. No public reports, no incident-response writeups, no honeypot traffic — and there is no network vector to observe. |
|---|---|
| Public PoC | Reproducer steps in the upstream luksmeta issue tracker and Red Hat Bugzilla; no weaponized exploit because there is nothing to weaponize. |
| EPSS | 0.00093 (~0.09 percentile) — among the lowest scored vulnerabilities in the FIRST dataset. |
| CISA KEV | Not listed and will not be — local PR:H, no RCE. |
| CVSS vector interpretation | AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:H/A:N — local, high-priv attacker, integrity-only. The 4.4 score is mechanically correct but operationally inflated. |
| Affected versions | All luksmeta releases up to the October 2025 fix; bug is exposed only against LUKS1 headers. |
| Fixed in | Upstream patch merged 2025-10; RHEL/Fedora errata published as luksmeta security update — confirm against your distro's advisory (RHSA / FEDORA-2025-). |
| Exposure data | No GreyNoise/Shodan/Censys signal — not a network service. Installed-base is constrained to Clevis NBDE deployments still on LUKS1, an estimated <1% of modern Linux fleets. |
| Disclosure date | 2025-10-15 via Red Hat product security. |
| Reporter | Red Hat product security team; CWE-1284 (Improper Validation of Specified Quantity in Input). |
noisgate verdict.
The single decisive factor is PR:H with no privilege gain — the attacker must already be root and hold the LUKS key, at which point they can destroy or read the volume by trivially simpler means. Affected population is further bounded to LUKS1 + luksmeta installations (Clevis NBDE legacy), which is a tiny minority of modern Linux estates.
Why this verdict
- Friction — attacker is already root with the key: the bug grants no new capability over
ddorcryptsetup luksErase. Redundant capability is not a vulnerability worth ranking as MEDIUM. - Friction — LUKS1 only: Fedora, RHEL 8.2+, Ubuntu 18.10+, and Debian 11+ default to LUKS2. The exposed substrate is shrinking and is rare in greenfield deployments.
- Friction — niche package:
luksmetais installed almost exclusively where Clevis NBDE was provisioned. EPSS 0.00093 reflects market disinterest correctly. - Role multiplier: Even on a high-value role host (e.g., a Tang server itself, or an encrypted DB host), the chain ends in availability loss of one volume, recoverable from a header backup. It does not pivot to fleet, identity, or supply chain. No role floor is triggered.
- No KEV, no PoC weaponization, no network reachability — three independent corroborating signals that this is operationally LOW.
Why not higher?
MEDIUM would imply meaningful added risk over existing root privilege. There is none — the attacker who can trigger this can already destroy or read the volume directly. No role multiplier applies because the affected component is not a hypervisor, IdP, PAM, or kernel-mode agent; it is a userspace metadata helper.
Why not lower?
IGNORE would be wrong because the bug is real, the fix is straightforward, and unattended automation (e.g., poorly written Clevis wrappers) could trigger header corruption without malicious intent. Patch it on the normal hygiene cadence — don't pretend it isn't there.
What to do — in priority order.
- Back up LUKS headers fleet-wide — Run
cryptsetup luksHeaderBackup --header-backup-file <path> <device>on every encrypted volume and store off-host. This neutralizes the entire impact of CVE-2025-11568 and protects you against unrelated header corruption. No mitigation SLA applies for LOW — fold this into your standard 365-day backlog, but the header backup is good hygiene regardless. - Inventory LUKS1 vs LUKS2 volumes — Run
cryptsetup luksDump <device> | grep Versionacross the fleet. Anything still on LUKS1 should be on the migration backlog independent of this CVE — LUKS1 has weaker KDFs and no redundant metadata. Convert withcryptsetup convert --type luks2after backing up the header. - Restrict luksmeta invocation via sudoers — If
luksmetais on a host but only legitimately invoked by Clevis automation, deny interactivesudo luksmetavia a sudoers rule. Reduces the chance of accidental or malicious misuse to zero on those hosts. - Patch on next maintenance window — Apply the distro
luksmetaerrata during your standard monthly or quarterly window. Given LOW severity, no expedited change ticket is warranted.
- Full-disk encryption itself — the bug is IN the FDE metadata tooling; FDE does not protect against an attacker who already has root and the key.
- EDR behavioral rules — almost no EDR has telemetry for LUKS header writes, and there's nothing distinctive about the malicious invocation versus legitimate Clevis usage.
- Network segmentation / WAF / NGFW — zero network surface; segmentation provides no risk reduction here.
- Disabling Clevis — only helpful if you weren't using it anyway; for hosts that depend on NBDE this breaks unattended boot.
Crowdsourced verification payload.
Run on each target Linux host as root (or via your config-management agent). Example: sudo ./check_cve_2025_11568.sh. Reports VULNERABLE if luksmeta is installed at an unpatched version AND any local LUKS1 volume is present; PATCHED if either condition is absent or the patched build is detected.
#!/usr/bin/env bash
# check_cve_2025_11568.sh — luksmeta LUKS1 data corruption
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
if ! command -v luksmeta >/dev/null 2>&1; then
echo "PATCHED: luksmeta not installed on this host"
exit 0
fi
# Get installed version via package manager
ver=""
if command -v rpm >/dev/null 2>&1; then
ver=$(rpm -q --qf '%{VERSION}-%{RELEASE}\n' luksmeta 2>/dev/null | head -n1)
elif command -v dpkg-query >/dev/null 2>&1; then
ver=$(dpkg-query -W -f='${Version}\n' luksmeta 2>/dev/null)
fi
if [ -z "$ver" ]; then
echo "UNKNOWN: luksmeta present but version not resolvable"
exit 2
fi
echo "INFO: luksmeta version detected: $ver"
# Check for any LUKS1 volumes on the host
luks1_found=0
if command -v lsblk >/dev/null 2>&1 && command -v cryptsetup >/dev/null 2>&1; then
while read -r dev; do
[ -b "/dev/$dev" ] || continue
if cryptsetup isLuks "/dev/$dev" 2>/dev/null; then
v=$(cryptsetup luksDump "/dev/$dev" 2>/dev/null | awk -F: '/Version/ {gsub(/ /,"",$2); print $2; exit}')
if [ "$v" = "1" ]; then
echo "INFO: LUKS1 volume found at /dev/$dev"
luks1_found=1
fi
fi
done < <(lsblk -ndo NAME)
fi
# Heuristic: check vendor errata marker (RHEL-style changelog tag)
patched=0
if command -v rpm >/dev/null 2>&1; then
if rpm -q --changelog luksmeta 2>/dev/null | grep -qiE 'CVE-2025-11568|luks1.*bounds'; then
patched=1
fi
fi
if [ "$patched" -eq 1 ]; then
echo "PATCHED: vendor errata for CVE-2025-11568 detected in changelog"
exit 0
fi
if [ "$luks1_found" -eq 0 ]; then
echo "PATCHED: no LUKS1 volumes on this host — bug unreachable"
exit 0
fi
echo "VULNERABLE: unpatched luksmeta ($ver) present with LUKS1 volume — apply distro errata"
exit 1
If you remember one thing.
luksmeta errata into your standard monthly distro patch cadence. Monday morning: (1) inventory luksmeta-installed hosts and which still carry LUKS1 volumes — almost certainly a single-digit percentage of your fleet, (2) ensure every encrypted volume has a current cryptsetup luksHeaderBackup stored off-host, and (3) put LUKS1 → LUKS2 conversion on the platform team's roadmap independent of this CVE. Do not page anyone over this; do not file an emergency change.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.