277 lines
15 KiB
JSON
277 lines
15 KiB
JSON
{
|
||
"dataType": "CVE_RECORD",
|
||
"dataVersion": "5.2",
|
||
"cveMetadata": {
|
||
"cveId": "CVE-2022-49340",
|
||
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
|
||
"state": "PUBLISHED",
|
||
"assignerShortName": "Linux",
|
||
"dateReserved": "2025-02-26T02:08:31.541Z",
|
||
"datePublished": "2025-02-26T02:10:57.322Z",
|
||
"dateUpdated": "2026-08-05T08:54:49.092Z"
|
||
},
|
||
"containers": {
|
||
"cna": {
|
||
"providerMetadata": {
|
||
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
|
||
"shortName": "Linux",
|
||
"dateUpdated": "2026-08-05T08:54:49.092Z"
|
||
},
|
||
"descriptions": [
|
||
{
|
||
"lang": "en",
|
||
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nip_gre: test csum_start instead of transport header\n\nGRE with TUNNEL_CSUM will apply local checksum offload on\nCHECKSUM_PARTIAL packets.\n\nipgre_xmit must validate csum_start after an optional skb_pull,\nelse lco_csum may trigger an overflow. The original check was\n\n\tif (csum && skb_checksum_start(skb) < skb->data)\n\t\treturn -EINVAL;\n\nThis had false positives when skb_checksum_start is undefined:\nwhen ip_summed is not CHECKSUM_PARTIAL. A discussed refinement\nwas straightforward\n\n\tif (csum && skb->ip_summed == CHECKSUM_PARTIAL &&\n\t skb_checksum_start(skb) < skb->data)\n\t\treturn -EINVAL;\n\nBut was eventually revised more thoroughly:\n- restrict the check to the only branch where needed, in an\n uncommon GRE path that uses header_ops and calls skb_pull.\n- test skb_transport_header, which is set along with csum_start\n in skb_partial_csum_set in the normal header_ops datapath.\n\nTurns out skbs can arrive in this branch without the transport\nheader set, e.g., through BPF redirection.\n\nRevise the check back to check csum_start directly, and only if\nCHECKSUM_PARTIAL. Do leave the check in the updated location.\nCheck field regardless of whether TUNNEL_CSUM is configured."
|
||
}
|
||
],
|
||
"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 defect is in ipgre_xmit’s header_ops TX path (local send via the GRE netdev, AF_PACKET/splice, or BPF redirect into that device), not in GRE receive or any remote packet parser.\nAC:L - An attacker who can create/use an NBMA/header_ops GRE device with TUNNEL_CSUM and submit a CHECKSUM_PARTIAL skb whose csum_start falls in the pulled region can trigger the bad lco_csum length deterministically; syzbot reproduced the class of crash without races.\nPR:L - Creating or configuring the GRE tunnel and driving the path needs CAP_NET_ADMIN (and often CAP_NET_RAW for packet sockets), both obtainable in a user namespace, so only unprivileged userns access is required—not real init-ns root.\nUI:N - The attacker opens the netns, sets up the tunnel, and sends the crafted skb themselves; no separate victim action is required.\nS:U - Impact stays inside the same host kernel authority (OOB read/oops on that machine’s networking stack); it is not a VM escape, IOMMU bypass, or other cross-boundary break.\nC:H - When csum_start sits before the post-pull/GRE transport header, csum_start-l4_hdr becomes a huge unsigned length into do_csum/csum_partial, yielding an unbounded out-of-bounds read of kernel memory (not a few fixed bytes), scored Confidentiality High per OOB-read guidance.\nI:N - The failure is a pure over-read while building the GRE checksum; there is no OOB write, UAF, or other corruption that yields an arbitrary-write or control-flow hijack primitive.\nA:H - The same huge-length csum_partial walk hits unmapped pages and produces a kernel paging-fault oops/panic (as in the syzbot report), fully denying availability."
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"affected": [
|
||
{
|
||
"product": "Linux",
|
||
"vendor": "Linux",
|
||
"defaultStatus": "unaffected",
|
||
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
|
||
"programFiles": [
|
||
"net/ipv4/ip_gre.c"
|
||
],
|
||
"versions": [
|
||
{
|
||
"version": "774430026bd9a472d08c5d3c33351a782315771a",
|
||
"lessThan": "7596bd7920985f7fc8579a92e48bc53ce4475b21",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "3d32ce5472bb2ca720bef84089b85f76a705fd1a",
|
||
"lessThan": "3d08bc3a5d9b2106f5c8bcf1adb73147824aa006",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "87b34cd6485192777f632f92d592f2a71d8801a6",
|
||
"lessThan": "fbeb8dfa8b87ef259eef0c89e39b53962a3cf604",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "8a0ed250f911da31a2aef52101bc707846a800ff",
|
||
"lessThan": "e6b6f98fc7605c06c0a3baa70f62c534d7b4ce58",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "8a0ed250f911da31a2aef52101bc707846a800ff",
|
||
"lessThan": "0c92d813c7c9ca2212ecd879232e7d87362fce98",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "8a0ed250f911da31a2aef52101bc707846a800ff",
|
||
"lessThan": "0ffa268724656633af5f37a38c212326d98ebe8c",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "8a0ed250f911da31a2aef52101bc707846a800ff",
|
||
"lessThan": "8d21e9963bec1aad2280cdd034c8993033ef2948",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "4bf5d5224ffca069df4501ba5fcc6ded9c002ead",
|
||
"status": "affected",
|
||
"versionType": "git"
|
||
},
|
||
{
|
||
"version": "4.19.207",
|
||
"lessThan": "4.19.247",
|
||
"status": "affected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.4.148",
|
||
"lessThan": "5.4.198",
|
||
"status": "affected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.10.68",
|
||
"lessThan": "5.10.122",
|
||
"status": "affected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.14.7",
|
||
"lessThan": "5.15",
|
||
"status": "affected",
|
||
"versionType": "semver"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"product": "Linux",
|
||
"vendor": "Linux",
|
||
"defaultStatus": "affected",
|
||
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
|
||
"programFiles": [
|
||
"net/ipv4/ip_gre.c"
|
||
],
|
||
"versions": [
|
||
{
|
||
"version": "5.15",
|
||
"status": "affected"
|
||
},
|
||
{
|
||
"version": "0",
|
||
"lessThan": "5.15",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "4.19.247",
|
||
"lessThanOrEqual": "4.19.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.4.198",
|
||
"lessThanOrEqual": "5.4.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.10.122",
|
||
"lessThanOrEqual": "5.10.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.15.47",
|
||
"lessThanOrEqual": "5.15.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.17.15",
|
||
"lessThanOrEqual": "5.17.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.18.4",
|
||
"lessThanOrEqual": "5.18.*",
|
||
"status": "unaffected",
|
||
"versionType": "semver"
|
||
},
|
||
{
|
||
"version": "5.19",
|
||
"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": "4.19.207",
|
||
"versionEndExcluding": "4.19.247"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "5.4.148",
|
||
"versionEndExcluding": "5.4.198"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "5.10.68",
|
||
"versionEndExcluding": "5.10.122"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "5.15",
|
||
"versionEndExcluding": "5.15.47"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "5.15",
|
||
"versionEndExcluding": "5.17.15"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "5.15",
|
||
"versionEndExcluding": "5.18.4"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "5.15",
|
||
"versionEndExcluding": "5.19"
|
||
},
|
||
{
|
||
"vulnerable": true,
|
||
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
||
"versionStartIncluding": "5.14.7"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"references": [
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/7596bd7920985f7fc8579a92e48bc53ce4475b21"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/3d08bc3a5d9b2106f5c8bcf1adb73147824aa006"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/fbeb8dfa8b87ef259eef0c89e39b53962a3cf604"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/e6b6f98fc7605c06c0a3baa70f62c534d7b4ce58"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/0c92d813c7c9ca2212ecd879232e7d87362fce98"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/0ffa268724656633af5f37a38c212326d98ebe8c"
|
||
},
|
||
{
|
||
"url": "https://git.kernel.org/stable/c/8d21e9963bec1aad2280cdd034c8993033ef2948"
|
||
}
|
||
],
|
||
"title": "ip_gre: test csum_start instead of transport header",
|
||
"x_generator": {
|
||
"engine": "bippy-1.2.0"
|
||
}
|
||
}
|
||
}
|
||
} |