Files
vuln-cve/data/2026/68xxx/CVE-2026-68462.json
T

138 lines
8.5 KiB
JSON

{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-68462",
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"state": "PUBLISHED",
"assignerShortName": "Linux",
"dateReserved": "2026-07-30T09:28:09.395Z",
"datePublished": "2026-08-15T05:51:21.948Z",
"dateUpdated": "2026-08-17T05:39:09.532Z"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-08-17T05:39:09.532Z"
},
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Reject negative const offsets for buffer pointers\n\nThe verifier rejects variable offsets for PTR_TO_TP_BUFFER and PTR_TO_BUF\naccesses, but it currently accepts a constant negative offset produced by\npointer arithmetic.\n\nCommit 022ac0750883 (\"bpf: use reg->var_off instead of reg->off for\npointers\") moved constant pointer offsets from reg->off to reg->var_off.\nHowever, __check_buffer_access() continued to check only the instruction\noffset. An access with reg->var_off equal to -8 and an instruction offset\nof zero therefore passes verification.\n\nFor writable raw tracepoints, the access end is also calculated from the\nunsigned reg->var_off.value. An eight-byte access starting at -8 wraps\nthe calculated end to zero, allowing the program to load and attach\nwithout increasing max_tp_access.\n\nAfter ensuring that reg->var_off is constant, calculate the effective\naccess start using signed arithmetic and reject it when it is negative.\nUse the validated start to calculate the access end for both\nPTR_TO_TP_BUFFER and PTR_TO_BUF."
}
],
"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 in bpf_check() during bpf(BPF_PROG_LOAD); the path is bpf_prog_load() → bpf_check() → check_mem_access() → __check_buffer_access() on PTR_TO_TP_BUFFER/PTR_TO_BUF. Per kernel CNA guidance BPF verifier bugs are Local, not network-reachable.\nAC:L - Exploitation is deterministic: pointer arithmetic (e.g. r6 += -8) yields a constant negative reg->var_off that passes the insn-only check, and unsigned wrap sets max_tp_access/max_rdwr_access to zero. The attacker fully controls program bytecode and triggering with no race or layout dependency.\nPR:L - Affected BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE and BPF_PROG_TYPE_TRACING/BPF_TRACE_ITER programs require CAP_BPF and CAP_PERFMON checked by bpf_token_capable(); BPF tokens delegate these capabilities into a non-init user namespace, so a namespace-local actor can reach bpf_prog_load without init-namespace root.\nUI:N - No victim interaction is required; after loading and attaching the malicious program the attacker triggers execution by reading a BPF iterator fd or causing a writable raw tracepoint to fire, entirely through their own syscalls.\nS:U - The verifier bypass permits out-of-bounds kernel reads/writes adjacent to tracepoint or iterator buffers within the same host kernel security authority; impact is standard kernel memory corruption and privilege escalation, not a VM, container, or IOMMU boundary crossing.\nC:H - Verified loads at negative offsets read up to eight bytes before PTR_TO_TP_BUFFER or PTR_TO_BUF targets, disclosing adjacent kernel stack or kmalloc memory (map keys/values, tracepoint writable buffers); per guidance out-of-bounds kernel reads warrant High confidentiality impact.\nI:H - Writable raw tracepoint programs can store at negative offsets while max_tp_access wraps to zero, and PTR_TO_BUF iterator contexts allow verified writes before map value buffers; these out-of-bounds stores corrupt adjacent kernel memory with a plausible control-flow hijack primitive.\nA:H - Out-of-bounds kernel memory accesses from attached BPF programs commonly provoke kernel oops or panic; the attacker can repeatedly trigger iterator reads or writable raw tracepoints to deny host availability."
}
]
}
],
"affected": [
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "unaffected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"kernel/bpf/verifier.c"
],
"versions": [
{
"version": "022ac075088366b62e130da5e1b200bc93a47191",
"lessThan": "314bd592085c0720ef519f6edbc5f41440ff78d4",
"status": "affected",
"versionType": "git"
},
{
"version": "022ac075088366b62e130da5e1b200bc93a47191",
"lessThan": "fd4cfa8c8f9a17cdec0539334d28754bc1d8a5d9",
"status": "affected",
"versionType": "git"
}
]
},
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "affected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"kernel/bpf/verifier.c"
],
"versions": [
{
"version": "7.1",
"status": "affected"
},
{
"version": "0",
"lessThan": "7.1",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "7.1.5",
"lessThanOrEqual": "7.1.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "7.2",
"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": "7.1",
"versionEndExcluding": "7.1.5"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "7.1",
"versionEndExcluding": "7.2"
}
]
}
]
}
],
"references": [
{
"url": "https://git.kernel.org/stable/c/314bd592085c0720ef519f6edbc5f41440ff78d4"
},
{
"url": "https://git.kernel.org/stable/c/fd4cfa8c8f9a17cdec0539334d28754bc1d8a5d9"
}
],
"title": "bpf: Reject negative const offsets for buffer pointers",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
}
}