XXL-JOB ist eine leichtgewichtige verteilte Aufgabenplanungsplattform. Seine zentralen Designziele sind schnelle Entwicklung, einfaches Lernen, geringes Gewicht und einfache Erweiterung. Der Quellcode ist jetzt offen und mit den Online-Produktlinien vieler Unternehmen verbunden und sofort einsatzbereit.
Das Kernproblem dieser Sicherheitslücke ist der GLUE-Modus. XXL-JOB unterstützt Mehrsprachen- und Skriptaufgaben durch den „GLUE-Modus“. Die Aufgabenfunktionen dieses Modus sind wie folgt:
● Mehrsprachenunterstützung: unterstützt Java, Shell, Python, NodeJS, PHP, PowerShell... und andere Arten.
● Web-IDE: Aufgaben werden im Versandzentrum in Quellcodeform verwaltet und Online-Entwicklung und -Wartung werden durch Web-IDE unterstützt.
● Dynamische Validierung: Der vom Benutzer online über die Web-IDE entwickelte Aufgabencode wird remote an den Executor übertragen und in Echtzeit zur Ausführung geladen.
Wie im Bild oben gezeigt, kann es zu Remote-Angriffen kommen, wenn Angriffscode im GLUE-Modus-Aufgabencode geschrieben und zur Ausführung an den Executor weitergeleitet wird.
【Schwachstellenbeschreibung】
Die Restful API-Schnittstelle oder RPC-Schnittstelle von XXL-JOB ist nicht mit Authentifizierungsmaßnahmen konfiguriert. Unbefugte Angreifer können bösartige Anfragen erstellen und die Remoteausführung von Befehlen verursachen.
【Schwachstellenbewertung】
Hohes Risiko „Betroffene Version“: ”->„Executor-Projekt“ konfigurieren und bereitstellen->Bereitstellung abschließen
Lokale Entwicklungsumgebung: Java8+Maven3.61. Github-Download-Quellcode
Adresse: https://github.com/xuxueli/xxl -job/releases/tag/v2.2.0
2. Maven lädt die erforderlichen Abhängigkeiten herunter
Idea öffnet den dekomprimierten Quellcode und installiert automatisch die relevanten Abhängigkeiten im POM, die auch im Terminal verwendet werden können Der Maven-Befehl lädt die erforderlichen Abhängigkeiten herunter3. Datenbankkonfiguration
Der Speicherort des SQL-Skripts für die Planung der Datenbankinitialisierung lautet:
/xxl-job/doc/db/tables_xxl_job.sql
Da MySQL nicht lokal installiert ist Verwenden Sie daher zur Installation Docker.a) docker pull mysql:5.7
b) sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7Auf diese Weise starten wir den MySQL-Container, das Konto ist root , das Passwort ist root. Verwenden Sie Navicat, um eine Verbindung zur Datenbank für 123456 herzustellen. Sie können auf die untere linke Ecke klicken, um die Testverbindung abzuschließen. Klicken Sie mit der rechten Maustaste auf die importierte Datenbank, wählen Sie „SQL-Datei ausführen“ und klicken Sie auf „Start“, um den Datenbankimport abzuschließen. 4. Konfigurieren und implementieren Sie das „Scheduling Center“Scheduling Center-Projekt: xxl-job-admin
Funktion: Vereinheitlichen Sie die Verwaltung von Planungsaufgaben auf der Aufgabenplanungsplattform und übernehmen Sie die Verantwortung für die Auslösung der Planungsausführung und stellen eine Aufgabenverwaltungsplattform bereit. Sie können die Datenbankkonfiguration in application.properties entsprechend der tatsächlichen Situation ändern.
Führen Sie job.executor.logpath Parameter: Wir können den Pfad erstellen oder ändern, um Probleme bei der Programmausführung zu verhindern. Der Datenpfad ist im neuen Mac-System nicht vorhanden. Es wurde festgestellt, dass die Verwendung von mkdir zum Erstellen des Pfads fehlgeschlagen ist. Dies liegt daran, dass Sip im Mac-System deaktiviert ist. Führen Sie XxlJobExecutorApplication aus, um den Executor zu starten. Öffnen Sie //localhost:8080/ im Browser und sehen Sie sich die Anmeldeschnittstelle an. Das Standard-Anmeldekonto ist „admin/123456“. Hinweis:Es wird empfohlen, /data/ zu erstellen. applogs/xxl-job zuerst, Programm Dieser Pfad wird in vielen Konfigurationsdateien verwendet
Ändern Sie die Konfiguration der Dispatch-Center-DatenbankLinux/Unix kann lsof verwenden, um die Portbelegung zu überprüfen, um Startfehler zu verhindernDas Dispatch-Center und der Executor können entsprechend der tatsächlichen Situation separat bereitgestellt werden
Sehen Sie sich die offizielle Dokumentation an und Sie können die Beschreibung der Trigger-Task-Schnittstelle in der Executor-RESTful-API sehen.
Die Die Aufgabenausführungsmodi sind wie folgt:
Sehen Sie sich den GulueTypeEnum-Quellcode an
Also verwenden wir Burpsuite, um unseren POC zu erstellen
Tipps:
Wenn Sie bei der Änderung von GlueSource die Ausführung nicht wirksam werden, ändern Sie bitte die Job-ID
Beim Neustart des Projekts wird festgestellt, dass die Port-Start-Ausnahme vorliegt. Bitte schließen Sie BurpSuite.
Da die offizielle Version von XXL-JOB über native Authentifizierungskomponenten verfügt, kann beim Einschalten die Sicherheit der zugrunde liegenden Kommunikation des Systems gewährleistet werden . Der Autor von XXL-JOB gab an, dass unter normalen Umständen die zugrunde liegende Kommunikation zwischen dem Versandzentrum und dem Ausführenden sicher ist und keine Sicherheitslücke bei Remote-Befehlen besteht. Wenn das Zugriffstoken jedoch nicht auf dem Executor aktiviert ist, können illegale Planungsanforderungen nicht identifiziert und abgefangen werden. Böswillige Anforderer können den GLUE-Modus verwenden, um böswilligen Angriffscode zu pushen, um Remoteangriffe durchzuführen. Daher glaubt der Autor von XXL-JOB, dass es sich bei diesem Problem nicht um eine „Sicherheitslücke“ handelt. Die offizielle Website-Version bietet eine Authentifizierungskomponente, die zum Schutz aktiviert werden kann.
1. Aktivieren Sie die mit XXL-JOB gelieferte Authentifizierungskomponente: Suchen Sie in der offiziellen Dokumentation nach „xxl.job.accessToken“ und aktivieren Sie sie gemäß den Dokumentationsanweisungen.
2. Portzugriffsbeschränkungen: Durch die Konfiguration von Sicherheitsgruppenbeschränkungen können nur bestimmte IPs auf die Ports zugreifen
Das obige ist der detaillierte Inhalt vonSo reproduzieren Sie die RCE-Schwachstelle des unbefugten Zugriffs auf die XXL-JOB-API-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!