🇰🇷 한글 설명
GoBGP는 Go 언어로 작성된 오픈소스 BGP(Border Gateway Protocol) 구현체입니다. 버전 4.4.0에서 인증되지 않은 원격 BGP 피어가 특수하게 조작된 BGP UPDATE 메시지를 보내면, 속성 길이가 일치하지 않을 때 내부 상태 전환을 잘못 처리하여 AdjRib.Update 함수에서 nil 포인터 역참조가 발생하고 전체 프로세스가 크래시됩니다. 이 문제는 버전 4.5.0에서 패치되었습니다.
💡 쉬운 설명
인터넷 라우팅을 담당하는 GoBGP 소프트웨어에, 악의적인 외부 장비가 잘못된 라우팅 메시지를 보내면 프로그램 전체가 멈춰버릴 수 있습니다. 이로 인해 해당 네트워크의 라우팅 서비스가 완전히 중단될 수 있습니다.
🇺🇸 원문 (English)
GoBGP is an open source Border Gateway Protocol (BGP) implementation in the Go Programming Language. In version 4.4.0, an unauthenticated remote BGP peer can trigger a fatal panic in GoBGP by sending a specially crafted BGP UPDATE message. When the server receives a message with inconsistent attribute lengths, it improperly handles the internal state transition to a "withdraw" action, leading to a nil pointer dereference in the AdjRib.Update function. This causes the entire GoBGP process to crash, resulting in a complete loss of service availability. This issue has been patched in version 4.5.0.
📍 영향받는 시스템
GoBGP 4.4.0 버전 (4.5.0 미만 중 4.4.0 이전 버전 포함 여부는 확인 필요)
⚔️ 공격 벡터
인증되지 않은 원격 BGP 피어가 속성 길이가 불일치하는 조작된 BGP UPDATE 메시지를 전송
🛡️ 대응 방법
GoBGP를 4.5.0 이상 버전으로 업그레이드하고, BGP 피어 접근을 신뢰된 피어로 제한
🔧 검증 코드
출력된 버전이 4.4.0이면 취약하며, 4.5.0 이상이면 패치가 적용된 것입니다.
gobgpd --version 2>/dev/null || gobgp --version 2>/dev/null