
CVE-2026-68121 연구 저장소로, pppoe_sendmsg()의 Linux 커널 PPPoE use-after-free 취약점을 다루며, 이는 로컬 권한 상승을 가능하게 하고 PoC, 근본 원인 분석, 실습 환경 구성을 포함합니다.
PPPoEject
PPPoE 전송 경로에서 발생하는 Linux 커널 메모리 손상 취약점으로,
디바이스 헤더 콜백이 skb head를 재할당한 후 sk_buff 헤더를 가리키는
오래된 포인터로 인해 발생합니다.
이 저장소는 승인된 보안 연구, 커널 취약점 분석, CTF 환경 및 방어적 테스트 목적으로만 사용하도록 의도되었습니다.
명시적인 승인 없이 시스템에 대해 개념 증명 코드를 실행하지 마십시오.
| 필드 | 세부 정보 |
|---|---|
| CVE | CVE-2026-68121 |
| 코드명 | PPPoEject |
| 구성 요소 | Linux 커널 |
| 하위 시스템 | PPPoE / 네트워킹 |
| 영향받는 파일 | drivers/net/ppp/pppoe.c |
| 주요 함수 | pppoe_sendmsg() |
| 버그 분류 | Use-After-Free |
| 영향 | 커널 메모리 손상 |
| 잠재적 영향 | 로컬 권한 상승 |
| CVSS v3.1 | 7.8 — 높음 |
| 공격 벡터 | 로컬 |
| 공격 복잡도 | 낮음 |
| 필요 권한 | 낮음 |
| 사용자 상호작용 | 없음 |
| 상태 | 패치됨 |
CVE 레코드는 이 취약점을 dev_hard_header()가 skb head를 재할당할 때
유효하지 않게 될 수 있는 오래된 PPPoE 헤더 포인터로 식별합니다.
이 취약점은 다음에 존재합니다:
drivers/net/ppp/pppoe.c
within:
pppoe_sendmsg()
취약한 시퀀스는 개념적으로 다음과 같습니다:
pppoe_sendmsg()
│
▼
Save PPPoE header pointer
│
▼
dev_hard_header()
│
▼
skb head may be reallocated
│
▼
Old pointer becomes stale
│
▼
PPPoE writes through stale pointer
│
▼
Use-After-Free
│
▼
Kernel memory corruption
Linux 네트워킹 코드는 디바이스 헤더 콜백이 sk_buff 헤드를 재할당하도록 허용합니다. 따라서 이전 헤드를 가리키는 포인터는 dev_hard_header()가 반환된 후 안전하게 재사용할 수 없습니다.
핵심 문제는 수명 위반(lifetime violation) 입니다.
pppoe_sendmsg()는 다음을 호출하기 전에 PPPoE 헤더에 대한 포인터를 얻습니다:
dev_hard_header()
하지만 그 콜백은 skb 헤드를 이동시킬 수 있습니다.
개념적으로:
Before callback:
skb
┌──────────────────────────────┐
│ Ethernet │ PPPoE │ Payload │
└──────────┴───────┴───────────┘
▲
│
stale pointer
After skb expansion:
old skb head ──X──► freed
new skb head
┌────────────────────────────────────┐
│ Ethernet │ PPPoE │ Payload │
└──────────┴───────┴─────────────────┘
▲
│
valid location
이전 포인터는 여전히 해제된 할당을 참조합니다.
PPPoE가 이후에 해당 포인터를 통해 헤더를 기록하면, 커널은 use-after-free write를 수행합니다.
문서화된 트리거는 copy_from_user()와 team 디바이스의 헤더 연산 변경
주변의 경쟁 조건을 포함합니다.
설명된 시퀀스 중 하나는 다음과 같습니다:
PPPoE sendmsg()
│
▼
copy_from_user() blocks
│
│
├───────────────┐
│ │
▼ ▼
Team device changes First non-Ethernet
header operations port is added
│
▼
Delegated GRE callback
│
▼
skb head expansion
│ │
└───────────────┘
│
▼
stale PPPoE pointer
│
▼
use-after-free write
CVE 레코드에 따르면, 이는 빈 team 디바이스에 첫 번째 비이더넷 포트가 추가되고 위임된 GRE 헤더 콜백이 skb 헤드를 확장할 때 발생할 수 있다고 명시하고 있습니다.
이 취약점은 다음을 초래할 수 있습니다:
CVE에 공개된 CVSS 벡터는 다음과 같습니다:
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
기본 점수 7.8 High로 평가되었습니다.
관련 구성 요소는 다음과 같습니다:
PF_PPPOX / PPPoE socket
│
▼
pppoe_sendmsg()
│
▼
sk_buff (skb)
│
▼
dev_hard_header()
│
▼
Network device header callback
│
▼
Potential skb head expansion
│
▼
PPPoE stale header pointer
│
▼
UAF write
취약한 코드는 단순히 일반적인 PPPoE 패킷 파서가 아니다; 핵심 조건은 PPPoE 소켓 전송과 동적 skb 헤드 재할당 간의 상호작용이다.
업스트림 수정의 제목은 다음과 같다:
pppoe: reload header pointer after dev_hard_header()
수정 사항은 디바이스 헤더 생성 후 skb의 네트워크 헤더 오프셋을 통해 PPPoE 헤더를 다시 로드합니다.
중요한 속성은 다음과 같습니다:
Before:
header pointer
│
▼
dev_hard_header()
│
▼
skb moves
│
▼
pointer = stale ❌
After:
dev_hard_header()
│
▼
skb may move
│
▼
reload header using skb offset
│
▼
pointer = valid ✅
pskb_expand_head()는 skb 헤드가 재배치될 때 관련 skb 오프셋을 갱신하여, 재할당 후에도 오프셋 기반 조회가 안전하도록 만든다.
| 보안 속성 | 취약 버전 | 패치 버전 |
|---|---|---|
| 콜백 전에 저장된 헤더 포인터 | ✅ | — |
| skb 헤드 이동 가능 여부 | ✅ | ✅ |
| 콜백 후 포인터 갱신 | ❌ | ✅ |
| 오래된 포인터 역참조 | 가능 | 방지됨 |
| use-after-free 쓰기 | 가능 | 완화됨 |
| 커널 메모리 손상 | 가능 | 완화됨 |
통제된 실험실은 다음과 같이 구성할 수 있다:
┌───────────────────────────────────────────────┐
│ Linux VM │
│ │
│ ┌───────────────┐ │
│ │ PPPoE Socket │ │
│ └───────┬───────┘ │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ pppoe_sendmsg │ │
│ └───────┬───────┘ │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ Team │ │
│ └───────┬───────┘ │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ GRE │ │
│ └───────────────┘ │
│ │
└───────────────────────────────────────────────┘
유용한 커널 디버깅 도구:
gdb
pwndbg
gef
crash
objdump
readelf
pahole
커널 메시지 모니터링:
sudo dmesg -w
PPPoE 지원 여부를 확인합니다:
lsmod | grep pppoe
사용 가능한 PPP 모듈 확인:
find /lib/modules/$(uname -r) -iname '*pppoe*'
현재 실행 중인 커널을 확인합니다:
uname -r
PPPoE 관련 구성을 확인합니다:
grep -E 'CONFIG_PPP|CONFIG_PPPOE' \
/boot/config-$(uname -r)
일반적으로 관련된 옵션은 다음과 같습니다:
CONFIG_PPP
CONFIG_PPP_ASYNC
CONFIG_PPP_SYNC_TTY
CONFIG_PPPOE
통제된 커널 연구를 위해: