Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-41490 — DuckDB, Snowflake, BigQuery और DeltaLake एकीकरणों को प्रभावित करने वाले, गतिशील विभाजन कुंजियों के माध्यम से Dagster डेटाबेस I/O प्रबंधकों में अनधिप्रमाणित SQL इंजेक्शन को प्रदर्शित करने वाला PoC सहित CVE-2026-41490 का विस्तृत खुलासा। | Kitploit
उपकरण/GitHubGitHub/romain-deperne/cve-2026-41490
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षाडेटाबेस सुरक्षा
GitHubromain-deperne/cve-2026-41490

CVE-2026-41490

DuckDB, Snowflake, BigQuery और DeltaLake एकीकरणों को प्रभावित करने वाले, गतिशील विभाजन कुंजियों के माध्यम से Dagster डेटाबेस I/O प्रबंधकों में अनधिप्रमाणित SQL इंजेक्शन को प्रदर्शित करने वाला PoC सहित CVE-2026-41490 का विस्तृत खुलासा।

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें
रिपॉजिटरी देखें
231 महीना पहलेअभी तक समीक्षित नहीं

CVE-2026-41490 — डायनामिक पार्टीशन कुंजियों के माध्यम से Dagster डेटाबेस I/O प्रबंधकों में SQL इंजेक्शन

गंभीरता: उच्च (CVSS 8.3) CWE: CWE-89 — SQL इंजेक्शन प्रभावित: Dagster core <= 1.13.0 और एकीकरण पैकेज <= 0.29.0 में ठीक किया गया: Dagster core 1.13.1 और एकीकरण पैकेज 0.29.1 सलाह: GHSA-mjw2-v2hm-wj34 NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-41490 श्रेय: Romain Deperne

संक्षेप में

प्रत्येक Dagster डेटाबेस I/O प्रबंधक अपने WHERE क्लॉज़ का निर्माण पार्टीशन कुंजी मानों को सीधे SQL में f-string-इंटरपोलेट करके करता है। जब कोई एसेट DynamicPartitionsDefinition का उपयोग करता है, तो पार्टीशन कुंजियाँ रनटाइम पर GraphQL API (addDynamicPartition) के माध्यम से सेट की जा सकती हैं — जो डिफ़ॉल्ट webserver परिनियोजन में अनप्रमाणित है। एक दुर्भावनापूर्ण पार्टीशन कुंजी बिना एस्केप किए SELECT (लोड) और DELETE (क्लीनअप) दोनों क्वेरीज़ में प्रवाहित होती है, जिससे अंतर्निहित वेयरहाउस (Snowflake, BigQuery, DuckDB, DeltaLake, …) के विरुद्ध SQL इंजेक्शन होता है।

विश्लेषण

एक ही सहायक फ़ंक्शन, _static_where_clause, पाँच I/O-प्रबंधक पैकेजों में कॉपी-पेस्ट किया गया है। प्रत्येक यह करता है:

def _static_where_clause(table_partition):
    partitions = ", ".join(f"'{partition}'" for partition in table_partition.partitions)
    return f"""{table_partition.partition_expr} in ({partitions})"""

partition एकल उद्धरण चिह्नों में लपेटा गया है और इसमें कोई escaping नहीं है। प्रश्न यह था कि क्या partition कभी हमलावर-नियंत्रित होता है। static partitions के लिए यह डेवलपर-परिभाषित होता है — दिलचस्प नहीं। DynamicPartitionsDefinition के लिए keys Dagster के metadata DB में संग्रहीत होती हैं और runtime पर addDynamicPartition GraphQL mutation के माध्यम से जोड़ी जाती हैं। डिफ़ॉल्ट dagster-webserver deployment में GraphQL अप्रमाणित (unauthenticated) है, इसलिए नेटवर्क पर मौजूद हमलावर end-to-end partition key प्रदान करता है।

मैंने श्रृंखला के दोनों सिरों की पुष्टि की: GraphQL mutation बिना किसी validation के मनमाने key strings स्वीकार करता है, और key context.asset_partition_keys के माध्यम से शब्दशः _static_where_clause तक पहुँचती है।

आक्रमण श्रृंखला

  1. Dagster webserver तक नेटवर्क पहुँच (डिफ़ॉल्ट रूप से कोई auth नहीं)
  2. addDynamicPartition(... partitionKey: "') UNION SELECT username, password_hash FROM secret_table; --")
  3. उस partition को लक्षित करते हुए launchRun(...)
  4. I/O manager SELECT/DELETE ... WHERE col in ('') UNION SELECT ... ; --') बनाता है
  5. SQL injection अंतर्निहित डेटाबेस के विरुद्ध निष्पादित होता है

प्रभावित कोड (समान पैटर्न, 5 स्थान)

PackageFile
dagster-duckdbio_manager.py:340-342
dagster-snowflakesnowflake_io_manager.py:434-436
dagster-gcp (BigQuery)bigquery/io_manager.py:472-474
dagster-deltalakeio_manager.py:265-267
dagster-snowflake-polarssnowflake_polars_type_handler.py:74

load और cleanup दोनों paths इसे उपभोग करते हैं:

query = f"SELECT {col_str} FROM {schema}.{table} WHERE\n" + _partition_where_clause(...)  # read
query = f"DELETE FROM {schema}.{table} WHERE\n"          + _partition_where_clause(...)  # write

मूल कारण

Partition keys को विश्वसनीय डेवलपर स्थिरांक माना जाता था, लेकिन DynamicPartitionsDefinition उन्हें रनटाइम, बाहरी रूप से सेट करने योग्य इनपुट में बदल देता है। f-string इंटरपोलेशन जो स्थिर keys के लिए "सुरक्षित" था, गतिशील keys के लिए इंजेक्शन बन जाता है। ठीक करें: f-strings के बजाय parameterized queries / उचित identifier+literal quoting।

प्रूफ ऑफ कॉन्सेप्ट

poc/poc_partition_sqli.py — सामान्य बनाम दुर्भावनापूर्ण keys के लिए कमजोर _static_where_clause आउटपुट दिखाता है, एक seeded डेटाबेस के विरुद्ध लाइव DuckDB UNION-आधारित exfiltration + DROP TABLE चलाता है, और वे सटीक addDynamicPartition / launchRun GraphQL payloads प्रिंट करता है जो एक हमलावर भेजता है।

pip install duckdb        # minimal; full chain: dagster dagster-duckdb pandas
python3 poc/poc_partition_sqli.py

प्रभाव

डेटा वेयरहाउस के विरुद्ध अनप्रमाणित (डिफ़ॉल्ट कॉन्फ़िग) SQL इंजेक्शन, जिसे Dagster ऑर्केस्ट्रेट करता है — अन्य तालिकाओं का मनमाना पठन और विनाशकारी राइट। Dagster डेटा प्लेटफ़ॉर्म के केंद्र में स्थित है, इसलिए यह स्टैक के सबसे संवेदनशील स्टोर तक पहुँचता है।


GitHub Security Advisory के माध्यम से ज़िम्मेदारीपूर्वक प्रकट किया गया। PoC फ़िक्स के बाद प्रकाशित।

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