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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
gdcm-security-poc — छह GDCM निष्कर्षों के लिए निजी एंड-टू-एंड सैनिटाइज़र प्रतिकृति पैकेज | Kitploit
उपकरण/GitHubGitHub/abhinavagarwal07/gdcm-security-poc
स्थैतिक विश्लेषणगतिशील विश्लेषण (सैंडबॉक्सिंग)मेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणफज़िंगबाइनरी विश्लेषणपेपर और शोधलर्निंग और शिक्षा
GitHubabhinavagarwal07/gdcm-security-poc

gdcm-security-poc

छह GDCM निष्कर्षों के लिए निजी एंड-टू-एंड सैनिटाइज़र प्रतिकृति पैकेज

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

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

सभी देखें →

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

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

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

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

GDCM निष्कर्ष 1-6: पुनरुत्पादन पैकेज

GDCM में छह पार्सर/कोडेक दोष, v3.2.6 पर सैनिटाइज़र विफलताओं या सीमित प्रसार जाँचों के रूप में पुनरुत्पादित। प्रत्येक स्वचालित ट्रिगर का एक निकट-वैध नियंत्रण है जो संवेदनशील सिग्नल उत्पन्न नहीं करता। निष्कर्ष 1 में एक इंस्ट्रुमेंटेड कंट्रोल-फ़्लो प्रिमिटिव भी शामिल है।

रखरखावकर्ता और भेद्यता-समन्वयक समीक्षा के लिए अभिप्रेत। कुछ भी चलाने से पहले SAFETY.md पढ़ें।

पिन किए गए लक्ष्य

manifest/targets.env:

नामरिवीज़नयह क्या है
vulnerable9c71b163टैग v3.2.6
master2cd05d13अपस्ट्रीम master स्नैपशॉट स्थिर रूप से समीक्षित; रनटाइम मैट्रिक्स लंबित
fixedunsetकेवल तब भरें जब कोई समीक्षित उपचार कमिट मौजूद हो

master एक दिनांकित स्नैपशॉट है, चलती शाखा नहीं। दोनों रिवीज़न सार्वजनिक रिपॉज़िटरी से पहुँच योग्य हैं, इसलिए bootstrap.sh किसी भी निजी स्रोत के बिना किसी को भी तैयार कर सकता है।

निष्कर्ष का दायरा

इस रिपॉज़िटरी में रनटाइम साक्ष्य v3.2.6 के लिए है। नीचे दी गई व्यापक श्रेणियाँ स्रोत-इतिहास निरीक्षण से आती हैं; संबंधित पैटर्न पिन किए गए master स्नैपशॉट में भी बने हुए हैं।

#CWEस्रोत-निरीक्षित श्रेणीआवश्यक पथ
1CWE-787v3.0.4 से v3.2.7 तकमल्टी-फ़्रेम RLE YBR_FULL_422 रीड
2CWE-787v2.0.16 से v3.2.7 तकJPEG2000 एन्कोडिंग/ट्रांसकोडिंग
3CWE-125v2.0.5 से v3.2.7 तकसेगमेंटेड पैलेट पार्सिंग; LUT अनुप्रयोग प्रसारित मानों को उजागर करता है
4CWE-787v2.0.8 से v3.2.7 तकImageRegionReader::ReadIntoBuffer; CVE-2024-22373 के बाद अपूर्ण परिशुद्धता सत्यापन से संबंधित
5CWE-674v2.0.4 या पहले से v3.2.7 तकसामान्य नेस्टेड-सीक्वेंस पार्सिंग
6CWE-369v2.0.4 या पहले से v3.2.7 तकNumSegments=0 के साथ सामान्य RLE पार्सिंग

सामग्री

  • fixtures/ - निष्क्रिय DICOM इनपुट, manifest/expectations.json में SHA-256-पिन किए गए और प्रत्येक ट्रिगर रन से पहले सत्यापित
  • generators/ - प्रत्येक फ़िक्स्चर के लिए नियतात्मक, निर्भरता-मुक्त स्रोत जनरेटर
  • harnesses/ - न्यूनतम रीड/एन्कोड/डिकोड हार्नेस; निष्कर्ष 2 को gdcmconv CLI और लाइब्रेरी ट्रांसकोड API दोनों के माध्यम से दिखाया गया है जिसे कोई सर्वर कॉल करेगा
  • manifest/expectations.json - fixed लक्ष्य के लिए मशीन-पठनीय कमांड, निर्णायक सिग्नल, और स्वीकृति मानदंड
  • scripts/ - पिन किए गए स्रोत की तैयारी, सैनिटाइज़र बिल्ड, सीमित निष्पादन, सफ़ाई
  • evidence/ - पहले से देखे गए संक्षिप्त परिणाम, अपरीक्षित लक्ष्यों को स्पष्ट रूप से बताया गया
  • LICENSE - MIT लाइसेंस

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

Git, Python 3, CMake 3.20+, Ninja, और C++11 टूलचेन (Clang या GCC) के साथ एक डिस्पोज़ेबल Linux या macOS बिल्ड वातावरण। Ubuntu पर: git python3 cmake ninja-build clang zlib1g-dev। GCC का उपयोग करने के लिए CC/CXX सेट करें।

स्रोत तैयारी HTTPS के माध्यम से क्लोन करती है जब तक कि GDCM_SOURCE_REPO किसी मौजूदा स्थानीय क्लोन की ओर इंगित न करे। कोई SSH होस्ट उपयोग नहीं किया जाता।

तैयार करें और बनाएँ

ये कमांड केवल स्रोत और बिल्ड आर्टिफ़ैक्ट तैयार करते हैं; वे कोई फ़िक्स्चर नहीं खोलते।

root@kitploit:~
./scripts/build-target.sh vulnerable asan  debug
./scripts/build-target.sh vulnerable ubsan debug
./scripts/build-target.sh master     asan  debug
./scripts/build-target.sh master     ubsan debug

तीसरा तर्क प्रोफ़ाइल है। debug -O0 -g है; release -O2 -g -DNDEBUG है, जो GDCM के gdcm_debug_assert()s को हटा देता है और यह दर्शाता है कि वितरण लाइब्रेरी को कैसे बनाते हैं। दोनों के अंतर्गत मैट्रिक्स चलाना उस पहले प्रश्न का उत्तर देता है जो एक रखरखावकर्ता पूछता है, कि क्या रिपोर्टें assertion-सक्षम बिल्ड का एक आर्टिफ़ैक्ट हैं।

GDCM_SUPPORT_BROKEN_IMPLEMENTATION=ON GDCM का अपना डिफ़ॉल्ट है और इसे वैसे ही छोड़ दिया गया है। रूढ़िवादी समानांतरता को JOBS=8 से ओवरराइड करें।

प्रत्येक बिल्ड अपने GDCM बिल्ड ट्री में build-info.json (रिवीज़न, कंपाइलर, फ़्लैग, प्लेटफ़ॉर्म) लिखता है, और प्रत्येक रन सारांश इसे एम्बेड करता है, इसलिए संग्रहीत साक्ष्य स्व-वर्णनात्मक है।

चलाएँ

root@kitploit:~
export GDCM_REPRO_ACK=I_UNDERSTAND_THIS_CRASHES_A_LOCAL_PROCESS

./scripts/run-matrix.sh vulnerable master --profile debug   # all automated cases
./scripts/run-one.sh vulnerable f1                          # one trigger
./scripts/run-one.sh vulnerable f1 --control                # its control

run-matrix.sh प्रत्येक लक्ष्य के लिए प्रत्येक स्वचालित केस चलाता है, पहली विफलता पर नहीं रुकता, और _runs/matrix-<stamp>.json के साथ-साथ एक रेंडर किया गया _runs/matrix-<stamp>.md लिखता है। दो-चरणीय f1-exploit केस मैनुअल रहता है और इसे विफल स्वचालित केस के रूप में गलत वर्गीकृत करने के बजाय वैसा ही रिपोर्ट किया जाता है।

प्रत्येक चाइल्ड में कोर डंप अक्षम और 15-सेकंड का टाइमआउट होता है; निष्कर्ष 5 को अतिरिक्त रूप से एक सीमित स्टैक सीमा मिलती है। आउटपुट _runs/ के अंतर्गत रहते हैं। क्लासिफायर सैनिटाइज़र क्लास और संबंधित फ़ंक्शन से मेल खाता है, कभी भी एड्रेस, PID, या स्रोत पंक्ति संख्याओं से नहीं।

vulnerable के लिए, एक केस तब पास होता है जब निर्णायक सिग्नल प्रकट होता है और उसका नियंत्रण साफ़ रहता है। master के लिए, रनर पूर्व-घोषित निर्णय के बजाय अवलोकन रिकॉर्ड करता है। fixed के लिए, एक केस तभी पास होता है जब सिग्नल अनुपस्थित हो, कोई अन्य सैनिटाइज़र या घातक सिग्नल प्रकट न हो, और हार्नेस एक अनुमत स्वच्छ परिणाम लौटाए। ये नियम तब तक अनंतिम हैं जब तक FIXED_REV किसी वास्तविक पैच का नाम न दे; उन्हें उस पैच के इच्छित reject-or-process व्यवहार के विरुद्ध समीक्षित किया जाना चाहिए।

केस

केसनिष्कर्षयह क्या दिखाता है
f11RLECodec::DecodeFragment में ASan हीप राइट
f1-exploit1इंस्ट्रुमेंटेड आसन्न-ऑब्जेक्ट ओवरराइट और इनडायरेक्ट-ब्रांच कंट्रोल (Linux x86-64)
f22gdcmconv --j2k के माध्यम से opj_write_from_memory में ASan हीप राइट
f2-lib2ImageChangeTransferSyntax::Change के माध्यम से वही राइट
f33सेगमेंटेड पैलेट विस्तार में ASan हीप रीड
f3-propagation3आउट-ऑफ़-बाउंड बाइट्स डिकोड किए गए पिक्सल तक पहुँचते हैं, एक गणना के रूप में रिपोर्ट किए गए
f3-sentinel3एक सीमित ज्ञात गार्ड वर्ड तार्किक LUT सीमा को पार करता है
f44JPEG2000 रीजन डिकोड में ASan हीप राइट
f55नेस्टेड सीक्वेंस आइटम पर ASan स्टैक एक्सहॉशन
f66RLE डिकोड में UBSan डिवीज़न बाय ज़ीरो; x86 पर SIGFPE

दो और हार्नेस पुनरुत्पादन केस के बजाय शोषणीयता अनुसंधान हैं, और केवल Linux x86-64 पर अनसैनिटाइज़्ड प्रोफ़ाइल में बनते हैं:

हार्नेसनिष्कर्षयह क्या स्थापित करता है
finding01_groom1परीक्षित glibc आसन्नता, एलोकेशन-रिकॉर्डिंग हुक के माध्यम से देखी गई
finding03_leak3एक 131070-बाइट ओवररीड एक बिल्ड-विशिष्ट लाइब्रेरी पॉइंटर को उजागर कर सकता है

संग्रहीत साक्ष्य

evidence/v3.2.6-macos-arm64-debug.md पूर्ण v3.2.6 डिबग मैट्रिक्स रिकॉर्ड करता है, जिसमें प्रत्येक नियंत्रण और दोनों सीमित निष्कर्ष 3 प्रसार जाँचें शामिल हैं।

evidence/v3.2.6-linux-x86_64-finding01-groom.md और evidence/v3.2.6-linux-x86_64-finding03-leak.md नीचे दिए गए दो शोषणीयता परिणामों को रिकॉर्ड करते हैं। वर्तमान-master, पूर्ण रिलीज़-प्रोफ़ाइल मैट्रिक्स, और f1-exploit परिणामों का दावा तब तक नहीं किया जाता जब तक उनके ट्रांसक्रिप्ट संग्रहीत न हों।

सफ़ाई

root@kitploit:~
./scripts/clean.sh

सफ़ाई पैकेज मार्कर के बिना चलने से इनकार करती है और इस रिपॉज़िटरी के अंतर्गत केवल _work, _build, _generated, _runs, और Python बाइटकोड कैश को हटाती है। evidence/ के अंतर्गत संग्रहीत साक्ष्य नहीं हटाया जाता।

शोषण प्रिमिटिव (निष्कर्ष 1)

f1-exploit केवल Linux-x86_64 है और इसे हाथ से चलाया जाता है; manifest/expectations.json में सटीक कमांड अनुक्रम है। हार्नेस के नियतात्मक एलोकेशन लेआउट के अंतर्गत यह तीन अलग तथ्यों का परीक्षण करता है, प्रत्येक में एक मिलान किया गया नकारात्मक केस है:

  • ओवरफ़्लो उस मेमोरी तक पहुँचता है जो एलोकेटर ने लक्ष्य बफ़र के बाद दी थी;
  • वहाँ पहुँचने वाले बाइट्स ठीक वही बाइट्स हैं जो तैयार किए गए DICOM ने माँगे थे। एक अलग मान रखना, या सादा f1 फ़िक्स्चर का उपयोग करना, भ्रष्टाचार की रिपोर्ट करता है लेकिन स्पष्ट रूप से नहीं सामग्री नियंत्रण, इसलिए जाँच मिथ्यापनीय है;
  • सिंथेटिक विक्टिम का फ़ंक्शन पॉइंटर अंततः फ़ाइल द्वारा आपूर्ति किए गए एड्रेस को धारण करता है, और इसे कॉल करना नियंत्रण को हार्नेस के अंदर एक फ़ंक्शन में स्थानांतरित करता है।

12288-बाइट ओवरफ़्लो के भीतर 8-बाइट विंडो में से लगभग आधे एक मनमाना मान स्वीकार करते हैं। बाकी युग्मित हैं, क्योंकि DoYBRFull422 एक स्रोत बाइट को दो आउटपुट स्थितियों में डुप्लिकेट करता है; ऑफ़सेट 6144 मुक्त विंडो में से एक है। फ़्रेम 1 का डिकोड अंत में चलता है, इसलिए यह फ़्रेम 1 की सामग्री है जो एलोकेशन के बाद बनी रहती है।

हार्नेस रिकॉर्ड करता है कि क्या ImageReader::Read() true लौटाता है जबकि आसन्न ऑब्जेक्ट संशोधित होता है। उस परिणाम को देखे गए साक्ष्य के रूप में वर्णित करने से पहले एक सफल Linux x86-64 ट्रांसक्रिप्ट संग्रहीत किया जाना चाहिए।

इंस्ट्रुमेंटेशन के बिना क्या होता है

f1-exploit अपना स्वयं का विक्टिम लेआउट आपूर्ति करता है, इसलिए यह उत्तर नहीं दे सकता कि क्या एक असंशोधित प्रक्रिया में वह लेआउट है। finding01_groom स्टॉक glibc, डिफ़ॉल्ट PIE, और ASLR का उपयोग करता है, वैश्विक एलोकेशन हुक के साथ जो एलोकेशन रिकॉर्ड करते हैं लेकिन स्थानांतरित नहीं करते। संग्रहीत परीक्षणों में:

  • 24576-बाइट बफ़र के बाद का एलोकेशन सभी 20 रिकॉर्ड किए गए परीक्षणों में एक मुक्त 2049-बाइट GDCM स्क्रैच चंक था। कोई जीवित ऑब्जेक्ट या vtable नहीं देखा गया;
  • उस चंक के फ्री-लिस्ट मेटाडेटा को भ्रष्ट करना glibc की अपनी संगति जाँच को ट्रिप करता है, जो निरस्त कर देती है। सादा finding01 हार्नेस बिना किसी इंस्ट्रुमेंटेशन के उसी तरह मर जाता है।

परीक्षित glibc बिल्ड पर, निष्कर्ष 1 ने विश्वसनीय रूप से सेवा-अस्वीकृति का कारण बना; कोई कोड-निष्पादन पथ नहीं पाया गया। परीक्षित ज्यामिति निश्चित थी, और अन्य एलोकेटर या प्लेटफ़ॉर्म हीप को अलग तरह से बिछा सकते हैं।

finding03_leak अधिक मजबूत परिणाम है। परीक्षित बिल्ड में, आउट-ऑफ़-बाउंड रीड 131070 बाइट्स तक पहुँचता है, एक gdcm::ByteValue vtable पॉइंटर डिकोड किए गए पिक्सल में प्रवेश करता है, और हार्नेस उस बिल्ड के ज्ञात vtable ऑफ़सेट का उपयोग करके लाइब्रेरी लोड बेस प्राप्त करता है। यह एक स्थानीय API-स्तरीय प्रकटीकरण परिणाम है: इसके लिए LUT अनुप्रयोग और डिकोड किए गए पिक्सल बफ़र तक पहुँच की आवश्यकता होती है। यह नहीं दिखाता कि कोई नेटवर्क सेवा उन पिक्सल को लौटाती है।

यहाँ दोनों को कोड निष्पादन में श्रृंखलाबद्ध नहीं किया जा सकता, और केवल इसलिए नहीं कि कोई विक्टिम नहीं मिला: उन्हें अलग PhotometricInterpretation मानों की आवश्यकता होती है, इसलिए उन्हें दो फ़ाइलों की आवश्यकता होती है, और एक लीक किया गया बेस तभी उपयोगी होता है जब तक लीक करने वाली प्रक्रिया जीवित है।

साक्ष्य सीमा

एक सैनिटाइज़र रिपोर्ट परीक्षित प्रक्रिया और रिवीज़न में बताई गई मेमोरी-सुरक्षा या अपरिभाषित-व्यवहार घटना को सिद्ध करती है। f1-exploit एक इंस्ट्रुमेंटेड एलोकेटर के अंतर्गत बाइट नियंत्रण और एक आसन्न फ़ंक्शन-पॉइंटर ओवरराइट का परीक्षण करता है जो जानबूझकर लक्ष्य लेआउट आपूर्ति करता है। यह एक असंशोधित उपभोक्ता में उस लेआउट को स्थापित नहीं करता। संग्रहीत finding01_groom परीक्षणों ने परीक्षित ज्यामिति और glibc बिल्ड के लिए वह लेआउट नहीं देखा।

इनमें से कोई भी किसी विशेष उत्पाद में दूरस्थ पहुँच, दृढ़ता, या डाउनस्ट्रीम प्रयोज्यता सिद्ध नहीं करता। किसी दिए गए परिनियोजन के लिए पहुँच-योग्यता तर्क एक अलग दावा है, जो प्रकटीकरण पाठ में किया गया है और इस पैकेज द्वारा नहीं।

टूल डाउनलोड करें