Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-14321 — Firefox के RTCEncodedFrameBase में Use-After-Free भेद्यता का प्रदर्शन करने वाला प्रूफ-ऑफ-कॉन्सेप्ट, जो WebRTC Encoded Transforms के माध्यम से हीप भ्रष्टाचार और संभावित RCE को सक्षम बनाता है। | Kitploit
उपकरण/GitHubGitHub/h3raklez/cve-2025-14321
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणCTFपेपर और शोधलर्निंग और शिक्षाबाइनरी शोषण
GitHubh3raklez/cve-2025-14321

CVE-2025-14321

Firefox के RTCEncodedFrameBase में Use-After-Free भेद्यता का प्रदर्शन करने वाला प्रूफ-ऑफ-कॉन्सेप्ट, जो WebRTC Encoded Transforms के माध्यम से हीप भ्रष्टाचार और संभावित RCE को सक्षम बनाता है।

रिपॉजिटरी देखें
26 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2025-14321 प्रूफ ऑफ कॉन्सेप्ट

विवरण

Firefox के RTCEncodedFrameBase घटक में Use-After-Free (UAF) भेद्यता के लिए PoC, जो WebRTC Encoded Transforms API के माध्यम से शोषणीय है।

CVE-2025-14321: RTCEncodedFrameBase का डिस्ट्रक्टर फ्रेम की मूल मेमोरी को मुक्त करते समय DetachArrayBuffer() को कॉल नहीं करता। परिणामस्वरूप, JavaScript के ArrayBuffers पहले से मुक्त मेमोरी (डैंगलिंग पॉइंटर्स) की ओर इशारा करते रहते हैं, जिससे Firefox के कंटेंट प्रोसेस के हीप पर मनमाना पढ़ना और लिखना संभव होता है।

इस PoC का परीक्षण Mozilla Firefox 145.0.1 और Windows 10 पर किया गया है।

मूल कारण

Firefox NewArrayBufferWithUserOwnedContents() के माध्यम से एन्कोडेड वीडियो/ऑडियो फ्रेम्स को JavaScript ArrayBuffers के रूप में उजागर करता है। जब मूल (C++) फ्रेम नष्ट होता है, तो ArrayBuffer की बैकिंग मेमोरी मुक्त हो जाती है, लेकिन JavaScript में ArrayBuffer अलग (detach) नहीं होता। यह स्वामित्व अपरिवर्तनीयता का उल्लंघन करता है और एक डैंगलिंग पॉइंटर उत्पन्न करता है।

कमजोर कोड (dom/media/webrtc/jsapi/RTCEncodedFrameBase.cpp):

root@kitploit:~
// ❌ डिस्ट्रक्टर ArrayBuffer को अलग नहीं करता
RTCEncodedFrameBase::~RTCEncodedFrameBase() = default;

पैच किया गया कोड:

root@kitploit:~
// ✅ मूल मेमोरी मुक्त करने से पहले ArrayBuffer को अलग करता है
RTCEncodedFrameBase::~RTCEncodedFrameBase() {
  DetachData();
}

प्रभावित संस्करण

  • Firefox < 146
  • Firefox ESR < 140.6

प्राप्त प्रिमिटिव्स

  • READ: new Uint8Array(buf) हीप पर अन्य ऑब्जेक्ट्स को पुनः आवंटित मेमोरी से डेटा पढ़ता है
  • WRITE: new Uint8Array(buf).fill(0x41) हीप पर आसन्न ऑब्जेक्ट्स (vtables, DOM संरचनाएं, आदि) को दूषित करता है

ये प्रिमिटिव्स भेद्यता प्रदर्शित करने के लिए पर्याप्त हैं। अतिरिक्त हीप शेपिंग के साथ, ये रिमोट कोड निष्पादन (RCE) तक बढ़ सकते हैं।

पूर्वापेक्षाएँ

Firefox कॉन्फ़िगरेशन (about:config)

root@kitploit:~
media.peerconnection.scripttransform.enabled = true
media.peerconnection.ice.loopback             = true
media.peerconnection.ice.no_host              = false
media.peerconnection.ice.relay_only           = false
media.peerconnection.ice.proxy_only           = false

⚠ प्राथमिकताएँ बदलने के बाद Firefox को पुनः प्रारंभ करें।

कैमरा अनुमति (वैकल्पिक)

PoC getUserMedia() के माध्यम से कैमरा एक्सेस का अनुरोध करने का प्रयास करता है। यह अनिवार्य नहीं है यदि ICE प्राथमिकताएँ सही ढंग से सेट की गई हों। इसका कार्य Firefox को RFC IP हैंडलिंग मोड 1 में बढ़ावा देना है, जो उन परिदृश्यों में ICE होस्ट उम्मीदवारों की उत्पत्ति सुनिश्चित करता है जहाँ अकेले प्राथमिकताएँ पर्याप्त नहीं हैं।

व्यवहार में:

  • बिना कैमरे वाली VM: getUserMedia() बिना प्रॉम्प्ट दिखाए चुपचाप विफल हो जाता है (NotFoundError)। ICE फिर भी media.peerconnection.ice.loopback = true के कारण कनेक्ट होता है।
  • कैमरे वाला सिस्टम: Firefox अनुमति प्रॉम्प्ट दिखाता है। इसे स्वीकार करने से ICE मोड 1 सुनिश्चित होता है।
  • कैमरा अस्वीकृत: PoC फ़ॉलबैक के रूप में एक कैनवास का उपयोग करता है। यदि प्राथमिकताएँ सही हैं तो ICE कनेक्ट हो सकता है।

HTTP सर्वर

वेब वर्कर file:// से काम नहीं करते। HTTP के माध्यम से सर्व करें:

root@kitploit:~
python3 -m http.server 8080

कमजोर Firefox में खोलें: http://localhost:8080/poc-cve-2025-14321.html

एक्सप्लॉइट प्रवाह

1. getUserMedia → ICE मोड 1 (सर्वोत्तम प्रयास)

PoC कैमरा एक्सेस का अनुरोध करने का प्रयास करता है। यदि कैमरा उपलब्ध है और उपयोगकर्ता स्वीकार करता है, तो Firefox सत्र को RFC IP हैंडलिंग मोड 1 में बढ़ावा देता है। यदि getUserMedia() विफल होता है (बिना कैमरे वाली VM, अनुमति अस्वीकृत), तो PoC फ्रेम स्रोत के रूप में एक कैनवास के साथ जारी रहता है — यदि media.peerconnection.ice.loopback = true सक्रिय है तो ICE वैसे भी कनेक्ट होता है।

2. फ्रेम स्रोत के रूप में एनिमेटेड कैनवास

एक 320×240 का <canvas> 30fps पर एनिमेशन के साथ captureStream(30) के माध्यम से बनाया जाता है। यह पूर्वानुमेय रूप से एन्कोडेड वीडियो फ्रेम उत्पन्न करता है। एक बार ICE कनेक्ट हो जाने और कैमरा उपयोग हो जाने के बाद, PoC replaceTrack() के माध्यम से कैमरा ट्रैक को कैनवास ट्रैक से बदल देता है और कैमरा मुक्त कर देता है।

3. WebRTC लूपबैक कनेक्शन

मानक SDP नेगोशिएशन और ट्रिकल ICE के साथ दो स्थानीय RTCPeerConnection (pc1 ↔ pc2) बनाए जाते हैं। उम्मीदवार सीधे पीयर्स के बीच आदान-प्रदान किए जाते हैं।

4. ट्रांसफ़ॉर्म वर्कर (RTCRtpScriptTransform)

SDP नेगोशिएशन से पहले pc1 के सेंडर को एक RTCRtpScriptTransform असाइन किया जाता है। वर्कर सेंडिंग पाइपलाइन से प्रत्येक एन्कोडेड फ्रेम को इंटरसेप्ट करता है।

5. ArrayBuffers का प्रतिधारण (200 फ्रेम)

पहले 200 फ्रेम में से प्रत्येक के लिए, वर्कर:

  1. frame.data (ArrayBuffer जो मूल मेमोरी की ओर इशारा करता है) निकालता है
  2. संदर्भ को एक सरणी (leaks[]) में सहेजता है
  3. एक ज्ञात पैटर्न लिखता है: new Uint8Array(buf).fill(0x41)
  4. फ्रेम को आगे नहीं भेजता → मूल रैपर नष्ट हो जाता है → मेमोरी मुक्त हो जाती है

आगे न भेजने पर, GC C++ रैपर को नष्ट कर देता है और मूल मेमोरी मुक्त कर देता है। लेकिन JavaScript का ArrayBuffer पॉइंटर बनाए रखता है — डैंगलिंग पॉइंटर बन गया।

6. UAF का पता लगाना

फ्रेम 201 से शुरू करते हुए, हर 3 फ्रेम पर वर्कर:

  1. प्रत्येक बनाए रखे गए बफर के पहले 16 बाइट्स पढ़ता है
  2. यदि कोई बाइट 0x41 से भिन्न है, तो आवंटकर्ता ने उस मेमोरी का पुन: उपयोग किया → UAF की पुष्टि
  3. बफर पर 0x41 को फिर से लिखता है (दूसरे के हीप पर राइट प्रिमिटिव)

मुक्त मेमोरी पर पढ़ने/लिखने का यह चक्र हीप की प्रगतिशील क्षति का कारण बनता है जब तक कि Firefox टैब क्रैश न हो जाए (सलाह में रिपोर्ट किए गए SIGSEGV के समतुल्य)।

अपेक्षित परिणाम

कमजोर संस्करण (Firefox < 146)

root@kitploit:~
[0.4s] ✓ प्रारंभिक ट्रैक: कैनवास (फ़ॉलबैक)
[0.4s] ✓ ICE कनेक्शन स्थापित!
[0.5s] ▶▶▶ पहला एन्कोडेड फ्रेम प्राप्त! ◀◀◀
[0.5s] लीक #0: 1219B → 41414141414141414141414141414141
[2.7s] लीक #49: 1497B → 41414141414141414141414141414141
[9.8s] लीक #199: 1870B → 41414141414141414141414141414141
[9.9s] 200 ArrayBuffers बनाए रखा → मूल मेमोरी पहले ही मुक्त
[9.9s] → डैंगलिंग पॉइंटर्स सक्रिय, पुन: उपयोग की प्रतीक्षा…
       [ टैब क्रैश — हीप क्षति ]

नोट: यदि कैमरा उपलब्ध है और अनुमति दी गई है, तो लॉग दिखाएगा ✓ getUserMedia स्वीकृत — ICE मोड 1 सक्रिय और फिर ✓ ट्रैक बदला गया: कैमरा → कैनवास ICE कनेक्शन के बाद। बिना कैमरे वाली VM में, PoC बिना प्रॉम्प्ट के सीधे कैनवास का उपयोग करता है।

टैब का क्रैश हीप क्षति की पुष्टि करता है: अन्य ऑब्जेक्ट्स (vtables, DOM नोड्स) को पुनः आवंटित मेमोरी पर 0x41 लिखने से कंटेंट प्रोसेस में अमान्य मेमोरी एक्सेस होता है।

पैच किया गया संस्करण (Firefox ≥ 146)

root@kitploit:~
✓ बफर[0] सही ढंग से अलग — फिक्स सक्रिय
ArrayBuffer अलग — पैच किया गया संस्करण ✓

डिस्ट्रक्टर में DetachData() मूल मेमोरी मुक्त करने से पहले ArrayBuffer को अमान्य कर देता है, डैंगलिंग पॉइंटर को समाप्त कर देता है।

परियोजना संरचना

root@kitploit:~
├── poc-cve-2025-14321.html            # कार्यात्मक PoC (सुपाठ्य स्रोत कोड)
└── README.md                          # यह फ़ाइल

पैच

Mozilla ने Firefox 146 में सभी डिस्ट्रक्टर्स और RTCEncodedFrameBase के टियरडाउन पथों में DetachData() जोड़कर भेद्यता को ठीक किया।

कमिट: https://hg-edge.mozilla.org/mozilla-central/rev/1051067f6e83

शमन

  • Firefox को संस्करण 146 या उच्चतर में अपडेट करें
  • Firefox ESR को संस्करण 140.6 या उच्चतर में अपडेट करें

अस्वीकरण

⚠ केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए

यह PoC भेद्यता के अस्तित्व को हीप क्षति (क्रैश) के बिंदु तक प्रदर्शित करता है। यह कोड निष्पादन के लिए आवश्यक हीप शेपिंग, ASLR बाइपास या हाईजैक तकनीकों को लागू नहीं करता। इसका उद्देश्य विशेष रूप से नियंत्रित वातावरण में CVE के सत्यापन और समझ के लिए है।

संदर्भ

  • CVE: CVE-2025-14321
  • ब्लॉग पोस्ट: https://aisle.com/blog/firefox-webrtc-encoded-transforms-uaf-via-undetached-arraybuffer-cve-2025-14321
  • सलाह: MFSA 2025-92 · बग 1992760
  • Mozilla कमिट: https://hg-edge.mozilla.org/mozilla-central/rev/1051067f6e83

श्रेय

  • खोजकर्ता: इगोर मोर्गनस्टर्न, AISLE रिसर्च टीम
  • रिपोर्ट की तिथि: 2025-10-06
  • पैच की तिथि: 2025-11-19
  • प्रकाशन की तिथि: 2025-12-09
टूल डाउनलोड करें