
Forschungs-Repository für CVE-2026-74469 (DiagSpill), einen Überlauf des SCTP-Peer-Transport-Zählers im Linux-Kernel, der einen Out-of-Bounds-Schreibvorgang verursacht, mit PoC, Ursachenanalyse und Patch-Details.
DiagSpill
Eine SCTP-Schwachstelle im Linux-Kernel, verursacht durch einen Überlauf eines
16-Bit-Peer-Transport-Zählers, der den Zähler von 65535 auf 0 zurückspringen
lässt. Während eines SCTP-Diagnose-Dumps kann der umgelaufene Wert eine
unzureichende skb-Payload-Reservierung und anschließend einen Out-of-Bounds-Write
von Peer-Adressdaten verursachen.
Dieses Repository ist ausschließlich für autorisierte Sicherheitsforschung, Analyse von Kernel-Schwachstellen, CTF-Umgebungen, Kernel-Debugging und defensives Testen gedacht.
Verwenden Sie Proof-of-Concept-Code nicht gegen Systeme ohne ausdrückliche Autorisierung.
| Feld | Details |
|---|---|
| CVE | CVE-2026-74469 |
| Codename | DiagSpill |
| Komponente | Linux-Kernel |
| Subsystem | SCTP / sock_diag |
| Betroffene Datei | net/sctp/associola.c |
| Primäre Funktion | sctp_assoc_add_peer() |
| Fehlerklasse | Integer-Überlauf / Out-of-Bounds-Write |
| Auswirkung | Speicherkorruption im Kernel |
| Potenzieller Effekt | Lokale Rechteausweitung |
| CVSS v3.1 | 7.0 — High |
| Angriffsvektor | Lokal |
| Angriffskomplexität | Hoch |
| Erforderliche Rechte | Niedrig |
| Benutzerinteraktion | Keine |
| Status | Gepatcht |
Die CVE-Meldung des Linux-Kernels beschreibt das Problem als einen 16-Bit-Überlauf
von transport_count in SCTP, gefolgt von einer zu klein dimensionierten
INET_DIAG_PEERS-Allokation und einem Out-of-Bounds-Write während des
Diagnose-Dumps.
Der verwundbare Code führt die Anzahl eindeutiger Peer-Transports in einem 16-Bit-Zähler:
transport_count
Jeder neu hinzugefügte eindeutige Peer erhöht den Zähler.
Die kritische Grenze ist:
65535
Das Hinzufügen eines weiteren eindeutigen Transports verursacht:
65535 + 1
↓
0
Die daraus resultierende Umwicklung erzeugt eine Inkonsistenz zwischen:
transport_count
und:
transport_addr_list
Das Diagnose-Subsystem vertraut später auf den umschlossenen Zähler, wenn es die Größe des Antwortpuffers berechnet, während es weiterhin durch die vollständige Liste der Peer-Adressen iteriert.
Die Schwachstelle lässt sich wie folgt darstellen:
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
Die vorgelagerte Sicherheitsempfehlung stellt ausdrücklich fest, dass der 65.536ste Transport den Zähler auf null zurücksetzt.
Der Diagnosecode stützt sich effektiv auf zwei unterschiedliche Sichten auf denselben Zustand.
transport_count
│
▼
payload size
transport_addr_list
│
▼
copy every peer address
Nach dem Integer-Überlauf:
transport_count = 0
transport_addr_list =
[peer 1]
[peer 2]
[peer 3]
...
[peer 65536]
Der Allocator reserviert daher Speicherplatz basierend auf:
0 peers
während der Kopiervorgang noch verarbeitet werden kann:
65536 peer addresses
Diese Diskrepanz erzeugt die Speichersicherheitsverletzung.
Die Linux-Kernel-Sicherheitsmeldung beschreibt den resultierenden Diagnose-Dump so, dass er eine leere Nutzlast reserviert und dann etwa 8 MiB Peer-Adressen über das skb-Ende hinaus schreibt.
Konzeptionell:
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 klassifiziert die Schwachstelle als CWE-787: Out-of-bounds Write.
Der relevante Pfad lässt sich wie folgt zusammenfassen:
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
Die betroffene Quelldatei ist:
net/sctp/associola.c
Die Linux-Kernel-CVE-Ankündigung identifiziert diese Datei ausdrücklich.
Der Upstream-Fix lautet:
bd0e9289e2642f6a5c54faad304ce0f41e926d22
Commit:
sctp: prevent peer transport count overflow
Die Korrektur lehnt einen neuen eindeutigen Peer ab, wenn:
transport_count >= U16_MAX
Wichtig ist, dass die Prüfung nach dem Lookup bestehender Peers erfolgt.
Dadurch bleibt die Möglichkeit erhalten, einen bereits existierenden Transport abzurufen, selbst wenn die Assoziation das Limit erreicht hat.
New peer
│
▼
transport_count++
│
▼
Possible 16-bit wrap
│
▼
Diagnostic size mismatch
│
▼
OOB write