
CVE-2026-68121 के लिए शोध रिपॉज़िटरी, जो pppoe_sendmsg() में Linux kernel PPPoE use-after-free है और स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) को सक्षम बनाता है, जिसमें PoC, मूल-कारण विश्लेषण और लैब सेटअप शामिल है।
PPPoEject
PPPoE ट्रांसमिट पथ में एक Linux कर्नेल मेमोरी-भ्रष्टाचार की भेद्यता,
जो डिवाइस हेडर कॉलबैक द्वारा skb हेड को पुनः आवंटित करने के बाद
sk_buff हेड के पुराने पॉइंटर के कारण होती है।
यह रिपॉज़िटरी केवल अधिकृत सुरक्षा अनुसंधान, कर्नेल भेद्यता विश्लेषण, CTF वातावरण, और रक्षात्मक परीक्षण के लिए है।
स्पष्ट अनुमति के बिना सिस्टम के विरुद्ध प्रूफ-ऑफ-कॉन्सेप्ट कोड निष्पादित न करें।
CVE रिकॉर्ड इस भेद्यता को एक पुराने PPPoE हेडर पॉइंटर के रूप में पहचानता है जो
तब अमान्य हो सकता है जब dev_hard_header() skb हेड को पुनः आवंटित करता है।
यह भेद्यता इसमें मौजूद है:
drivers/net/ppp/pppoe.c
इसके भीतर:
pppoe_sendmsg()
भेद्य अनुक्रम संकल्पनात्मक रूप से है:
pppoe_sendmsg()
│
▼
PPPoE हेडर पॉइंटर सहेजें
│
▼
dev_hard_header()
│
▼
skb हेड पुनः आवंटित हो सकता है
│
▼
पुराना पॉइंटर पुराना हो जाता है
│
▼
PPPoE पुराने पॉइंटर के माध्यम से लिखता है
│
▼
Use-After-Free
│
▼
कर्नेल मेमोरी भ्रष्टाचार
Linux नेटवर्किंग कोड डिवाइस हेडर कॉलबैक को sk_buff हेड को पुनः आवंटित करने
की अनुमति देता है। इसलिए dev_hard_header() लौटने के बाद पुराने हेड में एक
पॉइंटर को सुरक्षित रूप से पुनः उपयोग नहीं किया जा सकता।
मूल समस्या एक जीवनकाल उल्लंघन है।
pppoe_sendmsg() इसे लागू करने से पहले PPPoE हेडर का एक पॉइंटर प्राप्त करता है:
dev_hard_header()
हालाँकि, वह कॉलबैक skb हेड को स्थानांतरित कर सकता है।
संकल्पनात्मक रूप से:
कॉलबैक से पहले:
skb
┌──────────────────────────────┐
│ Ethernet │ PPPoE │ Payload │
└──────────┴───────┴───────────┘
▲
│
पुराना पॉइंटर
skb विस्तार के बाद:
पुराना skb हेड ──X──► मुक्त
नया skb हेड
┌────────────────────────────────────┐
│ Ethernet │ PPPoE │ Payload │
└──────────┴───────┴─────────────────┘
▲
│
वैध स्थान
पुराना पॉइंटर अभी भी मुक्त आवंटन को संदर्भित करता है।
जब PPPoE बाद में उस पॉइंटर के माध्यम से हेडर लिखता है, तो कर्नेल एक use-after-free राइट करता है।
प्रलेखित ट्रिगर में copy_from_user() के आसपास एक रेस और टीम डिवाइस के हेडर
संचालन में परिवर्तन शामिल है।
एक वर्णित अनुक्रम है:
PPPoE sendmsg()
│
▼
copy_from_user() ब्लॉक करता है
│
│
├───────────────┐
│ │
▼ ▼
टीम डिवाइस हेडर पहला गैर-Ethernet
संचालन बदलता है पोर्ट जोड़ा जाता है
│
▼
प्रतिनिधि GRE कॉलबैक
│
▼
skb हेड विस्तार
│ │
└───────────────┘
│
▼
पुराना PPPoE पॉइंटर
│
▼
use-after-free राइट
CVE रिकॉर्ड नोट करता है कि यह तब हो सकता है जब पहला गैर-Ethernet पोर्ट एक खाली टीम डिवाइस में जोड़ा जाता है और प्रतिनिधि 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 उच्च है।
प्रासंगिक घटक हैं:
PF_PPPOX / PPPoE सॉकेट
│
▼
pppoe_sendmsg()
│
▼
sk_buff (skb)
│
▼
dev_hard_header()
│
▼
नेटवर्क डिवाइस हेडर कॉलबैक
│
▼
संभावित skb हेड विस्तार
│
▼
PPPoE पुराना हेडर पॉइंटर
│
▼
UAF राइट
इसलिए भेद्य कोड केवल एक सामान्य PPPoE पैकेट पार्सर नहीं है; महत्वपूर्ण स्थिति PPPoE सॉकेट ट्रांसमिशन और गतिशील skb हेड पुनः आवंटन के बीच की परस्पर क्रिया है।
अपस्ट्रीम फिक्स का शीर्षक है:
pppoe: reload header pointer after dev_hard_header()
यह फिक्स डिवाइस हेडर निर्माण के बाद skb के नेटवर्क-हेडर ऑफ़सेट के माध्यम से PPPoE हेडर को पुनः लोड करता है।
महत्वपूर्ण गुण है:
पहले:
हेडर पॉइंटर
│
▼
dev_hard_header()
│
▼
skb स्थानांतरित होता है
│
▼
पॉइंटर = पुराना ❌
बाद में:
dev_hard_header()
│
▼
skb स्थानांतरित हो सकता है
│
▼
skb ऑफ़सेट का उपयोग करके हेडर पुनः लोड करें
│
▼
पॉइंटर = वैध ✅
pskb_expand_head() skb हेड को स्थानांतरित करते समय प्रासंगिक skb ऑफ़सेट को
अद्यतन करता है, जिससे पुनः आवंटन के बाद ऑफ़सेट-आधारित लुकअप सुरक्षित हो जाता है।
एक नियंत्रित प्रयोगशाला को इस प्रकार संरचित किया जा सकता है:
┌───────────────────────────────────────────────┐
│ 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
नियंत्रित कर्नेल अनुसंधान के लिए:
01. भेद्य कर्नेल बनाएं
↓
02. पृथक VM बूट करें
↓
03. PPPoE समर्थन सक्षम करें
↓
04. नियंत्रित नेटवर्किंग टोपोलॉजी बनाएं
↓
05. team/GRE इंटरैक्शन कॉन्फ़िगर करें
↓
06. PPPoE sendmsg() का प्रयोग करें
↓
07. skb जीवनकाल की निगरानी करें
↓
08. कर्नेल डायग्नोस्टिक्स कैप्चर करें
↓
09. अपस्ट्रीम पैच लागू करें
↓
10. दोहराएं और तुलना करें
उद्देश्य मेमोरी-जीवनकाल उल्लंघन को सुरक्षित रूप से पुनरुत्पादित करना और भेद्य तथा पैच किए गए व्यवहार की तुलना करना है।
CVE-2026-68121-PPPoEject/
│
├── README.md
│
├── exploit/
│ ├── poc.c
│ └── Makefile
│
├── analysis/
│ ├── root-cause.md
│ ├── pppoe-sendmsg.md
│ ├── skb-lifetime.md
│ └── patch-analysis.md
│
├── kernel/
│ ├── vulnerable/
│ └── patched/
│
├── lab/
│ ├── setup.sh
│ ├── cleanup.sh
│ └── topology.md
│
├── screenshots/
│
├── docs/
│ └── research-notes.md
│
└── LICENSE
अनुशंसित शमन यह है कि अपस्ट्रीम फिक्स या उपयुक्त डिस्ट्रिब्यूशन बैकपोर्ट वाले Linux कर्नेल में अपडेट करें।
Debian/Kali के लिए:
sudo apt update
sudo apt full-upgrade
फिर रीबूट करें:
sudo reboot
चल रहे कर्नेल को सत्यापित करें:
uname -r
डिस्ट्रिब्यूशन बैकपोर्ट भिन्न संस्करण संख्याओं का उपयोग कर सकते हैं, इसलिए प्रशासकों को अपने इंस्टॉल किए गए पैकेज को डिस्ट्रिब्यूशन की सुरक्षा सलाह के विरुद्ध सत्यापित करना चाहिए। Debian वर्तमान में Bookworm के लिए 6.1.187-1 और Trixie के लिए 6.12.101-1 सहित फिक्स किए गए संस्करणों को सूचीबद्ध करता है।
Linux स्थिर ट्री में कई अनुरक्षित शाखाओं में यह फिक्स मौजूद है। CVE रिकॉर्ड संबंधित स्थिर कमिट्स को सूचीबद्ध करता है और प्रभावित स्रोत फ़ाइल को इस प्रकार पहचानता है:
drivers/net/ppp/pppoe.c
भेद्य इतिहास Linux कर्नेल PPPoE कार्यान्वयन से शुरू होता है और
फिक्स किया गया कमिट श्रृंखला CVE डेटा में
7a56e7c9b08e08fd55a1bcada24cf4fe3782b722 द्वारा प्रतिनिधित्व किए गए अपस्ट्रीम
फिक्स पर समाप्त होती है।
skb में एक पॉइंटर को skb हेड को पुनः आवंटित करने में सक्षम कॉलबैक के बाद वैध नहीं माना जा सकता।
नेटवर्किंग कॉलबैक अंतर्निहित मेमोरी लेआउट को बदल सकते हैं।
यह पैच दर्शाता है कि संभावित रूप से स्थानांतरित करने वाले ऑपरेशन के दौरान कच्चे पॉइंटर को बनाए रखने की तुलना में skb-सापेक्ष ऑफ़सेट अधिक सुरक्षित क्यों है।
भेद्य स्थिति पैकेट ट्रांसमिशन और नेटवर्क-डिवाइस कॉन्फ़िगरेशन के आसपास समवर्ती गतिविधि पर निर्भर करती है।
कर्नेल नेटवर्किंग कोड में एक पुराना पॉइंटर गोपनीयता, अखंडता, और उपलब्धता परिणामों के साथ एक मेमोरी भ्रष्टाचार प्रिमिटिव बन सकता है।
drivers/net/ppp/pppoe.cpppoe_sendmsg()pppoe: reload header pointer after dev_hard_header()Linux Kernel · PPPoE · Use-After-Free · Kernel Security · LPE
Research • Analyze • Reproduce • Harden
| फ़ील्ड | विवरण |
|---|
| CVE | CVE-2026-68121 |
| कोडनेम | PPPoEject |
| घटक | Linux Kernel |
| सबसिस्टम | PPPoE / Networking |
| प्रभावित फ़ाइल | drivers/net/ppp/pppoe.c |
| प्राथमिक फ़ंक्शन | pppoe_sendmsg() |
| बग वर्ग | Use-After-Free |
| प्रभाव | कर्नेल मेमोरी भ्रष्टाचार |
| संभावित प्रभाव | स्थानीय विशेषाधिकार वृद्धि |
| CVSS v3.1 | 7.8 — उच्च |
| हमला वेक्टर | स्थानीय |
| हमला जटिलता | निम्न |
| आवश्यक विशेषाधिकार | निम्न |
| उपयोगकर्ता इंटरैक्शन | कोई नहीं |
| स्थिति | पैच किया गया |
| सुरक्षा गुण | भेद्य | पैच किया गया |
|---|
| कॉलबैक से पहले हेडर पॉइंटर सहेजा गया | ✅ | — |
| skb हेड स्थानांतरित हो सकता है | ✅ | ✅ |
| कॉलबैक के बाद पॉइंटर ताज़ा किया गया | ❌ | ✅ |
| पुराने पॉइंटर का डीरेफ़रेंस | संभव | रोका गया |
| Use-after-free राइट | संभव | शमित |
| कर्नेल मेमोरी भ्रष्टाचार | संभव | शमित |