🇰🇷 한글 설명
Linux 커널의 mlx5e 드라이버에서 MACsec RX SC 삭제 시 metadata_dst 객체에 대한 Use-After-Free 취약점이 발견되었습니다. 삭제 과정에서 참조 카운트를 무시하고 메모리를 해제하여, 데이터 경로에서 이미 해제된 메모리에 접근할 수 있는 레이스 컨디션이 발생합니다.
💡 쉬운 설명
네트워크 보안 기능을 삭제하는 과정에서 컴퓨터 메모리를 잘못 관리하여 발생하는 오류입니다. 이로 인해 시스템이 예기치 않게 종료되거나 해커가 메모리에 접근할 수 있는 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/mlx5e: macsec: fix use-after-free of metadata_dst on RX SC delete
When an offloaded MACsec RX SC is deleted, macsec_del_rxsc_ctx() freed
the per-SC metadata_dst with metadata_dst_free(), which kfree()s the
object unconditionally and ignores the dst reference count. The RX
datapath in mlx5e_macsec_offload_handle_rx_skb() looks up the SC under
rcu_read_lock() via xa_load(), takes a reference with dst_hold() and
attaches the dst to the skb with skb_dst_set(). A reader that already
obtained the rx_sc pointer can race with the delete path and operate on
freed memory.
Fix the owner side by dropping the reference with dst_release() instead
of freeing unconditionally, and convert the RX datapath to
dst_hold_safe() so a reader racing the SC delete cannot attach a dst
whose last reference was just dropped; only attach it when a reference
was actually taken.
mlx5e_macsec_add_rxsc() also published sc_xarray_element via xa_alloc()
before rx_sc->md_dst was allocated and initialised, so a datapath reader
that looked the SC up by fs_id could observe rx_sc with md_dst still
NULL or, on weakly-ordered architectures, a non-NULL md_dst pointer
whose contents were not yet visible. NULL-check the xa_load() result and
md_dst on the datapath, and reorder add_rxsc() so the xa_alloc() publish
happens only after md_dst is fully initialised; the xarray RCU publish
then pairs with the rcu_read_lock()/xa_load() in the datapath.
Note: macsec_del_rxsc_ctx() also kfree()s rx_sc->sc_xarray_element
without an RCU grace period while the same datapath reads it under
rcu_read_lock(); that is a separate pre-existing issue left to a
follow-up patch.
Found by 0sec automated security-research tooling (https://0sec.ai).
📍 영향받는 시스템
Linux kernel (mlx5e driver)
⚔️ 공격 벡터
특정 네트워크 조건에서 MACsec RX SC 삭제와 데이터 수신 작업 간의 레이스 컨디션을 유도하여 발생
🛡️ 대응 방법
커널 패치를 적용하여 dst_release() 사용 및 xa_load() 결과에 대한 NULL 체크 로직을 반영해야 함
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.