
CVE-2025-43300 का विस्तृत तकनीकी विश्लेषण, DNG फ़ाइल प्रसंस्करण में एक बफर ओवरफ़्लो भेद्यता जो रिमोट कोड निष्पादन को सक्षम करती है। TIFF/JPEG मेटाडेटा असंगति, मेमोरी भ्रष्टाचार यांत्रिकी और एक्सप्लॉइट प्रवाह की व्याख्या करता है।
CVE-2025-43300 DNG (डिजिटल नेगेटिव) फ़ाइलों के प्रसंस्करण में एक बफर ओवरफ़्लो भेद्यता है जो TIFF मेटाडेटा और JPEG डेटा के बीच असंगति के कारण होती है, जो रिमोट कोड निष्पादन (RCE) की अनुमति देती है।
DNG File
├── TIFF Container (मेटाडेटा)
│ ├── Header
│ ├── IFD (इमेज फ़ाइल डायरेक्टरी)
│ │ ├── Tag 277: SamplesPerPixel (घोषित करता है कितने घटक)
│ │ ├── Tag 513: JpegOffset (JPEG कहाँ से शुरू होता है)
│ │ └── Tag 514: JpegLength (JPEG का आकार)
│ └── अन्य मेटाडेटा
└── JPEG Data (छवि का वास्तविक डेटा)
├── SOI (इमेज का आरंभ)
├── SOF0 (फ्रेम हेडर)
│ └── Components: घटकों की वास्तविक संख्या
└── Compressed Data
// मूलभूत समस्या:
TIFF घोषित करता है: "इस छवि में 2 घटक हैं" (SamplesPerPixel = 2)
JPEG में है: "वास्तव में मेरे पास 3 घटक हैं" (SOF0 Components = 3)
// संवेदनशील कोड (सरलीकृत)
int samples = read_tiff_tag(277); // 2 पढ़ता है
buffer = malloc(samples * sizeof(component)); // 2 के लिए आवंटित
// लेकिन JPEG के आधार पर प्रक्रिया करता है
int components = read_jpeg_sof0(); // 3 पढ़ता है
for (int i = 0; i < components; i++) { // 3 बार लूप!
buffer[i] = process_component(i); // i=2 पर OVERFLOW!
}
[1] फ़ाइल खोलना
↓
[2] TIFF पार्सर
├─→ TIFF हेडर पढ़ता है
├─→ IFD ढूंढता है
├─→ Tag 277 (SamplesPerPixel = 2) पढ़ता है
└─→ 2 घटकों के लिए बफर आवंटित करता है
[3] JPEG का स्थान ज्ञात करना
├─→ Tag 513 (JPEG का ऑफ़सेट) पढ़ता है
└─→ फ़ाइल में स्थान पर नेविगेट करता है
[4] JPEG पार्सर
├─→ SOF0 मार्कर (0xFFC0) पढ़ता है
├─→ घटकों की संख्या निकालता है (3)
└─→ TIFF के विरुद्ध सत्यापन नहीं करता!
[5] प्रसंस्करण
├─→ 3 घटकों को प्रोसेस करने के लिए लूप
├─→ बफर में केवल 2 के लिए स्थान है
└─→ 3रा घटक बफर से बाहर लिखता है
[6] बफर ओवरफ़्लो
├─→ आसन्न डेटा को ओवरराइट करता है
├─→ रिटर्न एड्रेस को ओवरराइट कर सकता है
└─→ निष्पादन नियंत्रण संभव बनाता है
[7] कोड निष्पादन
└─→ हमलावर प्रोग्राम प्रवाह को नियंत्रित करता है
Stack Layout:
+----------------+ ← शीर्ष
| Buffer (2 comp)| [घटक 0]
| | [घटक 1]
+----------------+
| स्थानीय डेटा |
+----------------+
| फ्रेम पॉइंटर |
+----------------+
| रिटर्न एड्रेस | ← वापस लौटने का पता
+----------------+
Stack Layout:
+----------------+
| Buffer (2 comp)| [घटक 0]
| | [घटक 1]
+----------------+
| स्थानीय डेटा | [घटक 2] ← OVERFLOW!
+----------------+
| फ्रेम पॉइंटर | [ओवरराइट]
+----------------+
| रिटर्न एड्रेस | [हमलावर द्वारा नियंत्रित]
+----------------+