{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2023-53517", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-10-01T11:39:39.406Z", "datePublished": "2025-10-01T11:46:04.673Z", "dateUpdated": "2026-08-05T09:14:33.974Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T09:14:33.974Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ntipc: do not update mtu if msg_max is too small in mtu negotiation\n\nWhen doing link mtu negotiation, a malicious peer may send Activate msg\nwith a very small mtu, e.g. 4 in Shuang's testing, without checking for\nthe minimum mtu, l->mtu will be set to 4 in tipc_link_proto_rcv(), then\nn->links[bearer_id].mtu is set to 4294967228, which is a overflow of\n'4 - INT_H_SIZE - EMSG_OVERHEAD' in tipc_link_mss().\n\nWith tipc_link.mtu = 4, tipc_link_xmit() kept printing the warning:\n\n tipc: Too large msg, purging xmit list 1 5 0 40 4!\n tipc: Too large msg, purging xmit list 1 15 0 60 4!\n\nAnd with tipc_link_entry.mtu 4294967228, a huge skb was allocated in\nnamed_distribute(), and when purging it in tipc_link_xmit(), a crash\nwas even caused:\n\n general protection fault, probably for non-canonical address 0x2100001011000dd: 0000 [#1] PREEMPT SMP PTI\n CPU: 0 PID: 0 Comm: swapper/0 Kdump: loaded Not tainted 6.3.0.neta #19\n RIP: 0010:kfree_skb_list_reason+0x7e/0x1f0\n Call Trace:\n \n skb_release_data+0xf9/0x1d0\n kfree_skb_reason+0x40/0x100\n tipc_link_xmit+0x57a/0x740 [tipc]\n tipc_node_xmit+0x16c/0x5c0 [tipc]\n tipc_named_node_up+0x27f/0x2c0 [tipc]\n tipc_node_write_unlock+0x149/0x170 [tipc]\n tipc_rcv+0x608/0x740 [tipc]\n tipc_udp_recv+0xdc/0x1f0 [tipc]\n udp_queue_rcv_one_skb+0x33e/0x620\n udp_unicast_rcv_skb.isra.72+0x75/0x90\n __udp4_lib_rcv+0x56d/0xc20\n ip_protocol_deliver_rcu+0x100/0x2d0\n\nThis patch fixes it by checking the new mtu against tipc_bearer_min_mtu(),\nand not updating mtu if it is too small." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL" }, "scenarios": [ { "lang": "en", "value": "AV:N - The vulnerable code is reached from `tipc_udp_recv()` → `tipc_rcv()` → `tipc_link_proto_rcv()`, i.e. attacker-supplied TIPC link-protocol packets arriving on the UDP bearer (default port 6118), which is routable across networks — exactly the path in the reported crash trace. TIPC UDP bearers are used for clustered/cloud deployments spanning L3 segments, so no same-segment adjacency is required.\nAC:L - The attacker deterministically controls the whole sequence: send an unauthenticated LINK_CONFIG discovery packet to create the node/link, then reply to the peer's RESET with an ACTIVATE carrying `max_pkt = 4`, and the u32 underflow plus wrapped skb allocation follow with certainty. No race, no memory-layout luck, and the only preconditions (default net_id 4711, session numbers) are attacker-supplied or default.\nPR:N - TIPC neighbour discovery and link establishment are entirely unauthenticated — `tipc_disc_rcv()` validates only net_id and address scope, and `tipc_link_validate_msg()` only checks session numbers supplied by the same attacker. CONFIG_TIPC_CRYPTO is optional and unkeyed by default, so no credentials of any kind are needed.\nUI:N - The malicious ACTIVATE message is processed in softirq context on packet receive, and the resulting `tipc_named_node_up()` bulk publication is emitted automatically when the link comes up. No local user action is involved.\nS:U - The integer underflow, undersized skb allocation, and heap overflow all occur within the kernel's own security authority on the target node. No VM, IOMMU, or sandbox boundary is crossed.\nC:H - The wrapped `tipc_buf_acquire()` yields an skb whose `skb->len` is ~4 GiB while its backing slab object is only a few hundred bytes, and `skb->data` is placed past `skb->end`; the resulting heap corruption and oversized-length skb give an attacker leverage to read adjacent kernel heap memory. Per the memory-corruption guidance this warrants High.\nI:H - This is a genuine out-of-bounds heap write — `tipc_msg_init()`'s memset and the `publ_to_item()` loop write past the undersized buffer, corrupting `skb_shared_info` and neighbouring slab objects. The attacker tunes the wrap by choosing `msg_max_pkt` in 4-byte steps, selecting the target slab cache and write offset, which is a strong primitive for control-flow hijacking.\nA:H - The commit documents a reproducible `general protection fault ... kfree_skb_list_reason` from dereferencing the corrupted skb_shared_info, plus an endless \"Too large msg, purging xmit list\" storm that wedges the link. A remote unauthenticated attacker can panic the node at will." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "net/tipc/link.c" ], "versions": [ { "version": "ed193ece2649c194a87a9d8470195760d367c075", "lessThan": "2bd4ff4ffb92113f8acd04dbaed83269172c24b4", "status": "affected", "versionType": "git" }, { "version": "ed193ece2649c194a87a9d8470195760d367c075", "lessThan": "575e84d90a74c0b091b3417ba763ebb237aa0a8c", "status": "affected", "versionType": "git" }, { "version": "ed193ece2649c194a87a9d8470195760d367c075", "lessThan": "259683001d7e879fea4b42084fb6560dd9408a7e", "status": "affected", "versionType": "git" }, { "version": "ed193ece2649c194a87a9d8470195760d367c075", "lessThan": "1dd7ae5e0cf5a56e513f7ab7ab9570b7496281d2", "status": "affected", "versionType": "git" }, { "version": "ed193ece2649c194a87a9d8470195760d367c075", "lessThan": "56077b56cd3fb78e1c8619e29581ba25a5c55e86", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "net/tipc/link.c" ], "versions": [ { "version": "4.1", "status": "affected" }, { "version": "0", "lessThan": "4.1", "status": "unaffected", "versionType": "semver" }, { "version": "5.10.181", "lessThanOrEqual": "5.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.15.113", "lessThanOrEqual": "5.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.30", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.3.4", "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": "4.1", "versionEndExcluding": "5.10.181" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.1", "versionEndExcluding": "5.15.113" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.1", "versionEndExcluding": "6.1.30" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.1", "versionEndExcluding": "6.3.4" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.1", "versionEndExcluding": "6.4" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/2bd4ff4ffb92113f8acd04dbaed83269172c24b4" }, { "url": "https://git.kernel.org/stable/c/575e84d90a74c0b091b3417ba763ebb237aa0a8c" }, { "url": "https://git.kernel.org/stable/c/259683001d7e879fea4b42084fb6560dd9408a7e" }, { "url": "https://git.kernel.org/stable/c/1dd7ae5e0cf5a56e513f7ab7ab9570b7496281d2" }, { "url": "https://git.kernel.org/stable/c/56077b56cd3fb78e1c8619e29581ba25a5c55e86" } ], "title": "tipc: do not update mtu if msg_max is too small in mtu negotiation", "x_generator": { "engine": "bippy-1.2.0" } } } }