🇰🇷 한글 설명
Linux 커널의 net/802/mrp 모듈에서 mrp_pdu_parse_vecattr 함수가 벡터 속성을 파싱할 때 발생하는 취약점입니다. valen 값이 3의 배수일 때 루프가 잘못 지속되거나, valen이 0일 때 불필요한 데이터를 소비하여 오프셋을 손상시키고, 바이트 경계에서 속성 값이 제대로 증가하지 않는 논리적 오류가 포함되어 있습니다.
💡 쉬운 설명
네트워크 통신 규격을 해석하는 과정에서 계산 오류가 발생하여 잘못된 데이터가 처리되는 문제입니다. 이로 인해 시스템의 상태가 꼬이거나 이후의 데이터 해석이 망가질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/802/mrp: fix vector attribute parsing in mrp_pdu_parse_vecattr
In mrp_pdu_parse_vecattr(), vector attribute events are encoded three
per byte and valen tracks the number of events left to process.
The parser decrements valen after processing the first and second events
from each event byte, but not after processing the third one. When valen
is exactly a multiple of three, the loop continues after the last valid
event and consumes the next byte as a new event byte, applying a
spurious event to the MRP applicant state.
Additionally, when valen is zero the parser unconditionally consumes
attrlen bytes as FirstValue and advances the offset, even though per
IEEE 802.1ak a VectorAttribute with only a LeaveAllEvent has valen of
zero and no FirstValue or Vector fields. This corrupts the offset for
subsequent PDU parsing.
Also, when valen exceeds three the loop crosses byte boundaries but
the attribute value is not incremented between the last event of one
byte and the first event of the next. This causes the first event of
the next byte to use the same attribute value as the third event
rather than the next consecutive value.
Decrement valen after processing the third event, skip FirstValue
consumption when valen is zero, and increment the attribute value at
the end of each loop iteration.
📍 영향받는 시스템
Linux kernel (net/802/mrp 모듈을 사용하는 시스템)
⚔️ 공격 벡터
조작된 MRP(Multiple Registration Protocol) PDU 패킷을 전송하여 파싱 로직 오류 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인