{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2023-53506", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-10-01T11:39:39.405Z", "datePublished": "2025-10-01T11:45:56.616Z", "dateUpdated": "2026-08-05T09:14:31.825Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T09:14:31.825Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nudf: Do not bother merging very long extents\n\nWhen merging very long extents we try to push as much length as possible\nto the first extent. However this is unnecessarily complicated and not\nreally worth the trouble. Furthermore there was a bug in the logic\nresulting in corrupting extents in the file as syzbot reproducer shows.\nSo just don't bother with the merging of extents that are too long\ntogether." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The bug is reached through ordinary filesystem operations (ftruncate/write → udf_get_block → inode_getblk → udf_merge_extents) on a mounted UDF filesystem, requiring local access to the system; there is no network-facing path into fs/udf/inode.c.\nAC:L - The trigger is fully deterministic and attacker-controlled: create a sparse file, ftruncate it so udf_do_extend_file lays down 1GB-sized hole extents, then write one block near the end of the first hole so udf_split_extents leaves a small hole followed by a ~1GB hole; the sum exceeds UDF_EXTENT_LENGTH_MASK and the sign-inverted arithmetic (lip1->extLength - li_len + UDF_EXTENT_LENGTH_MASK) carries into the two type bits every time lip1_len > li_len. No race, no memory-layout luck, no rare config (CONFIG_UDF_FS is enabled/modular in essentially all distro kernels and autoloads on mount).\nPR:L - Any unprivileged local user with write access to a mounted read-write UDF filesystem (a UDF-formatted USB stick or DVD-RAM auto-mounted by udisks2, or any UDF partition) can trigger it with plain truncate()/write() calls — no capability is checked anywhere on the path. The alternative crafted-image route (syzbot's) needs mount privileges, so the unprivileged write path is the more severe and still fully defensible framing.\nUI:N - In the unprivileged-write scenario the attacker performs everything themselves on an already-mounted filesystem; no victim has to mount anything, open a file, or take any other action.\nS:U - The corruption is confined to the kernel's own security authority — the UDF inode metadata and the block device backing it — and does not cross a VM, IOMMU, or sandbox boundary.\nC:H - The botched arithmetic carries into the extent type field, converting a hole extent into EXT_NEXT_EXTENT_ALLOCDESCS (or EXT_RECORDED_ALLOCATED) pointing at an attacker-influenced partition block, so udf_next_aext follows it and udf_current_aext parses it with an entirely unvalidated lengthAllocDescs (the same defect later assigned CVE-2025-40044) — yielding out-of-bounds reads of kernel slab memory past the buffer_head and a file that maps arbitrary blocks of the device, exposing other users' file data and filesystem metadata.\nI:H - The corrupted extents are persisted to disk by udf_update_extents/udf_write_aext, giving the file write access to blocks it does not own, and the same paths call udf_free_blocks() with lengths derived from the corrupted extents — freeing in-use blocks of other files so they get handed out again, producing arbitrary cross-file and metadata corruption from an unprivileged user.\nA:H - Walking the type-confused extent list drives the kernel into the indirect-extent handling in udf_truncate_extents(), which contains BUG_ON(!epos.bh) and BUG() sites, and the inflated extent lengths desynchronize i_lenExtents from i_size, causing oopses, bitmap corruption, and an unusable filesystem." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/udf/inode.c" ], "versions": [ { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "d52252a1de4cf96a34f722b0cd8902d8ff78eb57", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "5d029799d381a9ee06209a222cae75f04c5d5304", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "3d20e3b768aff32112bdce8d3219d923ae75f9f1", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "965982feb333aefa9256c0fe188b5f1b958aef63", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "9a8d602f0723586e668bae7e65c832ceb9bcc8bc", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "adac9ac6d2e04ea0782b91a00ba10706002f3ec4", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "7a965da79f2d22601f329cbfce588386b0847544", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "53cafe1d6d8ef9f93318e5bfccc0d24f27d41ced", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/udf/inode.c" ], "versions": [ { "version": "2.6.12", "status": "affected" }, { "version": "0", "lessThan": "2.6.12", "status": "unaffected", "versionType": "semver" }, { "version": "4.14.308", "lessThanOrEqual": "4.14.*", "status": "unaffected", "versionType": "semver" }, { "version": "4.19.276", "lessThanOrEqual": "4.19.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.4.235", "lessThanOrEqual": "5.4.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.10.173", "lessThanOrEqual": "5.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.15.99", "lessThanOrEqual": "5.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.16", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.2.3", "lessThanOrEqual": "6.2.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.3", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "4.14.308" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "4.19.276" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "5.4.235" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "5.10.173" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "5.15.99" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "6.1.16" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "6.2.3" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "6.3" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/d52252a1de4cf96a34f722b0cd8902d8ff78eb57" }, { "url": "https://git.kernel.org/stable/c/5d029799d381a9ee06209a222cae75f04c5d5304" }, { "url": "https://git.kernel.org/stable/c/3d20e3b768aff32112bdce8d3219d923ae75f9f1" }, { "url": "https://git.kernel.org/stable/c/965982feb333aefa9256c0fe188b5f1b958aef63" }, { "url": "https://git.kernel.org/stable/c/9a8d602f0723586e668bae7e65c832ceb9bcc8bc" }, { "url": "https://git.kernel.org/stable/c/adac9ac6d2e04ea0782b91a00ba10706002f3ec4" }, { "url": "https://git.kernel.org/stable/c/7a965da79f2d22601f329cbfce588386b0847544" }, { "url": "https://git.kernel.org/stable/c/53cafe1d6d8ef9f93318e5bfccc0d24f27d41ced" } ], "title": "udf: Do not bother merging very long extents", "x_generator": { "engine": "bippy-1.2.0" } } } }