Files
vuln-cve/data/2026/90xxx/CVE-2026-90203.json
T

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"
}
}
}
}