
CVE-2026-74469 (DiagSpill) के लिए शोध रिपॉज़िटरी, जो एक Linux kernel SCTP peer transport counter overflow है जिसके कारण out-of-bounds write होता है, साथ में PoC, root-cause analysis, और patch विवरण।
DiagSpill
Linux kernel SCTP में एक कमज़ोरी जो 16-बिट peer transport काउंटर
overflow के कारण होती है, जिससे काउंटर 65535 से 0 पर wrap हो जाता है। SCTP
diagnostic dump के दौरान, wrap हुआ मान अपर्याप्त skb payload
reservation का कारण बन सकता है, जिसके बाद peer address डेटा का out-of-bounds write होता है।
यह रिपॉज़िटरी केवल अधिकृत सुरक्षा अनुसंधान, kernel कमज़ोरी विश्लेषण, CTF वातावरण, kernel डिबगिंग और रक्षात्मक परीक्षण के लिए है।
स्पष्ट अनुमति के बिना सिस्टम के विरुद्ध proof-of-concept कोड का उपयोग न करें।
| फ़ील्ड | विवरण |
|---|---|
| CVE | CVE-2026-74469 |
| कोडनेम | DiagSpill |
| घटक | Linux Kernel |
| सबसिस्टम | SCTP / sock_diag |
| प्रभावित फ़ाइल | net/sctp/associola.c |
| प्राथमिक फ़ंक्शन | sctp_assoc_add_peer() |
| बग वर्ग | Integer overflow / Out-of-bounds write |
| प्रभाव | Kernel memory corruption |
| संभावित प्रभाव | Local privilege escalation |
| CVSS v3.1 | 7.0 — High |
| आक्रमण वेक्टर | Local |
| आक्रमण जटिलता | High |
| आवश्यक विशेषाधिकार | Low |
| उपयोगकर्ता इंटरैक्शन | None |
| स्थिति | Patched |
Linux Kernel CVE सलाहकार इस समस्या को SCTP में 16-बिट
transport_count overflow के रूप में वर्णित करता है, जिसके बाद undersized INET_DIAG_PEERS
allocation और diagnostic dumping के दौरान out-of-bounds write होता है।
कमज़ोर कोड अद्वितीय peer transports की संख्या को 16-बिट काउंटर में बनाए रखता है:
transport_count
हर नए जोड़े गए अद्वितीय पीयर से काउंटर बढ़ता है।
महत्वपूर्ण सीमा यह है:
65535
एक और अद्वितीय ट्रांसपोर्ट जोड़ने पर यह होता है:
65535 + 1
↓
0
परिणामी रैपअराउंड निम्नलिखित के बीच एक असंगति उत्पन्न करता है:
transport_count
और:
transport_addr_list
The diagnostic subsystem later trusts the wrapped counter when calculating the size of the response buffer, while still iterating through the complete list of peer addresses.
इस भेद्यता को इस प्रकार दर्शाया जा सकता है:
SCTP Association
│
▼
Add unique peers
│
▼
transport_count
uint16_t
│
▼
65,535 peers
│
▼
+ 1 unique peer
│
▼
Integer wrap
│
▼
transport_count = 0
│
▼
SCTP sock_diag
│
▼
Reserve incorrect payload
│
▼
Iterate complete peer list
│
▼
Out-of-bounds skb write
The upstream advisory specifically states that the 65,536th transport wraps the counter to zero.
डायग्नोस्टिक कोड प्रभावी रूप से एक ही स्थिति के दो अलग-अलग दृष्टिकोणों पर निर्भर करता है।
transport_count
│
▼
payload size
transport_addr_list
│
▼
copy every peer address
पूर्णांक रैप होने के बाद:
transport_count = 0
transport_addr_list =
[peer 1]
[peer 2]
[peer 3]
...
[peer 65536]
The allocator इसलिए इसके आधार पर स्थान आरक्षित करता है:
0 peers
जबकि कॉपी ऑपरेशन अभी भी प्रोसेस कर सकता है:
65536 peer addresses
यह असंगति मेमोरी-सुरक्षा उल्लंघन उत्पन्न करती है।
Linux Kernel सलाहकार परिणामी डायग्नोस्टिक डंप का वर्णन इस प्रकार करता है: एक खाली पेलोड आरक्षित करना और फिर skb टेल से परे लगभग 8 MiB के पीयर पते लिखना।
संकल्पनात्मक रूप से:
Expected skb:
┌───────────────────────────────┐
│ INET_DIAG header │
├───────────────────────────────┤
│ Peer addresses │
└───────────────────────────────┘
▲
│
valid end
Actual vulnerable state:
┌───────────────────────────────┐
│ INET_DIAG header │
└───────────────────────────────┘
▲
│
skb tail
↓
Peer address writes
↓
Peer address writes
↓
Peer address writes
↓
OUT-OF-BOUNDS WRITE
Red Hat इस दोष को CWE-787: Out-of-bounds Write के रूप में वर्गीकृत करता है।
प्रासंगिक पथ को इस प्रकार संक्षेपित किया जा सकता है:
SCTP association
│
▼
sctp_assoc_add_peer()
│
▼
transport_count++
│
▼
16-bit overflow
│
▼
SCTP sock_diag
│
▼
INET_DIAG_PEERS
│
▼
skb payload reservation
│
▼
transport_addr_list iteration
│
▼
Out-of-bounds write
प्रभावित स्रोत फ़ाइल है:
net/sctp/associola.c
Linux Kernel CVE घोषणा इस फ़ाइल की स्पष्ट रूप से पहचान करती है।
अपस्ट्रीम फ़िक्स यह है:
bd0e9289e2642f6a5c54faad304ce0f41e926d22
कमिट:
sctp: prevent peer transport count overflow
यह फ़िक्स एक नए अद्वितीय पीयर को अस्वीकार करता है जब:
transport_count >= U16_MAX
महत्वपूर्ण बात यह है कि जाँच मौजूदा-पीयर लुकअप के बाद होती है।
यह किसी पहले से मौजूद ट्रांसपोर्ट को प्राप्त करने की क्षमता को बनाए रखता है, भले ही association सीमा तक पहुँच चुका हो।
New peer
│
▼
transport_count++
│
▼
Possible 16-bit wrap
│
▼
Diagnostic size mismatch
│
▼
OOB write
New peer
│
▼
Existing peer?
│
┌─┴──────────┐
│ │
YES NO
│ │
▼ ▼
Reuse Check U16_MAX
transport │
▼
Reject at limit
महत्वपूर्ण सुरक्षा गुण यह है कि काउंटर को कभी भी रैप होने से रोका जाए जबकि किसी मौजूदा पीयर के लिए सामान्य लुकअप सेमांटिक्स को संरक्षित रखा जाए।