CVE-2023-54012 in Linux
요약
\~에 의해 VulDB • 2026. 06. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: 가상 인터페이스에 대해 LRO가 비활성화된 경우 스택 오버플로우 수정
가상 인터페이스의 기능이 업데이트될 때, 해당 변경 사항을 자신의 하위(lower) 인터페이스에도 동기화합니다. 이 전파 로직은 재귀적(recursive)이지 않고 반복(iterative) 방식으로 동작해야 합니다. 그러나 예상치 못한 netdev 알림(netdev notification)으로 인해 재귀적으로 동작하는 문제가 있었습니다. 본 문제는 팀(team) 및 바인딩(bonding) 인터페이스 유형에 대해 LRO만 비활성화할 때 발생합니다.
team0 | +------+------+-----+-----+ | | | | | team1 team2 team3 ... team200
team0의 LRO 기능이 업데이트되면, 자신의 하위 인터페이스(team1 ~ team200)에 NETDEV_FEAT_CHANGE 이벤트를 생성합니다. 이 동작은 netdev_sync_lower_features() 함수를 통해 수행됩니다. 따라서 각 하위 인터페이스의 NETDEV_FEAT_CHANGE 알림 로직은 반복적으로 작동해야 합니다. 그러나 생성된 NETDEV_FEATChangeEvent는 상위(upper) 인터페이스로도 전송됩니다. 상위 인터페이스(team0)는 자신의 하위 인터페이스에 대해 다시 NETDEV_FEAT_CHANGE 이벤트를 생성합니다. 하위 및 상위 인터페이스가 이 이벤트를 수신하고 이를 계속 반복하여 생성함으로써 스택 오버플로우가 발생합니다.
하지만 이는 무한 루프(infinite loop) 문제는 아닙니다. netdev_sync_lower_features() 함수는 NETDEV_FEAT_CHANGE 이벤트를 생성하기 전에 기능을 업데이트하므로, 이미 동기화된 하위 인터페이스들은 알림 로직을 건너뛰기 때문입니다. 따라서 본질적인 문제는 알림 메커니즘으로 인해 반복 로직이 예기치 않게 재귀적 구조로 변경되었다는 점입니다.
재현 단계(Reproducer):
ip link add team0 type team ethtool -K team0 lro on for i in {1..200}
do ip link add team$i master team0 type team ethtool -K team$i lro on done
ethtool -K team0 lro off
이를 해결하기 위해 바인딩(bonding)/팀(team)의 notifier_ctx 멤버가 도입되었습니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.