
Exploit für Apache NiFi CVE-2023-34468, Angriff auf eine Sicherheitslücke in den Versionen 1.21.0 und früher, um Datenzugriff und Systemkompromittierung zu demonstrieren.
Apache NiFi ist ein benutzerfreundliches, leistungsstarkes und zuverlässiges System zur Verarbeitung und Verteilung von Daten.
Apache NiFi wurde für Datenflüsse entwickelt. Es unterstützt hochgradig konfigurierbare gerichtete Graphen für Datenrouting, -transformation und Systemvermittlungslogik. Zu den wichtigsten Funktionen gehören:
Lesen Sie den Schnellstart-Leitfaden für die Entwicklung. Er enthält Informationen zum Erhalten einer lokalen Kopie des Quellcodes, Hinweise zum Issue-Tracking und Warnungen zu häufigen Problemen in Entwicklungsumgebungen.
Für einen umfassenderen Leitfaden zur Entwicklung und Informationen zur Mitarbeit am Projekt lesen Sie den NiFi Developer's Guide.
Führen Sie mvn clean install oder für parallele Builds mvn -T 2.0C clean install aus.
Der parallele Build sollte auf moderner Hardware etwa fünfzehn Minuten dauern.
laptop:nifi myuser$ mvn -T 2.0C clean install
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 115 modules...
...tens of thousands of lines elided...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 09:24 min (Wall Clock)
[INFO] Finished at: 2015-04-30T00:30:36-05:00
[INFO] Final Memory: 173M/1359M
[INFO] ------------------------------------------------------------------------
Führen Sie mvn clean install -DskipTests aus, um die Ausführung der Komponententests zu überspringen.
Wechseln Sie in das Verzeichnis nifi-assembly. Das Verzeichnis target enthält die Binärarchive.
laptop:nifi myuser$ cd nifi-assembly
laptop:nifi-assembly myuser$ ls -lhd target/nifi*
drwxr-xr-x 3 myuser mygroup 102B Apr 30 00:29 target/nifi-1.0.0-SNAPSHOT-bin
-rw-r--r-- 1 myuser mygroup 144M Apr 30 00:30 target/nifi-1.0.0-SNAPSHOT-bin.tar.gz
-rw-r--r-- 1 myuser mygroup 144M Apr 30 00:30 target/nifi-1.0.0-SNAPSHOT-bin.zip
Kopieren Sie die Datei nifi-VERSION-bin.tar.gz oder nifi-VERSION-bin.zip in ein separates Bereitstellungsverzeichnis. Das Entpacken der Distribution erstellt ein neues Verzeichnis, das nach der Version benannt ist.
laptop:nifi-assembly myuser$ mkdir ~/example-nifi-deploy
laptop:nifi-assembly myuser$ tar xzf target/nifi-*-bin.tar.gz -C ~/example-nifi-deploy
laptop:nifi-assembly myuser$ ls -lh ~/example-nifi-deploy/
total 0
drwxr-xr-x 10 myuser mygroup 340B Apr 30 01:06 nifi-1.0.0-SNAPSHOT
Wechseln Sie in das Bereitstellungsverzeichnis und führen Sie den folgenden Befehl aus, um NiFi zu starten.
laptop:~ myuser$ cd ~/example-nifi-deploy/nifi-*
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh start
Die Ausführung von bin/nifi.sh start startet NiFi im Hintergrund und beendet sich. Verwenden Sie --wait-for-init mit einem optionalen Timeout in Sekunden, um auf einen vollständigen Start zu warten, bevor die Ausführung beendet wird.
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh start --wait-for-init 120
Die Standardkonfiguration generiert beim Start einen zufälligen Benutzernamen und ein zufälliges Passwort. NiFi schreibt die generierten Anmeldedaten in das Anwendungsprotokoll unter logs/nifi-app.log im NiFi-Installationsverzeichnis.
Der folgende Befehl kann verwendet werden, um die generierten Anmeldedaten auf Betriebssystemen mit installiertem grep zu finden:
laptop:nifi-1.0.0-SNAPSHOT myuser$ grep Generated logs/nifi-app*log
NiFi protokolliert die generierten Anmeldedaten wie folgt:
Generated Username [USERNAME]
Generated Password [PASSWORD]
Der USERNAME ist eine zufällige UUID aus 36 Zeichen. Das PASSWORD ist eine zufällige Zeichenfolge aus 32 Zeichen. Die generierten Anmeldedaten werden in conf/login-identity-providers.xml gespeichert, wobei das Passwort mit bcrypt gehasht wird. Notieren Sie diese Anmeldedaten an einem sicheren Ort für den Zugriff auf NiFi.
Der zufällige Benutzername und das Passwort können mit dem folgenden Befehl durch benutzerdefinierte Anmeldedaten ersetzt werden:
./bin/nifi.sh set-single-user-credentials <username> <password>
Öffnen Sie den folgenden Link in einem Webbrowser, um auf NiFi zuzugreifen: https://localhost:8443/nifi
Der Webbrowser zeigt eine Warnmeldung an, die auf ein potenzielles Sicherheitsrisiko aufgrund des selbstsignierten Zertifikats hinweist, das NiFi während der Initialisierung generiert hat. Das Akzeptieren des potenziellen Sicherheitsrisikos und das Fortsetzen des Ladens der Oberfläche ist eine Option für anfängliche Entwicklungsinstallationen. Produktionsumgebungen sollten ein Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle bereitstellen und die NiFi-Keystore- und Truststore-Konfiguration aktualisieren.
Nach dem Akzeptieren des selbstsignierten Zertifikats wird der Anmeldebildschirm angezeigt.

Geben Sie mit den generierten Anmeldedaten den generierten Benutzernamen in das Feld User und das generierte Passwort in das Feld Password ein und wählen Sie LOG IN, um auf das System zuzugreifen.

Der NiFi User Guide beschreibt, wie ein Datenfluss erstellt wird.
Führen Sie den folgenden Befehl aus, um NiFi zu stoppen:
laptop:~ myuser$ cd ~/example-nifi-deploy/nifi-*
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh stop
MiNiFi ist ein Tochterprojekt von Apache NiFi. Es handelt sich um einen ergänzenden Ansatz zur Datenerfassung, der die Kernprinzipien von NiFi im Datenflussmanagement ergänzt und sich auf die Erfassung von Daten an der Quelle ihrer Entstehung konzentriert.
Die spezifischen Ziele von MiNiFi sind:
Die Rolle von MiNiFi sollte aus der Perspektive des Agents betrachtet werden, der unmittelbar an oder direkt neben den Quellsensoren, -systemen oder -servern agiert.
So führen Sie MiNiFi aus:
Wechseln Sie in das Verzeichnis minifi-assembly. Im Verzeichnis target sollte ein Build von MiNiFi vorhanden sein.
$ cd minifi-assembly
$ ls -lhd target/minifi*
drwxr-xr-x 3 user staff 102B Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin
-rw-r--r-- 1 user staff 39M Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin.tar.gz
-rw-r--r-- 1 user staff 39M Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin.zip
Für Tests der laufenden Entwicklung können Sie den bereits entpackten Build im Verzeichnis namens minifi-*version*-bin verwenden, wobei version die aktuelle Projektversion ist. Um in einem anderen Verzeichnis bereitzustellen, verwenden Sie entweder das Tarball oder die Zip-Datei und entpacken Sie sie an einem beliebigen Ort. Die Distribution befindet sich in einem gemeinsamen übergeordneten Verzeichnis, das nach der Version benannt ist.
$ mkdir ~/example-minifi-deploy
$ tar xzf target/minifi-*-bin.tar.gz -C ~/example-minifi-deploy
$ ls -lh ~/example-minifi-deploy/
total 0
drwxr-xr-x 10 user staff 340B Jul 6 01:06 minifi-1.14.0-SNAPSHOT
So führen Sie MiNiFi aus:
Wechseln Sie in das Verzeichnis, in dem Sie MiNiFi installiert haben, und führen Sie es aus.
$ cd ~/example-minifi-deploy/minifi-*
$ ./bin/minifi.sh start
Zeigen Sie die Protokolle im Ordner logs an.
$ tail -F ~/example-minifi-deploy/logs/minifi-app.log
Hilfe zum Erstellen Ihres ersten Datenflusses und zum Senden von Daten an eine NiFi-Instanz finden Sie im System Admin Guide im Ordner docs oder durch die Verwendung des minifi-toolkit, das bei der Anpassung von NiFi-Vorlagen an das MiNiFi-YAML-Konfigurationsdateiformat hilft.
Wenn Sie die laufende Entwicklung testen, möchten Sie wahrscheinlich Ihre Instanz stoppen.
$ cd ~/example-minifi-deploy/minifi-*
$ ./bin/minifi.sh stop
So bauen Sie:
minifi/ den Befehl mvn -P docker clean install aus. Dadurch wird der vollständige Build ausgeführt, ein Docker-Image basierend darauf erstellt und Docker-Compose-Integrationstests ausgeführt. Nach erfolgreichem Abschluss sollten Sie ein Image apacheminifi:${minifi.version} haben, das mit dem folgenden Befehl gestartet werden kann (ersetzen Sie ${minifi.version} durch die aktuelle Maven-Version Ihres Branches):docker run -d -v YOUR_CONFIG.YML:/opt/minifi/minifi-${minifi.version}/conf/config.yml apacheminifi:${minifi.version}
Registry – ein Unterprojekt von Apache NiFi – ist eine ergänzende Anwendung, die einen zentralen Ort für die Speicherung und Verwaltung gemeinsam genutzter Ressourcen über eine oder mehrere Instanzen von NiFi und/oder MiNiFi hinweg bietet.
oder
Bauen Sie nur das Registry-Unterprojekt:
cd nifi/nifi-registry
mvn clean install
Wenn Sie die Stil- und Lizenzprüfungen aktivieren möchten, geben Sie das contrib-check-Profil an:
mvn clean install -Pcontrib-check
2) Starten Sie Registry
cd nifi-registry/nifi-registry-assembly/target/nifi-registry-<VERSION>-bin/nifi-registry-<VERSION>/
./bin/nifi-registry.sh start
Beachten Sie, dass das Laden des Anwendungs-Webservers einige Zeit in Anspruch nehmen kann, bevor er erreichbar ist.
Mit den Standardeinstellungen ist die Anwendungs-UI unter http://localhost:18080/nifi-registry verfügbar.
Wenn Sie die REST-API der Anwendung testen möchten, können Sie direkt darauf zugreifen. Mit den Standardeinstellungen lautet die Basis-URL der REST-API http://localhost:18080/nifi-registry-api. Eine UI zum Testen der REST-API ist unter http://localhost:18080/nifi-registry-api/swagger/ui.html verfügbar.
Die Protokolle sind unter logs/nifi-registry-app.log verfügbar.
Um sicherzustellen, dass NiFi Registry mit verschiedenen relationalen Datenbanken korrekt funktioniert, können die vorhandenen Integrationstests mithilfe des Testcontainers-Frameworks gegen verschiedene Datenbanken ausgeführt werden.
Spring-Profile werden verwendet, um die DataSource-Factory zu steuern, die dem Spring-Anwendungskontext zur Verfügung gestellt wird. Es werden DataSource-Factories bereitgestellt, die das Testcontainers-Framework verwenden, um einen Docker-Container für eine bestimmte Datenbank zu starten und eine entsprechende DataSource zu erstellen. Wenn kein Profil angegeben ist, wird standardmäßig eine H2-DataSource verwendet, und es sind keine Docker-Container erforderlich.
Vorausgesetzt, Docker läuft auf dem System, auf dem der Build ausgeführt wird, können die folgenden Befehle ausgeführt werden:
| Ziel-Datenbank | Build-Befehl |
|---|---|
| Alle unterstützten | mvn verify -Ptest-all-dbs |
| H2 (Standard) | mvn verify |
| MariaDB 10.3 | mvn verify -Pcontrib-check -Dspring.profiles.active=mariadb-10-3 |
| MySQL 8 | mvn verify -Pcontrib-check -Dspring.profiles.active=mysql-8 |
| PostgreSQL 10 | mvn verify -Dspring.profiles.active=postgres-10 |
Eine vollständige Liste der verfügbaren DataSource-Factories finden Sie im Modul nifi-registry-test.
Wenn Sie Fragen haben, können Sie sich an unsere Mailingliste wenden: [email protected] (Archiv). Für interaktivere Diskussionen sind Community-Mitglieder oft an folgenden Orten zu finden:
Apache NiFi Slack Workspace: https://apachenifi.slack.com/
Neue Benutzer können dem Workspace über den folgenden Einladungslink beitreten.
Um eine Funktionsanfrage oder einen Fehlerbericht einzureichen, erstellen Sie bitte ein Jira unter https://issues.apache.org/jira/projects/NIFI/issues. Wenn es sich um einen Sicherheits-Schwachstellenbericht handelt, senden Sie bitte eine E-Mail direkt an [email protected] und lesen Sie zuerst die Apache NiFi Security Vulnerability Disclosure und die Apache Software Foundation Security Prozesse.
Siehe https://nifi.apache.org/ für die aktuellste NiFi-Dokumentation.
Siehe https://nifi.apache.org/minifi und https://cwiki.apache.org/confluence/display/MINIFI für die aktuellste MiNiFi-spezifische Dokumentation.
Siehe https://nifi.apache.org/registry für die aktuellste Registry-spezifische Dokumentation.
Sofern nicht anders angegeben, ist diese Software unter der Apache License, Version 2.0 lizenziert.
Lizenziert unter der Apache License, Version 2.0 (der "Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Sie erhalten eine Kopie der Lizenz unter
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die Software unter der Lizenz "AS IS" (OHNE GEWÄHRLEISTUNG) verteilt, OHNE GEWÄHRLEISTUNG ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend. Weitere Einzelheiten zur Lizenz finden Sie in der Lizenz.
Diese Distribution enthält kryptografische Software. Das Land, in dem Sie sich derzeit befinden, kann Beschränkungen für die Einfuhr, den Besitz, die Verwendung und/oder die Wiederausfuhr von Verschlüsselungssoftware in ein anderes Land haben. BEVOR Sie Verschlüsselungssoftware verwenden, überprüfen Sie bitte die Gesetze, Vorschriften und Richtlinien Ihres Landes bezüglich der Einfuhr, des Besitzes, der Verwendung und der Wiederausfuhr von Verschlüsselungssoftware, um festzustellen, ob dies erlaubt ist. Weitere Informationen finden Sie unter https://www.wassenaar.org/.
Das U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), hat diese Software als Export Commodity Control Number (ECCN) 5D002.C.1 eingestuft, zu der auch Informationssicherheitssoftware gehört, die kryptografische Funktionen mit asymmetrischen Algorithmen verwendet oder ausführt. Die Form und Art dieser Apache Software Foundation Distribution macht sie für den Export unter der Ausnahmeregelung License Exception ENC Technology Software Unrestricted (TSU) (siehe BIS Export Administration Regulations, Abschnitt 740.13) sowohl für Objektcode als auch für Quellcode qualifiziert.
Im Folgenden finden Sie weitere Details zur enthaltenen kryptografischen Software:
Apache NiFi verwendet BouncyCastle, JCraft Inc. und die integrierten Java-Kryptografiebibliotheken für SSL, SSH und den Schutz sensibler Konfigurationsparameter. Siehe
für weitere Details zu den Kryptografiefunktionen dieser Bibliotheken.