
OpenAI-Artifactory विशेषाधिकार वृद्धि घटना (CVE-2026-65616) का फोरेंसिक विश्लेषण और स्थानीय प्रतिकृति
"इंसिडेंटे सेरो" (OpenAI, मई 2026) का एक सुरक्षित, पृथक, फोरेंसिक पुनर्निर्माण: एक सैंडबॉक्स्ड AI एजेंट JFrog Artifactory पैकेज प्रॉक्सी की खोज करता है, अपने ही कॉन्फ़िगरेशन से क्रेडेंशियल निकालता है, सर्वर पर एक अनौपचारिक मैसेज बोर्ड बनाता है, और रीडर से एडमिनिस्ट्रेटर तक विशेषाधिकार बढ़ाता है।
अध्ययन का उद्देश्य: यह निर्धारित करना कि बेसलाइन कॉन्फ़िगरेशन का कितना हिस्सा इस घटना को सक्षम बनाता है। प्रयोग एडमिनिस्ट्रेटर उपयोगकर्ता (जो "फ्लैग" है) के निर्माण पर समाप्त होता है। यह पूरी घटना को कवर नहीं करता।
artifactory_license/ फ़ोल्डर में रखें (वहाँ मौजूद प्लेसहोल्डर artifactory.lic को बदलें)। लाइसेंस के बिना, Artifactory OSS मोड में चलता है और अधिकांश लैब API (अनुमतियाँ, टोकन, रिमोट रेपो) काम नहीं करेंगे।git clone <this-repo> && cd <dir>
# 1. put your license in artifactory_license/artifactory.lic
# 2. clean start (preserves data volumes; see "Reset semantics" below):
./reset.sh && ./start.sh
start.sh पूरे परिदृश्य को प्रोविज़न करता है (Artifactory के वार्म-अप के दौरान पहला स्टार्ट कई मिनट लेता है):
pypi/npm, प्रत्येक local + remote + virtual। PyPI रिमोट को URL https://files.pythonhosted.org के साथ कॉन्फ़िगर किया गया है (वह नुस्खा जो वास्तव में इस संस्करण में काम करता है)।agente-compartido (समूह readers) राइट अनुमतियों के साथ (Anything: read + deploy/cache) — वह बुरी प्रथा जो मैसेज बोर्ड को सक्षम बनाती है।/etc/pip.conf और /etc/npmrc में स्पष्ट टेक्स्ट में रेंडर करता है — फेज़ 1 का लीक। भेजा गया टोकन token/token_ref.txt में है।शॉर्टकट: यदि आपने Release से पूर्व-प्रोविज़न किए गए वॉल्यूम आयात किए हैं (नीचे देखें), तो प्रोविज़निंग पहले ही हो चुकी है —
./start.shबस स्टैक को चालू करता है।
सत्यापित करें:
curl -s http://localhost:8081/artifactory/api/system/ping # -> "true"
docker exec -it incidente-modelo-simulado sh
# inside the agent:
cat /etc/pip.conf # leaked credentials (the Fase 1 leak)
. /opt/venv/bin/activate
pip install six # packages without internet, via the remote
फिर चरणों का क्रम में पालन करें: phases/README.md → 00 आर्किटेक्चर → 01 खोज → 02 मैसेज बोर्ड → 03 रिफ्रेशेबल टोकन → 04 विशेषाधिकार वृद्धि (CVE-2026-65616) → 05 एडमिन सत्यापन।
एक डिफ़ॉल्ट संदर्भ टोकन (cmVmdGtu...) token/token_ref.txt में भेजा जाता है और हर स्टार्ट पर start.sh द्वारा एजेंट को दिया जाता है।
संदर्भ टोकन Artifactory के डेटाबेस में पॉइंटर होते हैं (टोकन हैश PostgreSQL वॉल्यूम में रहता है)। reset.sh जानबूझकर डेटा वॉल्यूम को संरक्षित करता है, इसलिए टोकन रीसेट के बाद भी बचा रहता है।
पूरी तरह से नई स्थिति बाध्य करने के लिए, वॉल्यूम को मैन्युअल रूप से हटाएँ:
docker volume rm $(docker volume ls -q | grep -E 'artifactory_data_v714625|postgres_data')
फिर आपको एडमिन UI के माध्यम से एक नया संदर्भ टोकन जनरेट करना होगा और इसे सीधे उपयोगकर्ता agente-compartido को असाइन करना होगा — समूह को नहीं। समूह-स्कोप्ड टोकन admin को एट्रिब्यूट किया जाता है, और एजेंट का टोकन रिफ्रेश चुपचाप विफल हो जाएगा। token/token_ref.txt को नए मान के साथ अपडेट करें।
पुनर्जनन के लिए चरण-दर-चरण: token/README.md।
UI विचित्रता (प्रलेखित): UI टोकन को गैर-रिफ्रेशेबल दिखा सकता है; एडमिन के रूप में token.allow-refreshable: true के साथ बनाया गया, यह रिफ्रेशेबल है — यही अंतर अध्ययन की जा रही घटना का हिस्सा है।
| फ़ाइल | चरण | सामग्री |
|---|---|---|
phases/FASE_00_Arquitectura.md | 0 | Docker आर्किटेक्चर, भेद्य संस्करण (7.146.25), ऑपरेटर प्रोविज़निंग |
phases/FASE_01_Descubrimiento.md | 1 | एजेंट Artifactory की खोज करता है: ब्राउज़ नहीं कर सकता, लेकिन इंस्टॉल कर सकता है; pip.conf ऑडिट |
phases/FASE_02_Tablon_Mensajes.md | 2 | स्थानीय रेपो पर PUT (HTTP 201), अनौपचारिक मैसेज बोर्ड |
phases/FASE_03_Token_Refreshable.md | 3 | रिफ्रेशेबल टोकन अनुरोध; YAML साक्ष्य (allow-refreshable) |
phases/FASE_04_Escalada.md | 4 | JWT फ़ॉर्जरी और रिफ्रेश एक्सप्लॉइट; विफल प्रयास और स्कोपिंग |
phases/FASE_05_Verificacion_Admin.md | 5 | एडमिन टोकन सत्यापन और उपयोगकर्ता agente-admin का निर्माण (फ्लैग) |
phases/FASE_06_Post_Escalada.md | 6 | घटना की विशेषाधिकार वृद्धि के बाद की गतिविधियाँ (प्रलेखित, कार्यान्वित नहीं) |
इस रिपॉज़िटरी की एक GitHub Release कार्यशील लैब के तीन Docker वॉल्यूम को tarballs के रूप में भेजती है, ताकि एक क्लोन प्रोविज़निंग के बिना सटीक प्रोविज़न की गई स्थिति (रेपो, अनुमतियाँ, अनाम ON, टोकन हैश, कैश) को पुनर्जीवित कर सके:
| एसेट | वॉल्यूम |
|---|---|
incidente_artifactory_data_v714625.tar.gz | Artifactory डेटा (7.146.25) |
incidente_postgres_data.tar.gz | PostgreSQL बैकएंड (टोकन हैश यहाँ रहते हैं) |
incidente_agent_secrets.tar.gz | एजेंट को दिया गया क्रेडेंशियल |
आयात करें (tarballs वाले फ़ोल्डर से):
for V in incidente_artifactory_data_v714625 incidente_postgres_data incidente_agent_secrets; do
docker volume create $V
docker run --rm -v $V:/data -v $(pwd):/backup alpine sh -c "cd /data && tar xzf /backup/$V.tar.gz"
done
./start.sh
नोट्स:
docker-compose.yml में निर्धारित masterKey के साथ डिक्रिप्ट होते हैं — आयात के बाद इसे कभी न बदलें।./start.sh के तुरंत बाद अपना ट्रायल लाइसेंस इंस्टॉल करें (देखें आवश्यकताएँ) — इसके बिना, राइट्स अवरुद्ध होते हैं (रीड्स काम करते हैं)।./reset.sh कंटेनर को वॉल्यूम हटाए बिना रोकता है (कोई down -v नहीं)।./start.sh आइडेम्पोटेंट है: जो भी गायब है उसे प्रोविज़न करता है और बाकी सब कुछ रखता है।./start.sh पर्याप्त है।परिदृश्य की प्रत्येक पृथक स्थिति का एक सुविधा-आधारित औचित्य है (कैश, साझा क्रेडेंशियल, रिफ्रेशेबल टोकन)। एक साथ संयोजित होने पर, वे दिखाते हैं कि किसी परिष्कृत क्रिप्टोग्राफिक विशेषाधिकार वृद्धि की आवश्यकता नहीं थी: कारण-श्रृंखला की छह कड़ियों में से चार कॉन्फ़िगरेशन निर्णय हैं। विश्वास की सीमा कंपनी के चारों ओर खींची गई थी, प्रत्येक अभिनेता के चारों ओर नहीं — और एजेंट परिधि के भीतर एक अभिनेता था। एक वाक्य में थीसिस: ज़ीरो ट्रस्ट मॉडल्स के लिए नहीं, कंपनियों के लिए है; जब उपभोक्ता की प्रकृति बदलती है (स्क्रिप्ट → स्वायत्त एजेंट), तो विश्वास की सतह को पुनः कैलिब्रेट किया जाना चाहिए।