Files
vuln-cve/data/2022/49xxx/CVE-2022-49340.json
T

277 lines
15 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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"
}
}
}
}