
CVE-2026-74469(DiagSpill) 연구 저장소로, Linux 커널 SCTP 피어 전송 카운터 오버플로로 인한 범위 초과 쓰기 취약점을 다루며 PoC, 근본 원인 분석, 패치 세부 정보를 포함합니다.
DiagSpill
Linux 커널 SCTP 취약점으로, 16비트 피어 전송 카운터 오버플로로 인해
카운터가 65535에서 0으로 랩어라운드될 수 있습니다. SCTP 진단 덤프 중
랩어라운드된 값은 skb 페이로드 예약 부족을 초래하고, 이어서 피어 주소
데이터의 범위를 벗어난 쓰기(out-of-bounds write)를 유발할 수 있습니다.
이 저장소는 승인된 보안 연구, 커널 취약점 분석, CTF 환경, 커널 디버깅 및 방어적 테스트 목적으로만 사용됩니다.
명시적 승인 없이 시스템에 대해 개념 증명 코드를 사용하지 마십시오.
Linux 커널 CVE 권고는 이 문제를 SCTP의 16비트 transport_count 오버플로로
설명하며, 이어서 크기가 부족한 INET_DIAG_PEERS 할당과 진단 덤프 중
범위를 벗어난 쓰기가 발생한다고 밝히고 있습니다.
취약한 코드는 고유한 피어 전송의 개수를 16비트 카운터로 유지합니다:
transport_count
새로 추가되는 고유한 피어마다 카운터가 증가합니다.
임계 경계는 다음과 같습니다:
65535
고유한 전송을 하나 더 추가하면 다음과 같이 됩니다:
65535 + 1
↓
0
이로 인한 랩어라운드는 다음 두 값 사이에 불일치를 만듭니다:
transport_count
그리고:
transport_addr_list
진단 하위 시스템은 이후 응답 버퍼의 크기를 계산할 때 랩어라운드된 카운터를 신뢰하지만, 여전히 피어 주소의 전체 목록을 순회합니다.
취약점은 다음과 같이 나타낼 수 있습니다:
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
업스트림 권고는 65,536번째 전송이 카운터를 0으로 랩어라운드시킨다고 명시하고 있습니다.
진단 코드는 사실상 동일한 상태에 대한 두 가지 서로 다른 관점에 의존합니다.
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]
따라서 할당자는 다음을 기준으로 공간을 예약합니다:
0 peers
반면 복사 작업은 여전히 다음을 처리할 수 있습니다:
65536 peer addresses
이 불일치가 메모리 안전성 위반을 발생시킵니다.
Linux 커널 권고는 그 결과로 발생하는 진단 덤프가 빈 페이로드를 예약한 뒤 약 8 MiB의 피어 주소를 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은 이 결함을 CWE-787: 범위를 벗어난 쓰기로 분류합니다.
관련 경로는 다음과 같이 요약할 수 있습니다:
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 커널 CVE 공지에서 이 파일을 명시적으로 지목하고 있습니다.
업스트림 수정은 다음과 같습니다:
bd0e9289e2642f6a5c54faad304ce0f41e926d22
커밋:
sctp: prevent peer transport count overflow
이 수정은 다음과 같은 경우 새로운 고유 피어를 거부합니다:
transport_count >= U16_MAX
중요한 점은 이 검사가 기존 피어 조회 이후에 수행된다는 것입니다.
이로써 연관이 한계에 도달한 경우에도 이미 존재하는 전송을 조회할 수 있는 능력이 유지됩니다.
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
중요한 보안 속성은 기존 피어에 대한 정상적인 조회 의미 체계를 유지하면서 카운터가 절대 랩어라운드되지 않도록 하는 것입니다.
메모리 손상은 잠재적으로 다음을 초래할 수 있습니다:
공개 이후 발표된 공개 연구는 특정 조건에서 로컬 루트 익스플로잇을 보고하는 반면, 원래 Linux 커널 CNA 점수는 AV:L/AC:H/PR:L/UI:N을 사용합니다.
이 취약점은 매우 특정한 SCTP/주소 구성 상황에서 잠재적으로 원격 도달이 가능하다고도 설명되지만, 이를 일반적으로 원격 익스플로잇 가능한 취약점과 동일시해서는 안 됩니다.
권장되는 격리된 토폴로지:
┌───────────────────────────────────────────┐
│ Linux VM │
│ │
│ ┌───────────────────┐ │
│ │ SCTP Association │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ Multiple SCTP │ │
│ │ Peer Transports │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ SCTP sock_diag │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ INET_DIAG_PEERS │
│ │
└───────────────────────────────────────────┘
유용한 도구:
ip sctp
ss
ss -a
ss -A sctp
dmesg -w
gdb
pwndbg
crash
SCTP 지원 확인:
lsmod | grep sctp
커널 구성 확인:
grep CONFIG_IP_SCTP /boot/config-$(uname -r)
실행 중인 커널 확인:
uname -r
SCTP 구성 확인:
grep -E 'CONFIG_IP_SCTP|CONFIG_SCTP' \
/boot/config-$(uname -r)
로드된 SCTP 모듈 확인:
lsmod | grep -i sctp
SCTP 소켓 검사:
ss -A sctp
통제된 커널 연구를 위해:
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
커널 출력 모니터링:
sudo dmesg -w
디버깅을 위해:
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
주요 완화책은 업스트림 수정이 포함된 커널로 업그레이드하는 것입니다.
Debian/Kali의 경우:
sudo apt update
sudo apt full-upgrade
그런 다음 재부팅:
sudo reboot
확인:
uname -r
SCTP가 필요하지 않은 경우, 관리자는 자신의 환경과 운영 요구 사항에 따라
영향받는 SCTP 기능을 비활성화하는 것도 고려할 수 있습니다. 공개 연구는
해당 구성 요소가 사용되지 않을 때 SCTP / sctp_diag를 비활성화하는 것을
즉각적인 완화책으로 명시적으로 나열하고 있습니다.
업스트림 안정 공지는 다음 수정 릴리스를 나열합니다:
이 버전들은 Linux 커널 CVE 공지에서 가져온 것이며, 배포판은 다른 버전 번호 체계를 가진 패키지에 수정 사항을 백포트할 수 있습니다.
16비트 카운터는 하드 최대값을 가집니다:
U16_MAX = 65535
보안에 민감한 코드는 이 경계를 명시적으로 처리해야 합니다.
버퍼를 할당하는 데 사용되는 크기는 실제로 그 안에 복사되는 객체 수와 대응해야 합니다.
커널 진단 API는 내부 상태가 일관성을 잃을 때 메모리 손상 공격 표면이 될 수 있습니다.
원래의 기본 요소는 정수 오버플로이지만, 그로 인한 보안 영향은 범위를 벗어난 커널 쓰기입니다.
SCTP 연관은 대규모 피어 전송 컬렉션을 포함할 수 있으므로, 카운터 한계와 목록 관리 로직이 보안상 중요합니다.
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
| 항목 | 세부 정보 |
|---|
| CVE | CVE-2026-74469 |
| 코드명 | DiagSpill |
| 구성 요소 | Linux 커널 |
| 하위 시스템 | SCTP / sock_diag |
| 영향받는 파일 | net/sctp/associola.c |
| 주요 함수 | sctp_assoc_add_peer() |
| 버그 분류 | 정수 오버플로 / 범위를 벗어난 쓰기 |
| 영향 | 커널 메모리 손상 |
| 잠재적 영향 | 로컬 권한 상승 |
| CVSS v3.1 | 7.0 — 높음 |
| 공격 벡터 | 로컬 |
| 공격 복잡도 | 높음 |
| 필요 권한 | 낮음 |
| 사용자 상호작용 | 없음 |
| 상태 | 패치됨 |
| 보안 속성 | 취약 | 패치됨 |
|---|
| 16비트 전송 한계 적용 | ❌ | ✅ |
| 카운터 랩어라운드 방지 | ❌ | ✅ |
| 기존 피어 사용 가능 유지 | ✅ | ✅ |
| 진단 페이로드 크기 신뢰성 | ❌ | ✅ |
| OOB skb 쓰기 방지 | ❌ | ✅ |
| 커널 메모리 손상 완화 | ❌ | ✅ |
| 브랜치 | 수정 릴리스 |
|---|
| 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 |