264 lines
15 KiB
JSON
264 lines
15 KiB
JSON
{
|
|
"dataType": "CVE_RECORD",
|
|
"dataVersion": "5.2",
|
|
"cveMetadata": {
|
|
"cveId": "CVE-2026-90203",
|
|
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
|
|
"state": "PUBLISHED",
|
|
"assignerShortName": "Linux",
|
|
"dateReserved": "2026-09-11T19:38:34.792Z",
|
|
"datePublished": "2026-09-17T16:07:20.180Z",
|
|
"dateUpdated": "2026-10-19T08:59:39.333Z"
|
|
},
|
|
"containers": {
|
|
"cna": {
|
|
"providerMetadata": {
|
|
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
|
|
"shortName": "Linux",
|
|
"dateUpdated": "2026-10-19T08:59:39.333Z"
|
|
},
|
|
"descriptions": [
|
|
{
|
|
"lang": "en",
|
|
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nSquashfs: check block offset is not negative\n\nIf a negative offset is read off disk (for example the offset into the\ndecompressed fragment block), this will cause squashfs_copy_data() to\nperform an out of bounds access.\n\nFix by checking if offset is negative, and returning 0. This matches\nexisting behaviour where an offset beyond the block returns 0 bytes\ncopied.\n\nTo trigger this out of bounds access requires a crafted Squashfs\nfilesystem and CAP_SYS_ADMIN to mount it. Unprivileged users will not be\nable to mount such a filesystem, but once mounted, an unprivileged user\ncan trigger the out of bounds access by reading the crafted file with the\nnegative offset."
|
|
}
|
|
],
|
|
"metrics": [
|
|
{
|
|
"cvssV3_1": {
|
|
"version": "3.1",
|
|
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:H",
|
|
"baseScore": 7.1,
|
|
"baseSeverity": "HIGH"
|
|
},
|
|
"scenarios": [
|
|
{
|
|
"lang": "en",
|
|
"value": "AV:L - The bad bytes are squashfs_reg_inode.offset/squashfs_lreg_inode.offset, stored by squashfs_read_inode() as fragment_offset and used by squashfs_read_folio()/squashfs_readahead_fragment() → squashfs_copy_data() on a loop/block-backed image. That field is on-disk fragment metadata, not a network protocol message; squashfs_fs_type is FS_REQUIRES_DEV.\nAC:L - squashfs_read_inode() assigns le32_to_cpu(sqsh_ino->offset) to signed int fragment_offset with no range check, so a high-bit-set on-disk value is negative. read() of that file's tail (generic_file_read_iter → squashfs_read_folio) then calls squashfs_copy_data() with that offset; there is no race.\nPR:N - squashfs_fs_type has no FS_USERNS_MOUNT, so mount_capable() needs init-namespace CAP_SYS_ADMIN, but the attacker who crafts the image needs no account. After that privileged mount, an unprivileged read of the crafted file is enough; the mount is scored as User Interaction, not Privileges Required.\nUI:R - The negative fragment_offset exists only in an attacker-supplied Squashfs image, and squashfs_copy_data() runs only after that image is mounted and the crafted file is read. The mount is the required victim action; a standing snapd or live-image setup does not remove it.\nS:U - squashfs_copy_data() indexes the fragment cache's kmalloc'd data[] array and memcpy's into the file's own page-cache folio in the same kernel. This is not a KVM/Xen guest-to-host escape or an IOMMU/DMA bypass.\nC:H - A negative offset makes squashfs_copy_data() evaluate entry->data[offset/PAGE_SIZE] before the kcalloc'd pointer array, then memcpy up to PAGE_SIZE bytes from that address into the folio returned by read(). That is an unbounded OOB kernel read into userspace, not a few-byte leak.\nI:N - The memcpy destination is the kmap of the crafted file's own folio in squashfs_fill_page()/squashfs_readahead_fragment(); the source is the OOB pointer. Length is capped by avail (≤PAGE_SIZE), so this path does not write kernel objects out of bounds.\nA:H - Indexing entry->data[] with a negative offset/PAGE_SIZE and memcpy from the resulting pointer is the same squashfs_copy_data() out-of-bounds access that produced a general protection fault in CVE-2026-23388; an unmapped address oopses the kernel."
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"affected": [
|
|
{
|
|
"product": "Linux",
|
|
"vendor": "Linux",
|
|
"defaultStatus": "unaffected",
|
|
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
|
|
"programFiles": [
|
|
"fs/squashfs/cache.c"
|
|
],
|
|
"versions": [
|
|
{
|
|
"version": "f400e12656ab518be107febfe2315fb1eab5a342",
|
|
"lessThan": "b169185d5c672b989985c6c2e38cafab2548ba88",
|
|
"status": "affected",
|
|
"versionType": "git"
|
|
},
|
|
{
|
|
"version": "f400e12656ab518be107febfe2315fb1eab5a342",
|
|
"lessThan": "c2a126fca820ae74872da28de68dc74d4595dc4b",
|
|
"status": "affected",
|
|
"versionType": "git"
|
|
},
|
|
{
|
|
"version": "f400e12656ab518be107febfe2315fb1eab5a342",
|
|
"lessThan": "95dadf366c117dcdca78a570e6832071deab1ecd",
|
|
"status": "affected",
|
|
"versionType": "git"
|
|
},
|
|
{
|
|
"version": "f400e12656ab518be107febfe2315fb1eab5a342",
|
|
"lessThan": "3d2f0cb66c909ea2312cdef465165bb9a3ba2d84",
|
|
"status": "affected",
|
|
"versionType": "git"
|
|
},
|
|
{
|
|
"version": "f400e12656ab518be107febfe2315fb1eab5a342",
|
|
"lessThan": "bbb2218eb072b0a15dc063929200183bd23c2344",
|
|
"status": "affected",
|
|
"versionType": "git"
|
|
},
|
|
{
|
|
"version": "f400e12656ab518be107febfe2315fb1eab5a342",
|
|
"lessThan": "d0a3729d464fcf516416a41cf304c0c92126ee03",
|
|
"status": "affected",
|
|
"versionType": "git"
|
|
},
|
|
{
|
|
"version": "f400e12656ab518be107febfe2315fb1eab5a342",
|
|
"lessThan": "e4afd90bc7bf3dd477970c6c42bdd29ad3fda7fe",
|
|
"status": "affected",
|
|
"versionType": "git"
|
|
},
|
|
{
|
|
"version": "f400e12656ab518be107febfe2315fb1eab5a342",
|
|
"lessThan": "e300eb5002925b29be803d2661af07266cfa267e",
|
|
"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/squashfs/cache.c"
|
|
],
|
|
"versions": [
|
|
{
|
|
"version": "2.6.29",
|
|
"status": "affected"
|
|
},
|
|
{
|
|
"version": "0",
|
|
"lessThan": "2.6.29",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "5.10.270",
|
|
"lessThanOrEqual": "5.10.*",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "5.15.221",
|
|
"lessThanOrEqual": "5.15.*",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "6.1.188",
|
|
"lessThanOrEqual": "6.1.*",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "6.6.157",
|
|
"lessThanOrEqual": "6.6.*",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "6.12.110",
|
|
"lessThanOrEqual": "6.12.*",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "6.18.52",
|
|
"lessThanOrEqual": "6.18.*",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "7.2.6",
|
|
"lessThanOrEqual": "7.2.*",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "7.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.29",
|
|
"versionEndExcluding": "5.10.270"
|
|
},
|
|
{
|
|
"vulnerable": true,
|
|
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
|
"versionStartIncluding": "2.6.29",
|
|
"versionEndExcluding": "5.15.221"
|
|
},
|
|
{
|
|
"vulnerable": true,
|
|
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
|
"versionStartIncluding": "2.6.29",
|
|
"versionEndExcluding": "6.1.188"
|
|
},
|
|
{
|
|
"vulnerable": true,
|
|
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
|
"versionStartIncluding": "2.6.29",
|
|
"versionEndExcluding": "6.6.157"
|
|
},
|
|
{
|
|
"vulnerable": true,
|
|
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
|
"versionStartIncluding": "2.6.29",
|
|
"versionEndExcluding": "6.12.110"
|
|
},
|
|
{
|
|
"vulnerable": true,
|
|
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
|
"versionStartIncluding": "2.6.29",
|
|
"versionEndExcluding": "6.18.52"
|
|
},
|
|
{
|
|
"vulnerable": true,
|
|
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
|
"versionStartIncluding": "2.6.29",
|
|
"versionEndExcluding": "7.2.6"
|
|
},
|
|
{
|
|
"vulnerable": true,
|
|
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
|
"versionStartIncluding": "2.6.29",
|
|
"versionEndExcluding": "7.3"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"references": [
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/b169185d5c672b989985c6c2e38cafab2548ba88"
|
|
},
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/c2a126fca820ae74872da28de68dc74d4595dc4b"
|
|
},
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/95dadf366c117dcdca78a570e6832071deab1ecd"
|
|
},
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/3d2f0cb66c909ea2312cdef465165bb9a3ba2d84"
|
|
},
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/bbb2218eb072b0a15dc063929200183bd23c2344"
|
|
},
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/d0a3729d464fcf516416a41cf304c0c92126ee03"
|
|
},
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/e4afd90bc7bf3dd477970c6c42bdd29ad3fda7fe"
|
|
},
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/e300eb5002925b29be803d2661af07266cfa267e"
|
|
}
|
|
],
|
|
"title": "Squashfs: check block offset is not negative",
|
|
"x_generator": {
|
|
"engine": "bippy-1.2.0"
|
|
}
|
|
}
|
|
}
|
|
} |