🇰🇷 한글 설명
Linux 커널에서 __init으로 표시된 seg6_hmac_init() 함수가 EXPORT_SYMBOL로 외부에 노출되어 있었습니다. .init.text 섹션은 초기화 후 해제되므로, 이 심볼에 접근하면 커널 패닉이 발생할 수 있습니다. 해당 함수의 export를 제거하여 문제를 해결했습니다.
💡 쉬운 설명
커널 초기화 과정에서만 쓰이는 함수가 외부 모듈에서 호출될 수 있도록 공개되어 있었습니다. 초기화가 끝나 메모리에서 지워진 함수에 접근하면 시스템이 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: ipv6: unexport __init-annotated seg6_hmac_init()
EXPORT_SYMBOL and __init is a bad combination because the .init.text
section is freed up after the initialization. Hence, modules cannot
use symbols annotated __init. The access to a freed symbol may end up
with kernel panic.
modpost used to detect it, but it has been broken for a decade.
Recently, I fixed modpost so it started to warn it again, then this
showed up in linux-next builds.
There are two ways to fix it:
- Remove __init
- Remove EXPORT_SYMBOL
I chose the latter for this case because the caller (net/ipv6/seg6.c)
and the callee (net/ipv6/seg6_hmac.c) belong to the same module.
It seems an internal function call in ipv6.ko.
📍 영향받는 시스템
EXPORT_SYMBOL과 __init이 함께 적용된 seg6_hmac_init()을 포함한 Linux 커널 (IPv6 SRv6 HMAC 기능 관련 버전)
⚔️ 공격 벡터
공격자가 원격으로 악용하기 어렵고, 주로 잘못된 심볼 접근으로 인한 커널 패닉(서비스 거부) 가능성이 있음
🛡️ 대응 방법
커널을 해당 수정이 포함된 최신 안정 버전으로 업데이트하거나 배포판 보안 업데이트를 적용
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 공지나 패치 목록과 대조해 해당 수정이 포함되었는지 확인 (수정 이전 버전이면 업데이트 필요)