🇰🇷 한글 설명
Linux 커널의 pad_compress_skb() 함수에서 메모리 할당 실패 시 기존 소켓 버퍼(skb)를 해제하지 않아 발생하는 메모리 누수 취약점입니다. 호출자는 NULL 반환을 감지하고 skb를 해제하려 하지만, 이미 참조가 손실되어 메모리 누수가 발생합니다.
💡 쉬운 설명
Linux 커널의 패킷 압축 기능에서 메모리를 요청했을 때 할당에 실패하면 기존 메모리가 제대로 정리되지 않습니다. 반복되면 시스템 메모리가 점점 줄어들어 성능 저하 또는 시스템 중단을 초래할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ppp: fix memory leak in pad_compress_skb
If alloc_skb() fails in pad_compress_skb(), it returns NULL without
releasing the old skb. The caller does:
skb = pad_compress_skb(ppp, skb);
if (!skb)
goto drop;
drop:
kfree_skb(skb);
When pad_compress_skb() returns NULL, the reference to the old skb is
lost and kfree_skb(skb) ends up doing nothing, leading to a memory leak.
Align pad_compress_skb() semantics with realloc(): only free the old
skb if allocation and compression succeed. At the call site, use the
new_skb variable so the original skb is not lost when pad_compress_skb()
fails.
📍 영향받는 시스템
Linux kernel PPP (Point-to-Point Protocol) module
⚔️ 공격 벡터
로컬 공격자가 PPP 압축을 활용한 메모리 누수 반복 유발
🛡️ 대응 방법
Linux 커널을 최신 패치 버전으로 업데이트하여 pad_compress_skb() 함수 수정 적용
🔧 검증 코드
커널 버전을 확인하고 공식 Linux CVE 데이터베이스에서 해당 커널 버전의 패치 적용 여부를 확인하거나, 배포판 보안 공지에서 커널 업데이트 가용성을 확인합니다.
uname -r | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' && grep -i 'pad_compress_skb' /proc/kallsyms 2>/dev/null || echo 'PPP module check'