Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-41490 — Detailed CVE-2026-41490 disclosure with PoC demonstrating unauthenticated SQL injection in Dagster database I/O managers via dynamic partition keys, affecting DuckDB, Snowflake, BigQuery, and DeltaLake integrations. | Kitploit
Tools/GitHubGitHub/romain-deperne/cve-2026-41490
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationDatabase Security
GitHubromain-deperne/cve-2026-41490

CVE-2026-41490

Detailed CVE-2026-41490 disclosure with PoC demonstrating unauthenticated SQL injection in Dagster database I/O managers via dynamic partition keys, affecting DuckDB, Snowflake, BigQuery, and DeltaLake integrations.

Repository anzeigen
1vor 2 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-41490 — SQL-Injection in Dagster-Datenbank-I/O-Managern über dynamische Partitionsschlüssel

Schweregrad: Hoch (CVSS 8.x — AV:N/AC:L/PR:L/UI:N + C:H/I:H/A:H) CWE: CWE-89 — SQL-Injection Betroffen: dagster Datenbank-I/O-Manager-Integrationen — dagster-duckdb, dagster-snowflake, dagster-gcp (BigQuery), dagster-deltalake, dagster-snowflake-polars (≤ 1.12.20) Sicherheitshinweis: GHSA-mjw2-v2hm-wj34 NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-41490 Credit: Romain Deperne

TL;DR

Jeder Dagster-Datenbank-I/O-Manager erstellt seine WHERE-Klausel durch f-String-Interpolation von Partitionsschlüsselwerten direkt in SQL. Wenn ein Asset DynamicPartitionsDefinition verwendet, können Partitionsschlüssel zur Laufzeit über die GraphQL-API (addDynamicPartition) gesetzt werden – die in der Standard-Webserver-Bereitstellung nicht authentifiziert ist. Ein bösartiger Partitionsschlüssel gelangt unescaped in sowohl SELECT- (Laden) als auch DELETE- (Bereinigen) Abfragen, was zu einer SQL-Injection gegen das zugrundeliegende Data Warehouse (Snowflake, BigQuery, DuckDB, DeltaLake, …) führt.

Wie ich das gefunden habe

Der gleiche Helfer, _static_where_clause, wird über fünf I/O-Manager-Pakete kopiert. Jeder tut:

root@kitploit:~
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 wird in einfache Anführungszeichen gesetzt, ohne Escape. Die Frage war, ob partition jemals angreifergesteuert ist. Bei statischen Partitionen ist es vom Entwickler definiert – nicht interessant. Bei DynamicPartitionsDefinition werden die Schlüssel in Dagsters Metadaten-DB gespeichert und zur Laufzeit über die addDynamicPartition GraphQL-Mutation hinzugefügt. In der Standard-dagster-webserver-Bereitstellung ist GraphQL nicht authentifiziert, sodass ein Angreifer im Netzwerk den Partitionsschlüssel durchgängig bereitstellt.

Ich habe beide Enden der Kette bestätigt: Die GraphQL-Mutation akzeptiert beliebige Schlüsselstrings ohne Validierung, und der Schlüssel erreicht _static_where_clause unverändert über context.asset_partition_keys.

Angriffskette

  1. Netzwerkzugriff auf den Dagster-Webserver (standardmäßig keine Authentifizierung)
  2. addDynamicPartition(... partitionKey: "') UNION SELECT username, password_hash FROM secret_table; --")
  3. launchRun(...) targeting that partition
  4. The I/O manager builds SELECT/DELETE ... WHERE col in ('') UNION SELECT ... ; --')
  5. SQL-Injection wird gegen die zugrundeliegende Datenbank ausgeführt.

Betroffener Code (identisches Muster, 5 Stellen)

PaketDatei
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

Sowohl der Lade- als auch der Bereinigungspfad verwenden es:

root@kitploit:~
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

Ursache

Partitionsschlüssel wurden als vertrauenswürdige Entwicklerkonstanten behandelt, aber DynamicPartitionsDefinition verwandelt sie in Laufzeit-, extern setzbare Eingaben. Die f-String-Interpolation, die für statische Schlüssel "sicher" war, wird für dynamische zu einer Injection. Fix: Parametrisierte Abfragen / korrektes Identifier+Literal-Encoding anstelle von f-Strings.

Proof of Concept

poc/poc_partition_sqli.py – zeigt die anfällige Ausgabe von _static_where_clause für gutartige vs. bösartige Schlüssel, führt eine Live-DuckDB UNION-basierte Exfiltration + DROP TABLE gegen eine mit Seed-Daten gefüllte Datenbank aus und gibt die genauen addDynamicPartition / launchRun GraphQL-Payloads aus, die ein Angreifer sendet.

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

Auswirkung

Nicht authentifizierte (Standardkonfiguration) SQL-Injection gegen das Data Warehouse, das Dagster orchestriert – beliebiges Lesen anderer Tabellen und destruktive Schreibzugriffe. Dagster steht im Zentrum von Datenplattformen, daher erreicht dies den sensibelsten Speicher im Stack.


Verantwortungsvoll über GitHub Security Advisory offengelegt. PoC nach dem Fix veröffentlicht.

Tool herunterladen