
CVE-2026-74469 (DiagSpill) के लिए शोध रिपॉज़िटरी, जो एक Linux kernel SCTP peer transport counter overflow है जिसके कारण out-of-bounds write होता है, साथ में PoC, root-cause analysis, और patch विवरण।
DiagSpill
एक Linux kernel SCTP vulnerability जो 16-bit peer transport counter
overflow के कारण होती है, जिससे counter 65535 से 0 पर wrap हो जाता है। SCTP
diagnostic dump के दौरान, wrapped value अपर्याप्त skb payload
reservation का कारण बन सकती है, जिसके बाद peer address data का out-of-bounds write होता है।
यह repository केवल authorized security research, kernel vulnerability analysis, CTF environments, kernel debugging, और defensive testing के लिए है।
बिना explicit authorization के systems पर proof-of-concept code का उपयोग न करें।
Linux Kernel CVE advisory इस issue को SCTP में 16-bit
transport_count overflow के रूप में वर्णित करता है, जिसके बाद undersized INET_DIAG_PEERS
allocation और diagnostic dumping के दौरान out-of-bounds write होता है।
Vulnerable code unique peer transports की संख्या को 16-bit counter में बनाए रखता है:
transport_count
हर नया जोड़ा गया unique peer counter को increment करता है।
महत्वपूर्ण सीमा है:
65535
एक और unique transport जोड़ने पर होता है:
65535 + 1
↓
0
इससे उत्पन्न wraparound निम्न के बीच असंगति पैदा करता है:
transport_count
और:
transport_addr_list
Diagnostic subsystem बाद में response buffer का आकार निर्धारित करते समय wrapped counter पर भरोसा करता है, जबकि यह अभी भी peer addresses की पूरी सूची पर iterate करता है।
Vulnerability को इस प्रकार दर्शाया जा सकता है:
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
Upstream advisory विशेष रूप से बताता है कि 65,536वाँ transport counter को शून्य पर wrap कर देता है।
Diagnostic code प्रभावी रूप से एक ही state के दो भिन्न दृष्टिकोणों पर निर्भर करता है।
transport_count
│
▼
payload size
transport_addr_list
│
▼
copy every peer address
Integer wrap होने के बाद:
transport_count = 0
transport_addr_list =
[peer 1]
[peer 2]
[peer 3]
...
[peer 65536]
इसलिए allocator निम्न के आधार पर स्थान आरक्षित करता है:
0 peers
जबकि copy operation अभी भी निम्न को process कर सकता है:
65536 peer addresses
यही असंगति memory-safety violation उत्पन्न करती है।
Linux Kernel advisory परिणामी diagnostic dump को इस प्रकार वर्णित करता है कि यह खाली payload आरक्षित करता है और फिर लगभग 8 MiB peer addresses skb tail के पार लिख देता है।
संकल्पनात्मक रूप से:
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 इस flaw को CWE-787: Out-of-bounds Write के रूप में वर्गीकृत करता है।
संबंधित path को इस प्रकार संक्षेपित किया जा सकता है:
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
प्रभावित source file है:
net/sctp/associola.c
Linux Kernel CVE announcement इस file की स्पष्ट रूप से पहचान करता है।
Upstream fix है:
bd0e9289e2642f6a5c54faad304ce0f41e926d22
Commit:
sctp: prevent peer transport count overflow
Fix नए unique peer को अस्वीकार करता है जब:
transport_count >= U16_MAX
महत्वपूर्ण बात यह है कि यह check existing-peer lookup के बाद होता है।
इससे association के limit तक पहुँचने पर भी पहले से मौजूद transport को प्राप्त करने की क्षमता बनी रहती है।
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
महत्वपूर्ण security property यह है कि counter को कभी wrap होने से रोका जाए, साथ ही existing peer के लिए सामान्य lookup semantics बनी रहें।
Memory corruption संभावित रूप से इनका कारण बन सकती है:
Disclosure के बाद जारी public research विशिष्ट परिस्थितियों में local-root exploitation की रिपोर्ट करता है, जबकि मूल Linux Kernel CNA scoring AV:L/AC:H/PR:L/UI:N का उपयोग करती है।
Vulnerability को बहुत विशिष्ट SCTP/address-configuration परिस्थितियों में संभावित रूप से remotely reachable भी बताया गया है, लेकिन इसे सामान्यतः remotely exploitable vulnerability के समतुल्य नहीं माना जाना चाहिए।
अनुशंसित isolated topology:
┌───────────────────────────────────────────┐
│ Linux VM │
│ │
│ ┌───────────────────┐ │
│ │ SCTP Association │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ Multiple SCTP │ │
│ │ Peer Transports │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ SCTP sock_diag │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ INET_DIAG_PEERS │
│ │
└───────────────────────────────────────────┘
उपयोगी tools:
ip sctp
ss
ss -a
ss -A sctp
dmesg -w
gdb
pwndbg
crash
SCTP support जाँचें:
lsmod | grep sctp
Kernel configuration जाँचें:
grep CONFIG_IP_SCTP /boot/config-$(uname -r)
चल रहे kernel को जाँचें:
uname -r
SCTP configuration जाँचें:
grep -E 'CONFIG_IP_SCTP|CONFIG_SCTP' \
/boot/config-$(uname -r)
Loaded SCTP modules जाँचें:
lsmod | grep -i sctp
SCTP sockets का निरीक्षण करें:
ss -A sctp
नियंत्रित kernel research के लिए:
01. Build vulnerable kernel
↓
02. Boot isolated VM
↓
03. Enable SCTP
↓
04. Create controlled SCTP association
↓
05. Populate unique peer transports
↓
06. Reach transport-count boundary
↓
07. Trigger SCTP diagnostic dump
↓
08. Monitor skb diagnostics
↓
09. Capture kernel behavior
↓
10. Apply upstream fix
↓
11. Repeat test
↓
12. Compare vulnerable vs patched
Kernel output monitor करें:
sudo dmesg -w
Debugging के लिए:
gdb vmlinux
या:
pwndbg vmlinux
CVE-2026-74469-DiagSpill/
│
├── README.md
│
├── exploit/
│ ├── poc.c
│ └── Makefile
│
├── analysis/
│ ├── root-cause.md
│ ├── sctp-transport-count.md
│ ├── sock-diag.md
│ ├── skb-overflow.md
│ └── patch-analysis.md
│
├── kernel/
│ ├── vulnerable/
│ └── patched/
│
├── lab/
│ ├── setup.sh
│ ├── cleanup.sh
│ └── topology.md
│
├── screenshots/
│
├── docs/
│ └── research-notes.md
│
└── LICENSE
मुख्य mitigation upstream fix वाले kernel पर upgrade करना है।
Debian/Kali के लिए:
sudo apt update
sudo apt full-upgrade
फिर reboot करें:
sudo reboot
सत्यापित करें:
uname -r
यदि SCTP की आवश्यकता नहीं है, तो administrators अपने environment और operational
requirements के अनुसार प्रभावित SCTP functionality को disable करने पर भी विचार कर सकते हैं।
Public research विशेष रूप से SCTP / sctp_diag को disable करने को तत्काल mitigation के रूप में
सूचीबद्ध करता है जब ये components उपयोग में न हों।
Upstream stable announcement इन fixed releases को सूचीबद्ध करता है:
ये versions Linux Kernel CVE announcement से हैं; distributions fix को भिन्न version numbering वाले packages में backport कर सकते हैं।
16-bit counter की एक कठोर अधिकतम सीमा होती है:
U16_MAX = 65535
Security-sensitive code को उस सीमा को स्पष्ट रूप से handle करना चाहिए।
Buffer allocate करने के लिए उपयोग किया गया size उसमें वास्तव में copy किए गए objects की संख्या के अनुरूप होना चाहिए।
जब internal state असंगत हो जाता है, तो kernel diagnostic APIs memory-corruption attack surfaces बन सकते हैं।
मूल primitive एक integer overflow है, लेकिन परिणामी security impact एक out-of-bounds kernel write है।
SCTP associations में peer transports के बड़े संग्रह हो सकते हैं, जिससे counter limits और list-management logic security-critical बन जाते हैं।
net/sctp/associola.csctp_assoc_add_peer()sctp: prevent peer transport count overflowbd0e9289e2642f6a5c54faad304ce0f41e926d22Linux Kernel · SCTP · sock_diag · OOB Write · Kernel Security
Research • Analyze • Reproduce • Harden
| Field | Details |
|---|
| CVE | CVE-2026-74469 |
| Codename | DiagSpill |
| Component | Linux Kernel |
| Subsystem | SCTP / sock_diag |
| Affected File | net/sctp/associola.c |
| Primary Function | sctp_assoc_add_peer() |
| Bug Class | Integer overflow / Out-of-bounds write |
| Impact | Kernel memory corruption |
| Potential Impact | Local privilege escalation |
| CVSS v3.1 | 7.0 — High |
| Attack Vector | Local |
| Attack Complexity | High |
| Privileges Required | Low |
| User Interaction | None |
| Status | Patched |
| Security Property | Vulnerable | Patched |
|---|
| 16-bit transport limit enforced | ❌ | ✅ |
| Counter wrap prevented | ❌ | ✅ |
| Existing peers remain usable | ✅ | ✅ |
| Diagnostic payload size reliable | ❌ | ✅ |
| OOB skb write prevented | ❌ | ✅ |
| Kernel memory corruption mitigated | ❌ | ✅ |
| Branch | Fixed Release |
|---|
| 5.10 | 5.10.265 |
| 5.15 | 5.15.216 |
| 6.1 | 6.1.183 |
| 6.6 | 6.6.151 |
| 6.12 | 6.12.103 |
| 6.18 | 6.18.44 |
| 7.1 | 7.1.8 |
| 7.2 | 7.2-rc6 |