🇰🇷 한글 설명
Linux 커널의 SCTP 프로토콜 구현에서 ASCONF-ACK 파라미터 처리 시 패딩 계산 방식의 불일치로 인해 발생하는 취약점입니다. 공격자가 조작된 길이를 가진 파라미터를 전송하면 커널이 무한 루프에 빠져 소프트 락업(soft lockup)이 발생하며, 이로 인해 원격 서비스 거부(DoS)가 가능합니다. 또한 특정 상황에서 경계 검사 미흡으로 인한 Out-of-bounds Read 취약점도 포함되어 있습니다.
💡 쉬운 설명
해커가 특수하게 조작된 네트워크 신호를 보내면 컴퓨터의 핵심 엔진인 커널이 무한 반복 작업에 빠져 멈춰버릴 수 있습니다. 이로 인해 서버가 응답하지 않게 되어 서비스를 이용할 수 없는 상태가 됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
sctp: fix soft lockup from unpadded ASCONF-ACK parameter iteration
sctp_verify_asconf() walks ASCONF-ACK parameters with
sctp_walk_params(), which advances by SCTP_PAD4(length), while the
consumer sctp_get_asconf_response() iterates the same parameters
advancing by the raw length, without padding. A single odd-length
parameter desynchronises the two walks and makes the consumer
interpret attacker-controlled bytes at a misaligned offset.
When those bytes yield a length of zero, the while loop over
asconf_ack_len makes no progress, spinning forever in softirq
context, and the watchdog reports a soft lockup. All reads stay
within the received skb, so the lockup is a pure remote denial of
service. A remote peer can trigger it with a crafted ASCONF-ACK on
an ADD-IP enabled association with an outstanding ASCONF (RFC 5061
section 4.1.2 requires the chunk to be authenticated, but the
predefined empty key id 0 allows the peer to compute the same
association HMAC from publicly exchanged parameters, so the gate
does not help).
The SCTP_PARAM_ERR_CAUSE case of sctp_verify_asconf() also performs
no length check, letting a parameter without a complete error
header reach the consumer, which reads errhdr.cause past the end of
the parameter, an out-of-bounds read.
Reject SCTP_PARAM_ERR_CAUSE parameters shorter than
sizeof(struct sctp_addip_param) + sizeof(struct sctp_errhdr) at the
verifier, and advance the consumer iterator with the same padding
rule as the verifier to keep the two walks in lockstep. The verifier
change guarantees a complete error header in every ERR_CAUSE
parameter the consumer can see, so the consumer's asconf_ack_len
check is dropped and it returns err_param->cause directly. The
consumer padding fix is still required because odd lengths remain
valid for SCTP_PARAM_ERR_CAUSE per RFC 5061.
The issue was found by ZeroHive, a vulnerability hunting agent at
Tencent Yunding Lab.
📍 영향받는 시스템
SCTP 프로토콜을 사용하는 Linux 커널 (ADD-IP 기능 활성화 시)
⚔️ 공격 벡터
네트워크를 통해 조작된 ASCONF-ACK 패킷을 전송하는 원격 공격
🛡️ 대응 방법
SCTP 파라미터 검증 로직을 수정하고 패딩 규칙을 일치시킨 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인