CVE-2026-74586 in Linux
요약
\~에 의해 VulDB • 2026. 08. 22.
리눅스 커널에서 다음 취약점이 해결되었습니다:
sctp: 피어 제거 시 new_transport 초기화
sctp_process_asconf_param()는 새로 추가된 피어 트랜스포트를 asoc->new_transport에 저장합니다. ASCONF 청크의 모든 파라미터가 처리되면, sctp_sf_do_asconf()는 이 포인터를 사용하여 새 트랜스포트로 HEARTBEAT를 전송합니다.
원격 SCTP 피어로부터 인증된 ASCONF는 동일한 청크 내에서 와일드카드 DEL-IP 파라미터를 사용하여 트랜스포트를 추가한 후 다시 제거할 수 있습니다. 와일드카드 삭제는 ASCONF가 도착한 트랜스포트는 유지하지만, sctp_assoc_del_nonprimary_peers()를 통해 새로 추가된 트랜스포트는 제거합니다. 이 제거 작업은 asoc->new_transport을 초기화하지 않아, 해당 포인터가 이미 제거된 트랜스포트를 가리키게 됩니다.
그 후 sctp_sf_do_asconf()는 chunk->transport가 제거된 트랜스포트를 가리키는 HEARTBEAT를 생성하지만, 트랜스포트 참조(reference)를 보유하지 않습니다. 로컬 주소 교체 중에는 src_out_of_asoc_ok이 이 HEARTBEAT를 control_chunk_list에 유지합니다. RCU에 의해 트랜스포트가 해제(freed)된 후, 대체 주소에 대한 성공적인 ASCONF_ACK가 큐에 있는 HEARTBEAT를 해제하고 sctp_outq_select_transport()는 해지된 트랜스포트의 상태를 읽습니다.
이 문제는 SCTP 객체에 대한 정적 감사(static audit) 과정에서 발견되었습니다. 인증된 피어를 사용하여 재현 프로그램(reproducer)을 실행한 결과, KASAN이 활성화된 netdev/main 커널에서 패치되지 않은 버전 2회 중 모두 동일한 KASAN 보고서를 발생시켰습니다:
BUG: KASAN: slab-use-after-free in sctp_outq_select_transport Read of size 4 at addr ffff88800b9bd95c by task python3/197
Call Trace: sctp_outq_select_transport+0x549/0x8b0 [sctp]
sctp_outq_flush+0x306/0x2c60 [sctp]
sctp_transport_immediate_rtx+0xaf/0x260 [sctp]
sctp_process_asconf_ack+0xa48/0xf70 [sctp]
Allocated by task 197: sctp_transport_new+0x68/0x650 [sctp]
sctp_assoc_add_peer+0x258/0x12a0 [sctp]
sctp_process_asconf+0x5e9/0x1090 [sctp]
Last potentially related work creation: __call_rcu_common.constprop.0+0x77/0xb70 sctp_assoc_del_nonprimary_peers+0x7c/0xd0 [sctp]
sctp_process_asconf+0xd9c/0x1090 [sctp]
첫 번째 잘못된 접근은 net/sctp/outqueue.c:833에서 transport->state에 대한 4바이트 읽기였습니다. 동일한 재현 프로그램은 이 변경 사항이 적용된 상태에서 전체 인증된 ASCONF 및 로컬 주소 교체 시퀀스를 KASAN 보고서나 oops 없이 성공적으로 완료했습니다.
HEARTBEAT 생성에 사용되기 전에 피어가 제거될 때 new_transport을 초기화합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.