
CVE-2026-68121 के लिए शोध रिपॉज़िटरी, जो pppoe_sendmsg() में Linux kernel PPPoE use-after-free है और स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) को सक्षम बनाता है, जिसमें PoC, मूल-कारण विश्लेषण और लैब सेटअप शामिल है।
PPPoEject
PPPoE ट्रांसमिट पथ में एक Linux कर्नेल मेमोरी-करप्शन भेद्यता, जो किसी डिवाइस हेडर कॉलबैक द्वारा skb हेड को पुनः आवंटित करने के बाद sk_buff हेडर के पुराने (stale) पॉइंटर के कारण होती है।
यह रिपॉज़िटरी केवल अधिकृत सुरक्षा अनुसंधान, कर्नेल भेद्यता विश्लेषण, CTF वातावरण और रक्षात्मक परीक्षण के लिए है।
स्पष्ट प्राधिकरण के बिना सिस्टम के विरुद्ध प्रूफ-ऑफ-कॉन्सेप्ट कोड निष्पादित न करें।
| फ़ील्ड | विवरण |
|---|---|
| CVE | CVE-2026-68121 |
| कोडनेम | PPPoEject |
| घटक | Linux Kernel |
| सबसिस्टम | PPPoE / Networking |
| प्रभावित फ़ाइल | drivers/net/ppp/pppoe.c |
| प्राथमिक फ़ंक्शन | pppoe_sendmsg() |
| बग वर्ग | Use-After-Free |
| प्रभाव | कर्नेल मेमोरी करप्शन |
| संभावित प्रभाव | स्थानीय विशेषाधिकार वृद्धि (Local Privilege Escalation) |
| CVSS v3.1 | 7.8 — उच्च |
| आक्रमण वेक्टर | स्थानीय |
| आक्रमण जटिलता | निम्न |
| आवश्यक विशेषाधिकार | निम्न |
| उपयोगकर्ता इंटरैक्शन | कोई नहीं |
| स्थिति | पैच किया गया |
CVE रिकॉर्ड इस भेद्यता को एक पुराने (stale) PPPoE हेडर पॉइंटर के रूप में पहचानता है, जो तब अमान्य हो सकता है जब dev_hard_header() skb हेड को पुनः आवंटित करता है।
यह भेद्यता इसमें मौजूद है:
drivers/net/ppp/pppoe.c
के भीतर:
pppoe_sendmsg()
The vulnerable sequence is conceptually:
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() लौटने के बाद पुराने हेड में मौजूद पॉइंटर का सुरक्षित रूप से पुनः उपयोग नहीं किया जा सकता।
मुख्य समस्या एक लाइफटाइम उल्लंघन है।
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() के आसपास एक रेस और टीम डिवाइस के
हेडर ऑपरेशंस में बदलाव शामिल है।
वर्णित अनुक्रमों में से एक है:
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 रिकॉर्ड में उल्लेख किया गया है कि यह तब हो सकता है जब पहला गैर-ईथरनेट पोर्ट एक खाली टीम डिवाइस में जोड़ा जाता है और प्रत्यायोजित 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()
The fix device header creation के बाद skb के network-header offset के माध्यम से PPPoE header को reload करता है।
महत्वपूर्ण गुण यह है:
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 ऑफ़सेट को अपडेट करता है, जिससे पुनःआवंटन के बाद ऑफ़सेट-आधारित लुकअप सुरक्षित हो जाता है।
| Security Property | Vulnerable | Patched |
|---|---|---|
| Header pointer saved before callback | ✅ | — |
| skb head can move | ✅ | ✅ |
| Pointer refreshed after callback | ❌ | ✅ |
| Stale pointer dereference | Possible | Prevented |
| Use-after-free write | Possible | Mitigated |
| Kernel memory corruption | Possible | Mitigated |
एक नियंत्रित प्रयोगशाला को इस प्रकार संरचित किया जा सकता है: