285 lines
15 KiB
JSON
285 lines
15 KiB
JSON
{
|
||
"dataType": "CVE_RECORD",
|
||
"dataVersion": "5.2",
|
||
"cveMetadata": {
|
||
"cveId": "CVE-2023-54284",
|
||
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
|
||
"state": "PUBLISHED",
|
||
"assignerShortName": "Linux",
|
||
"dateReserved": "2025-12-30T12:06:44.525Z",
|
||
"datePublished": "2025-12-30T12:23:25.116Z",
|
||
"dateUpdated": "2026-08-05T09:18:55.094Z"
|
||
},
|
||
"containers": {
|
||
"cna": {
|
||
"providerMetadata": {
|
||
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
|
||
"shortName": "Linux",
|
||
"dateUpdated": "2026-08-05T09:18:55.094Z"
|
||
},
|
||
"descriptions": [
|
||
{
|
||
"lang": "en",
|
||
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmedia: av7110: prevent underflow in write_ts_to_decoder()\n\nThe buf[4] value comes from the user via ts_play(). It is a value in\nthe u8 range. The final length we pass to av7110_ipack_instant_repack()\nis \"len - (buf[4] + 1) - 4\" so add a check to ensure that the length is\nnot negative. It's not clear that passing a negative len value does\nanything bad necessarily, but it's not best practice.\n\nWith the new bounds checking the \"if (!len)\" condition is no longer\npossible or required so remove that."
|
||
}
|
||
],
|
||
"metrics": [
|
||
{
|
||
"cvssV3_1": {
|
||
"version": "3.1",
|
||
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H",
|
||
"baseScore": 7.1,
|
||
"baseSeverity": "HIGH"
|
||
},
|
||
"scenarios": [
|
||
{
|
||
"lang": "en",
|
||
"value": "AV:L - The vulnerable code is reached only by writing crafted MPEG-TS packets to local DVB character devices (`/dev/dvb/adapterN/video0`, `audio0`, or `dvr0`) via `ts_play()`/`dvbdmx_write()`. No network or remote peer is involved.\nAC:L - The attacker directly supplies `buf[3]` (ADAPT_FIELD flag) and `buf[4]` (adaptation length 184–255) in the 188-byte packet, so the underflow triggers deterministically; the preceding ipack state (`mpeg=1, found=7, which=0, check=0x40`) is set up with one prior well-formed packet, with no race or uncontrolled condition.\nPR:L - Only an open file descriptor on the DVB device node is needed — `dvb_video_ioctl()` applies no capability check to `VIDEO_SELECT_SOURCE`, and `dvb_dvr_write()`/`dvbdmx_write()` require no privilege. Any unprivileged user in the `video` group, or the unprivileged media process on a DVB appliance, can trigger it.\nUI:N - Exploitation is entirely self-contained in the attacker's own `open()`/`ioctl()`/`write()` sequence; no victim action or interaction is required.\nS:U - The overread and state corruption stay within the kernel's own security authority in the av7110 driver; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - The negative length defeats the `c < count` guards in the PES-header path of `av7110_ipack_instant_repack()`, letting the attacker read kernel memory at a self-chosen offset 1–72 bytes past the end of the 188-byte packet — via the `dvr0`/`memdup_user()` path that is adjacent slab data past a kmalloc-192 object, repeatable to sweep the whole window into the decoder stream.\nI:N - All `write_ipack()` copies remain clamped by `p->size`, and the `u32` comparisons against `p->plength` prevent `p->found` from going negative, so no out-of-bounds or attacker-controlled write primitive exists.\nA:H - The out-of-bounds slab read past a kmalloc-192 object can fault or trip KASAN/KFENCE/DEBUG_PAGEALLOC guard pages, panicking the kernel, and the same malformed packet drives `p->found` past `p->plength + 6`, permanently wedging the A/V decoder feed until the device is reset."
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"affected": [
|
||
{
|
||
"product": "Linux",
|
||
"vendor": "Linux",
|
||
"defaultStatus": "unaffected",
|
||
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
|
||
"programFiles": [
|
||
"drivers/staging/media/av7110/av7110_av.c"
|
||
],
|
||
"versions": [
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "6680af5be9f08d830567e9118f76d3e64684db8f",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "6606e2404ee9e20a3ae5b42fc3660d41b739ed3e",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "620b983589e0223876bf1463b01100a9c67b56ba",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "86ba65e5357bfbb6c082f68b265a292ee1bdde1d",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "ca4ce92e3ec9fd3c7c936b912b95c53331d5159c",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "423350af9e27f005611bd881b1df2cab66de943d",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "77eeb4732135c18c2fdfab80839645b393f3e774",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "7b93ab60fe9ed04be0ff155bc30ad39dea23e22b",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "fd46d16d602ab7fd53cef7ff55b9dcb0b47ad3bf",
|
||
"lessThan": "eed9496a0501357aa326ddd6b71408189ed872eb",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"product": "Linux",
|
||
"vendor": "Linux",
|
||
"defaultStatus": "affected",
|
||
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
|
||
"programFiles": [
|
||
"drivers/staging/media/av7110/av7110_av.c"
|
||
],
|
||
"versions": [
|
||
{
|
||
"version": "2.6.31",
|
||
"status": "affected"
|
||
},
|
||
{
|
||
"version": "0",
|
||
"lessThan": "2.6.31",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "4.14.315",
|
||
"lessThanOrEqual": "4.14.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "4.19.283",
|
||
"lessThanOrEqual": "4.19.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.4.243",
|
||
"lessThanOrEqual": "5.4.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.10.211",
|
||
"lessThanOrEqual": "5.10.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.15.111",
|
||
"lessThanOrEqual": "5.15.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "6.1.28",
|
||
"lessThanOrEqual": "6.1.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "6.2.15",
|
||
"lessThanOrEqual": "6.2.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "6.3.2",
|
||
"lessThanOrEqual": "6.3.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "6.4",
|
||
"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.31",
|
||
"versionEndExcluding": "4.14.315"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "2.6.31",
|
||
"versionEndExcluding": "4.19.283"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "2.6.31",
|
||
"versionEndExcluding": "5.4.243"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "2.6.31",
|
||
"versionEndExcluding": "5.10.211"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "2.6.31",
|
||
"versionEndExcluding": "5.15.111"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "2.6.31",
|
||
"versionEndExcluding": "6.1.28"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "2.6.31",
|
||
"versionEndExcluding": "6.2.15"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "2.6.31",
|
||
"versionEndExcluding": "6.3.2"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "2.6.31",
|
||
"versionEndExcluding": "6.4"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"references": [
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/6680af5be9f08d830567e9118f76d3e64684db8f"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/6606e2404ee9e20a3ae5b42fc3660d41b739ed3e"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/620b983589e0223876bf1463b01100a9c67b56ba"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/86ba65e5357bfbb6c082f68b265a292ee1bdde1d"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/ca4ce92e3ec9fd3c7c936b912b95c53331d5159c"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/423350af9e27f005611bd881b1df2cab66de943d"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/77eeb4732135c18c2fdfab80839645b393f3e774"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/7b93ab60fe9ed04be0ff155bc30ad39dea23e22b"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/eed9496a0501357aa326ddd6b71408189ed872eb"
|
||
}
|
||
],
|
||
"title": "media: av7110: prevent underflow in write_ts_to_decoder()",
|
||
"x_generator": {
|
||
"engine": "bippy-1.2.0"
|
||
}
|
||
}
|
||
}
|
||
} |