KernelScan.io

HIGH Introduced in 2.6.12

sctp AsconfAck Lockup

CVE-2026-98123

CVSS 7.5 / 10.0 KernelScan AI

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

01

In the Linux kernel, the following vulnerability has been resolved: sctp: fix soft lockup from unpadded ASCONF-ACK parameter iteration sctp_verify_asconf() walks ASCONF-ACK parameters with sctp_walk_params(), which advances by SCTP_PAD4(length), while the consumer sctp_get_asconf_response() iterates the same parameters advancing by the raw length, without padding. A single odd-length parameter desynchronises the two walks and makes the consumer interpret attacker-controlled bytes at a misaligned offset. When those bytes yield a length of zero, the while loop over asconf_ack_len makes no progress, spinning forever in softirq context, and the watchdog reports a soft lockup. All reads stay within the received skb, so the lockup is a pure remote denial of service. A remote peer can trigger it with a crafted ASCONF-ACK on an ADD-IP enabled association with an outstanding ASCONF (RFC 5061 section 4.1.2 requires the chunk to be authenticated, but the predefined empty key id 0 allows the peer to compute the same association HMAC from publicly exchanged parameters, so the gate does not help). The SCTP_PARAM_ERR_CAUSE case of sctp_verify_asconf() also performs no length check, letting a parameter without a complete error header reach the consumer, which reads errhdr.cause past the end of the parameter, an out-of-bounds read. Reject SCTP_PARAM_ERR_CAUSE parameters shorter than sizeof(struct sctp_addip_param) + sizeof(struct sctp_errhdr) at the verifier, and advance the consumer iterator with the same padding rule as the verifier to keep the two walks in lockstep. The verifier change guarantees a complete error header in every ERR_CAUSE parameter the consumer can see, so the consumer's asconf_ack_len check is dropped and it returns err_param->cause directly. The consumer padding fix is still required because odd lengths remain valid for SCTP_PARAM_ERR_CAUSE per RFC 5061. The issue was found by ZeroHive, a vulnerability hunting agent at Tencent Yunding Lab.

02

Engine v0.6.0

Risk summary

A remote SCTP peer can send a crafted ASCONF-ACK containing an odd-length parameter that desynchronizes two internal iteration loops, causing an infinite spin in softirq context and a soft lockup that hangs the affected CPU. The bug requires an ADD-IP enabled SCTP association with an outstanding ASCONF request, but the protocol's authentication gate does not prevent exploitation because the default empty key identifier allows any peer to compute the required HMAC. The result is a remote denial of service with no privileges required.

Affectednet/sctp/sm_make_chunk.c (sctp)

Vulnerability analysis

The SCTP stack verifies and then consumes ASCONF-ACK parameters using two separate iteration loops that advance by different amounts — the verifier pads parameter lengths to four-byte boundaries while the consumer advances by raw lengths. A remote peer can send a crafted ASCONF-ACK with an odd-length parameter that desynchronizes these two walks, causing the consumer to interpret misaligned bytes as a zero-length field and spin indefinitely in softirq context, hanging the CPU until the watchdog fires. A second flaw lets error-cause parameters without a complete error header pass verification, so the consumer reads a two-byte cause field past the parameter boundary within the received packet. The fix aligns both loops to use the same padded-length advancement rule and rejects undersized error-cause parameters at verification time, ensuring the consumer always sees well-formed data. Any remote SCTP peer can trigger this on an association with the ADD-IP extension enabled and an outstanding ASCONF request; the RFC-mandated chunk authentication does not help because the default empty key identifier lets the peer compute the required HMAC from publicly exchanged association parameters.

03

BranchIntroducedFixed inPatch commit
5.102.6.125.10.271ba54cad22997
5.152.6.125.15.2227d8e7ab6a066
6.12.6.126.1.1895fbc6a778d5f
6.62.6.126.6.1584548d843e7b2
6.122.6.126.12.111abf59d7f6fff
6.182.6.126.18.533be02999ab91
7.22.6.127.2.77ba84e2971d2
mainline2.6.127.3-rc22cb0b0b1ed69
cip/6.122.6.126.12.111-cip32abf59d7f6fff