
PostgreSQL के फुल-टेक्स्ट सर्च (tsvector/tsquery) में पाई गई आउट-ऑफ-बाउंड्स राइट भेद्यता CVE-2026-14662 को, पैच-पूर्व (18.4) और पैच-पश्चात (18.6) संस्करणों को Docker में साथ-साथ चलाकर सत्यापित करने का रिकॉर्ड और प्रस्तुति सामग्री
PostgreSQL के फुल-टेक्स्ट सर्च डेटा प्रकारों (tsvector / tsquery) में पाई गई
CVE-2026-14662 के बारे में,
सुधार से पहले (18.4) और सुधार के बाद (18.6) को Docker में एक साथ चलाकर, व्यवहार के अंतर को वास्तव में देखे जाने का रिकॉर्ड है।
इसे सुरक्षा सीखने के उद्देश्य से तैयार किया गया है, और प्रस्तुति सामग्री भी शामिल है।
| आइटम | विवरण |
|---|
| CVE | CVE-2026-14662 |
| लक्ष्य | PostgreSQL का tsvector / tsquery |
| प्रकार | पूर्णांक रैप-अराउंड के कारण आवंटन आकार की कमी और आउट-ऑफ-बाउंड राइट |
| CVSS | 8.8 / 10.0 (High) |
| प्रकाशन तिथि | 2026-08-13 |
| सुधारित संस्करण | 18.5, 17.11, 16.15, 15.19, 14.24 |
कमजोरियों की श्रृंखला निम्न रूप में होती है।
CWE-190 (पूर्णांक ओवरफ्लो) → CWE-131 (बफर आकार की गलत गणना) → CWE-787 (आउट-ऑफ-बाउंड राइट)
=मूल कारण =अंतिम प्रभाव
.
├── docs/
│ └── presentation.md प्रस्तुति सामग्री (भेद्यता की व्याख्या + CWE की व्याख्या)
└── docker/
├── README.md पुनरुत्पादन वातावरण के उपयोग की विधि
├── docker-compose.yml
├── init/ दोनों संस्करणों में चलाया जाने वाला सामान्य आरंभिकरण SQL
├── test/ PoC और डेमो के लिए SQL
└── run.sh प्रारंभ → PoC निष्पादन → परिणाम प्रदर्शन
Docker और Docker Compose होने पर, निम्न से ही पुनरुत्पादन किया जा सकता है।
cd docker
./run.sh
18.4 और 18.6 के कंटेनर शुरू होते हैं, समान आरंभिकरण SQL डाला जाता है, और समान PoC दोनों में चलाकर परिणाम साथ-साथ प्रदर्शित किए जाते हैं। विवरण के लिए docker/README.md देखें।
| परीक्षण | PostgreSQL 18.4 (सुधार से पहले) | PostgreSQL 18.6 (सुधार के बाद) |
|---|---|---|
| tsquery का स्व-OR संयोजन बार-बार करना | 18 बार तक बिना किसी त्रुटि के सफल (अंतिम 8,650,748 बाइट) | 17वीं बार में ERROR: tsquery is too large |
| कुल लंबाई 1,200,000 बाइट का शब्द सरणी | सफल हो जाता है | ERROR: string is too long for tsvector (1200000 bytes, max 1048575 bytes) |
| 3,000 बाइट का एक शब्द | सफल हो जाता है | ERROR: word is too long (3000 bytes, max 2046 bytes) |
सुधार से पहले, आंतरिक प्रतिनिधित्व की सीमा (20-बिट बिटफील्ड से उत्पन्न MAXSTRPOS = 1,048,575) से
अधिक डेटा को बिना एक भी त्रुटि दिखाए स्वीकार कर लिया जाता है।
ध्यान दें कि 18.6 का "ठीक 17वीं बार" पर रुकने का कारण गणना द्वारा समझाया जा सकता है, और सैद्धांतिक मान और मापा गया मान बाइट-दर-बाइट मेल खाते हैं (विवरण प्रस्तुति सामग्री में)।
अंतर की जाँच के लिए PostgreSQL आधिकारिक रिपॉजिटरी का क्लोन उपयोग किया गया, लेकिन आकार बड़ा होने (प्रत्येक 185MB) के कारण इसे इस रिपॉजिटरी में शामिल नहीं किया गया है। आवश्यकता होने पर निम्न प्रकार से प्राप्त करें।
git clone --branch REL_18_4 --depth 1 https://github.com/postgres/postgres.git postgres-18.4
git clone --branch REL_18_6 --depth 1 https://github.com/postgres/postgres.git postgres-18.6
सुधार किए गए फ़ाइलें निम्न तीन हैं।
src/backend/utils/adt/tsquery_util.csrc/backend/utils/adt/tsvector.csrc/backend/utils/adt/tsvector_op.c