udf: validate free block extents against the partition length
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 5.10.261, 5.15.212, 6.1.178, 6.6.145, 4.20, and 5 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: no
- Technical impact: total
Summary
In the Linux kernel, the following vulnerability has been resolved: udf: validate free block extents against the partition length udf_free_blocks() checks the logical block number and count against the partition length, but drops the extent offset from that final bound. A crafted extent can pass the guard while logicalBlockNum + offset + count points past the partition, which later indexes past the space bitmap array. A single ftruncate(2) on a file backed by such an extent reliably panics the kernel. This is a local availability issue. On desktop systems where UDisks/polkit allows the active user to mount removable UDF media without CAP_SYS_ADMIN, an unprivileged local user can supply the crafted filesystem and trigger the panic by truncating a writable file on it. Systems that require root or CAP_SYS_ADMIN to mount the image have a higher prerequisite. No confidentiality or integrity impact is claimed: the reproduced primitive is an out-of-bounds read of a bitmap pointer slot followed by a kernel panic. Use the already computed logicalBlockNum + offset + count value for the partition length check. Also make load_block_bitmap() reject an out-of-range block group before indexing s_block_bitmap[], so corrupted callers cannot walk past the flexible array.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From 934f815345c09c290a9b9a9cfdddc203ec2117e8 · fixed in fdd6229d2ae9914c1f25d1041db0f4f312a4fa76; From 22cc7323f090646c8cfb5939e6f15bdc2ed3fd27 · fixed in b54aee5652fcd7c23a0904a4623ec462c3edc70c; From 7c4fa9ebfce69619d132fe703dc2e2cf62a13723 · fixed in 12af328d2ee8d68e81ba612246d0b54b22d23e1f; From 5cc9745e2ea11aef7d5c9a42bc36f6cd3e1b4cc3 · fixed in fb49099206c5c57af28a157249fa7bcb5518f99e; From 56e69e59751d20993f243fb7dd6991c4e522424c · fixed in 9442d75429b0c556292a7454fe888d54259f5240; From 56e69e59751d20993f243fb7dd6991c4e522424c · fixed in 335202ab25b01fdd45889ff25eab70864686dea3; From 56e69e59751d20993f243fb7dd6991c4e522424c · fixed in be87de7789a82a030a4896bc7683415ec9fa6f2b; From 56e69e59751d20993f243fb7dd6991c4e522424c · fixed in 5f0419457f89dce1a3f1c8e62a3adf2f39ab8168; From 5.10.224 · fixed in 5.10.261; From 5.15.165 · fixed in 5.15.212; From 6.1.105 · fixed in 6.1.178; From 6.6.46 · fixed in 6.6.145; From 4.19.320 · fixed in 4.20; From 5.4.282 · fixed in 5.5; From 6.10.5 · fixed in 6.11
- Linux Linux
6.11
- KernelLinux
fixed in 5.10.261; From 5.11.0 · fixed in 5.15.212; From 5.16.0 · fixed in 6.1.178; From 6.2.0 · fixed in 6.6.145; From 6.7.0 · fixed in 6.12.96; From 6.11.0 · fixed in 6.18.39; From 6.13.0 · fixed in 7.1.4
References 8
git.kernel.org
- stable/c/fdd6229d2ae9914c1f25d1041db0f4f312a4fa76
- stable/c/b54aee5652fcd7c23a0904a4623ec462c3edc70c
- stable/c/12af328d2ee8d68e81ba612246d0b54b22d23e1f
- stable/c/fb49099206c5c57af28a157249fa7bcb5518f99e
- stable/c/9442d75429b0c556292a7454fe888d54259f5240
- stable/c/335202ab25b01fdd45889ff25eab70864686dea3
- stable/c/be87de7789a82a030a4896bc7683415ec9fa6f2b
- stable/c/5f0419457f89dce1a3f1c8e62a3adf2f39ab8168