
CVE-2026-9999 के लिए प्रूफ-ऑफ-कॉन्सेप्ट और GLSL फज़र जो Chrome के ANGLE/Metal WebGL बैकएंड को टारगेट करता है, जिसमें बिल्ड फ़िंगरप्रिंटिंग, क्यूरेटेड शेडर्स और क्रैश आर्टिफैक्ट कैप्चर शामिल हैं।
| फ़ील्ड | मान |
|---|---|
| CVE | CVE-2026-9999 |
| विक्रेता / उत्पाद | Google Chrome |
| प्रभावित | Chrome < 148.0.7778.216, केवल macOS [1] |
| फिक्स संस्करण | 148.0.7778.216 [1] |
| प्रभाव | क्राफ्टेड HTML पेज के माध्यम से सैंडबॉक्स के भीतर मनमाना कोड निष्पादन [1] |
| Chromium गंभीरता | उच्च [1] |
| CVSS 3.1 (CISA-ADP) | 8.8 उच्च — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H [1] |
| NVD (NIST) CVSS आकलन | अभी तक प्रदान नहीं किया गया [1] |
| CWE | CWE-269 — अनुचित विशेषाधिकार प्रबंधन (CISA-ADP द्वारा संवर्धन) [1] |
| CISA SSVC (2026-05-29) | exploitation: none, automatable: no, technicalImpact: total [1] |
| प्रकाशित / अंतिम संशोधित | 2026-05-28 / 2026-07-21 [1] |
| मूल कारण | सार्वजनिक नहीं — Chromium इश्यू 513364480 "Permissions Required" दिखाता है [1] |
अटैक चेन निहितार्थ: "सैंडबॉक्स के भीतर" कोड निष्पादन [1] का अर्थ है कि हमलावर एक सैंडबॉक्स्ड प्रोसेस (सबसे संभावित रूप से GPU प्रोसेस) का नियंत्रण प्राप्त कर लेता है। पूर्ण ब्राउज़र अधिग्रहण के लिए अतिरिक्त रूप से एक अलग सैंडबॉक्स एस्केप की आवश्यकता होगी जो इस CVE का हिस्सा नहीं है।
निम्नलिखित सार्वजनिक रिकॉर्ड से अनुमान है, पुष्ट तथ्य नहीं:
इसलिए हार्नेस ठीक उन्हीं पैटर्न का परीक्षण करता है और फिर रेंडरर-साइड क्रैश (WebGL कॉन्टेक्स्ट लॉस्ट = GPU प्रोसेस क्रैश या वॉचडॉग किल) की खोज के लिए बड़े पैमाने पर GLSL को म्यूटेट करता है।
| फ़ाइल | उद्देश्य |
|---|---|
cve-2026-9999-poc.html | स्व-निहित PoC हार्नेस (कोई निर्भरता नहीं): बिल्ड फिंगरप्रिंटिंग, 8 चुनिंदा ट्रांसलेटर-स्ट्रेस शेडर, क्रैश आर्टिफैक्ट कैप्चर के साथ GLSL फ़ज़र |
README.md | यह फ़ाइल |
Google का Chrome for Testing संग्रह वर्जन-पिन किए गए बिल्ड प्रदान करता है जो ऑटो-अपडेट नहीं होते। नवीनतम भेद्य बिल्ड खोजें (148.0.7778.216 से नीचे के सभी बिल्ड प्रभावित हैं [1]):
import json, urllib.request
data = json.load(urllib.request.urlopen(
"https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"))
key = lambda v: tuple(int(x) for x in v.split('.'))
fix = (148, 0, 7778, 216)
cands = sorted((v["version"] for v in data["versions"]
if "chrome" in v.get("downloads", {}) and key(v["version"]) < fix), key=key)
print(cands[-5:]) # pick the last (newest vulnerable) entry
अपने आर्किटेक्चर के लिए डाउनलोड करें (uname -m):
# Apple Silicon
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-arm64/chrome-mac-arm64.zip
# Intel
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-x64/chrome-mac-x64.zip
एक लैब फ़ोल्डर में अनज़िप करें (जैसे ~/lab/, /Applications नहीं) और वहीं से लॉन्च करें।
यदि कोई विशिष्ट बिल्ड Chrome for Testing में उपलब्ध नहीं है, तो Chromium स्नैपशॉट संग्रह का उपयोग करें (Intel के लिए commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/, Apple Silicon के लिए .../Mac_Arm/), जो कमिट पोज़िशन द्वारा अनुक्रमित है — भेद्य वर्जन को chromium-history के माध्यम से ब्रांच पोज़िशन से मैप करें, फिर निकटतम स्नैपशॉट खींचें। स्नैपशॉट भी ऑटो-अपडेट नहीं होते।
Keystone अपडेटर एजेंटों को समाप्त करें और googleupdate.googleapis.com को ब्लॉक करें, अन्यथा टेस्ट बिल्ड रातोंरात चुपचाप खुद को पैच कर लेगा। Chrome for Testing बिल्ड के लिए आवश्यक नहीं है।
Metal के बिना, Chrome WebGL को सॉफ़्टवेयर (SwiftShader) में रेंडर करता है और ANGLE Metal बैकएंड कभी छुआ नहीं जाता। PoC पेज के कंसोल में, चलाएँ:
const c = document.createElement('canvas'), g = c.getContext('webgl2');
const x = g.getExtension('WEBGL_debug_renderer_info');
console.log(g.getParameter(x.UNMASKED_RENDERER_WEBGL));
// Good: contains "ANGLE Metal Renderer"
// Bad: contains "SwiftShader" -> the vulnerable path is NOT being exercised
आप chrome://gpu पर भी पुष्टि कर सकते हैं। GPU वर्चुअलाइज़ेशन वाले Parallels/VMware Fusion गेस्ट आमतौर पर काम करते हैं; न्यूनतम QEMU/UTM सेटअप अक्सर SwiftShader पर वापस चले जाते हैं।
cd <repo dir>
python3 -m http.server 8000
# then browse to http://localhost:8000/cve-2026-9999-poc.html
1) Run curated triggers पर क्लिक करें। आठ शेडर §2 में वर्णित ट्रांसलेटर पैटर्न पर दबाव डालते हैं (OOB कॉन्स्टेंट इंडेक्सिंग, इंटीजर-ओवरफ्लो ऐरे साइज़िंग, डायनेमिक मैट्रिक्स इंडेक्सिंग, लूप-अनरोल स्ट्रेस, ऐरे-ऑफ-ऐरे, डिस्कार्ड/स्विज़ल, प्रीप्रोसेसर एज केस, अत्यधिक बड़े UBO)। [!!] परिणामों और कॉन्टेक्स्ट-लॉस्ट ईवेंट पर नज़र रखें।2) Fuzz पर क्लिक करें। म्यूटेट किए गए GLSL शेडर लूप में कंपाइल, लिंक, ड्रॉ और रीड-बैक किए जाते हैं। CONTEXT LOST के लिए लॉग देखें।localStorage में सहेज लिया जाता है। इसे प्राप्त करें:
localStorage.getItem("cve20269999_poc_fs"); // crashing fragment shader
localStorage.getItem("cve20269999_crashes"); // crash event log
एक संदिग्ध रन का लाइव स्नैपशॉट
chrome://gpuऔर macOS Console (GPU प्रोसेस क्रैश रिपोर्ट) में भी दिखाई देता है।