Zum Inhalt springen

Erweiterungen absichern

DuckDB hat einen leistungsfähigen Erweiterungsmechanismus, der dieselben Rechte hat wie der Benutzer, der DuckDBs (Eltern-)Prozess ausführt. Das hat sicherheitsrelevante Folgen. Wir empfehlen daher, die auf dieser Seite aufgeführten Konfigurationsoptionen zu prüfen und sie an Ihre Angriffsmodelle anzupassen.

DuckDB-Signaturprüfungen

DuckDB-Erweiterungen werden bei jedem Laden anhand der Signatur der Binärdateien geprüft. Es gibt derzeit drei Kategorien von Erweiterungen:

  • Signiert mit einem core-Schlüssel. Nur Erweiterungen, die vom DuckDB-Kernteam geprüft wurden, sind mit diesen Schlüsseln signiert.
  • Signiert mit einem community-Schlüssel. Das sind Open-Source-Erweiterungen, die über das DuckDB-Community-Extensions-Repository verteilt werden.
  • Unsigniert.

Überblick der Sicherheitsstufen für Erweiterungen

DuckDB bietet die folgenden Sicherheitsstufen für Erweiterungen.

Nutzbare Erweiterungen Beschreibung Konfiguration
core Erweiterungen können nur geladen werden, wenn sie mit einem core-Schlüssel signiert sind. SET allow_community_extensions = false
core und community Erweiterungen können nur geladen werden, wenn sie mit einem core- oder community-Schlüssel signiert sind. Das ist die Standardsicherheitsstufe.
Beliebige Erweiterungen einschließlich unsignierter Beliebige Erweiterungen können geladen werden. SET allow_unsigned_extensions = true

Sicherheitsrelevante Konfigurationseinstellungen sperren sich selbst, d. h. im aktuellen Prozess lassen sich Fähigkeiten nur einschränken.

Der Versuch der folgenden Konfigurationsänderungen führt beispielsweise zu einem Fehler:

SET allow_community_extensions = false;
SET allow_community_extensions = true;
Terminal window
Invalid Input Error:
Cannot upgrade allow_community_extensions setting while database is running

Community-Erweiterungen

DuckDB hat ein Community-Extensions-Repository, das die bequeme Installation von Drittanbieter-Erweiterungen ermöglicht. Community-Erweiterungs-Repositories wie pip oder npm ermöglichen per Design im Wesentlichen Remote Code Execution. Das klingt dramatischer, als es ist. Im Guten wie im Schlechten sind wir daran gewöhnt, beliebige Skripte aus dem Web in unsere Shells zu pipen, und installieren routinemäßig eine erstaunliche Menge transitiver Abhängigkeiten, ohne zweimal nachzudenken. Manche Repositories wie CRAN verlangen irgendwann eine menschliche Prüfung, aber das ist auch keine Garantie.

Wir haben mehrere Ansätze für Community-Erweiterungs-Repositories untersucht und uns für das entschieden, was wir für sinnvoll halten: Wir versuchen nicht, die Einreichungen zu reviewen, verlangen aber, dass der Quellcode der Erweiterungen verfügbar ist. Den vollständigen Build-, Signatur- und Verteilungsprozess übernehmen wir. Das ist ein Schritt über pip und npm hinaus, die das Hochladen beliebiger Binärdateien erlauben, aber ein Schritt unterhalb einer vollständigen manuellen Prüfung. Benutzer können bösartige Erweiterungen melden, und wir zeigen Nutzungsstatistiken wie GitHub-Sterne und Downloadzahlen. Weil wir das Repository verwalten, können wir problematische Erweiterungen schnell aus der Verteilung nehmen.

Trotzdem führt das Installieren und Laden von DuckDB-Erweiterungen aus dem Community-Extensions-Repository Code aus, der von Drittentwicklern geschrieben wurde, und kann daher gefährlich sein. Ein bösartiger Entwickler könnte eine harmlos wirkende DuckDB-Erweiterung erstellen und registrieren, die Ihre Kryptowährung stiehlt. Wenn Sie einen Webdienst betreiben, der nicht vertrauenswürdiges SQL von Benutzern mit DuckDB ausführt, empfehlen wir, Community-Erweiterungen zu deaktivieren. Dazu führen Sie aus:

SET allow_community_extensions = false;

Automatisches Installieren und Laden bekannter Erweiterungen deaktivieren

Standardmäßig installiert und lädt DuckDB bekannte Erweiterungen automatisch. Um das automatische Installieren bekannter Erweiterungen zu deaktivieren, führen Sie aus:

SET autoinstall_known_extensions = false;

Um das automatische Laden bekannter Erweiterungen zu deaktivieren, führen Sie aus:

SET autoload_known_extensions = false;

Um diese Konfiguration zu sperren, nutzen Sie die Option lock_configuration:

SET lock_configuration = true;

Immer signierte Erweiterungen verlangen

Standardmäßig verlangt DuckDB, dass Erweiterungen entweder als Kern-Erweiterungen (vom DuckDB-Team erstellt) oder als Community-Erweiterungen (von Drittentwicklern erstellt, aber vom DuckDB-Team verteilt) signiert sind. Die Einstellung allow_unsigned_extensions kann beim Start aktiviert werden, um das Laden unsignierter Erweiterungen zu erlauben. Diese Einstellung ist nützlich für die Erweiterungsentwicklung; wenn sie aktiviert ist, kann DuckDB beliebige Erweiterungen laden, sodass besonders darauf geachtet werden muss, dass keine bösartigen Erweiterungen geladen werden.