🔍 CVE-2026-98952

0.0
CVSS Score
UNKNOWN
2026-10-23
2026-10-23 13:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 PFCP 모듈(pfcp_encap_recv / pfcp_session_recv)에서 S 플래그가 설정된 세션 메시지를 처리할 때, 8바이트 SEID를 읽기 전에 해당 영역이 선형 메모리에 있는지 확인하지 않아 패킷 데이터 범위를 벗어난 읽기가 발생하는 문제입니다. 수정 사항은 SEID 끝까지 pskb_may_pull()로 확보하고, 너무 짧은 패킷은 폐기하며, offsetofend()로 실제 와이어 헤더 크기를 사용하도록 한 것입니다.

💡 쉬운 설명

짧거나 조각난 특정 네트워크 패킷을 받으면 커널이 패킷 범위 밖의 메모리를 읽을 수 있습니다. 읽힌 값이 터널 정보에 저장되어 트래픽 분류에 영향을 줄 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: pfcp: make sure the SEID is linear before reading it pfcp_encap_recv() only makes sure that the UDP header and the 4 byte PFCP header are in the linear area. When the S flag is set, pfcp_session_recv() then reads the 8 byte SEID that follows, which is not covered by the pskb_may_pull() check. A short PFCP packet with the S flag set, or one whose session header lies in a fragment, therefore makes pfcp_session_recv() read beyond the end of the packet data, and whatever it finds there is stored in the tunnel metadata that flower later classifies on. Pull up to the end of the SEID before reading it, and drop packets that are too short to contain it. Reload the header pointer afterwards since pskb_may_pull() may reallocate the skb head. Use offsetofend() rather than sizeof(struct pfcphdr_session): the structure is not packed, so its size is 16 bytes because of the alignment of the __be64 member, while the header on the wire is only 12 bytes, and valid session messages would be dropped.

📍 영향받는 시스템

PFCP 터널 기능을 사용하는 Linux 커널 (수정 커밋 이전 버전, 배포판별 버전 확인 필요)

⚔️ 공격 벡터

원격지에서 S 플래그가 설정된 짧거나 조각난 PFCP 패킷을 UDP로 전송하여 범위 밖 메모리 읽기를 유발

🛡️ 대응 방법

배포판 벤더가 제공하는 최신 커널 보안 업데이트를 적용하고 재부팅합니다.

🔧 검증 코드

커널 버전이 벤더의 수정 버전 이상인지 확인하고, pfcp 모듈이 출력되지 않으면 해당 모듈이 로드되어 있지 않아 영향이 없을 가능성이 높습니다.

Shell / Script
uname -r; lsmod | grep -i pfcp

💻 영향받는 소프트웨어

Linux Kernel