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
CVE-2022-22980 — [CVE-2022-22980] SpEL-Expression-Injection in Spring Data MongoDB | Kitploit
Tools/GitHubGitHub/murataydemir/cve-2022-22980
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationLernen & BildungDatenbanksicherheit
GitHubmurataydemir/cve-2022-22980

CVE-2022-22980

[CVE-2022-22980] SpEL-Expression-Injection in Spring Data MongoDB

Repository anzeigen
5111vor 4 JahrenNoch 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-2022-22980] Spring Data MongoDB SpEL-Ausdrucks-Injektion


MongoDB ist eine dokumentenorientierte NoSQL-Datenbank, die skalierbar und flexibel ist und für die Speicherung großer Datenmengen verwendet wird. Anstatt wie bei den traditionellen relationalen Datenbanken Tabellen und Zeilen zu verwenden, nutzt MongoDB Sammlungen (Collections) und Dokumente. Dokumente bestehen aus Schlüssel-Wert-Paaren, die die grundlegende Dateneinheit in MongoDB darstellen.

Spring Data for MongoDB ist Teil des Dachprojekts Spring Data, das ein vertrautes und konsistentes, auf Spring basierendes Programmiermodell für neue Datenspeicher bereitstellen soll, während die speicherspezifischen Funktionen und Fähigkeiten erhalten bleiben. Das Spring Data MongoDB-Projekt bietet die Integration in die MongoDB-Dokumentendatenbank. Zu den wichtigsten funktionalen Bereichen von Spring Data MongoDB gehören ein POJO-zentriertes Modell für die Interaktion mit einer MongoDB-DBCollection und das einfache Erstellen einer Datenzugriffsschicht im Repository-Stil.

Am 20. Juni 2022 veröffentlichte VMware auf seiner offiziellen Website einen Sicherheitshinweis, der sich auf die Schwachstelle der SpEL-Ausdrucks-Injektion (führt zu Remote-Codeausführung) bezieht, die Spring Data MongoDB betrifft. Detaillierte Informationen über die Schwachstelle CVE-2022-22980 finden Sie weiter unten.

Schwachstelle
Eine Spring Data MongoDB-Anwendung ist anfällig für SpEL-Injektion, wenn mit @Query oder @Aggregation annotierte Abfragemethoden mit SpEL-Ausdrücken verwendet werden, die Platzhalter für Abfrageparameter zur Wertbindung enthalten, sofern die Eingabe nicht bereinigt wird. Alternativ sind auch Szenarien anfällig, die Repository-Abfragemethoden ohne zusätzlichen Anwendungscode bereitstellen (wie etwa Spring Data REST).

Insbesondere ist eine Anwendung anfällig, wenn alle der folgenden Punkte zutreffen:

  • eine Repository-Abfragemethode ist mit @Query oder @Aggregation annotiert, die SpEL (Spring Expression Language) verwenden und Eingabeparameter-Referenzen (?0, ?1, …) innerhalb des SpEL-Ausdrucks nutzen
  • der annotierte Abfrage- oder Aggregationswert bzw. die Pipeline enthält SpEL-Teile, die innerhalb des Ausdrucks die Platzhaltersyntax für Parameter verwenden
  • die vom Benutzer bereitgestellte Eingabe wird von der Anwendung nicht bereinigt
  • Spring Data MongoDB 3.4.0, 3.3.0 bis 3.3.4 und ältere Versionen

Eine Anwendung ist nicht anfällig, wenn einer der folgenden Punkte zutrifft:

  • die annotierte Repository-Abfrage- oder Aggregationsmethode enthält keine Ausdrücke
  • die annotierte Repository-Abfrage- oder Aggregationsmethode verwendet innerhalb des Ausdrucks nicht die Platzhaltersyntax für Parameter
  • die vom Benutzer bereitgestellte Eingabe wird von der Anwendung bereinigt
  • das Repository ist so konfiguriert, dass es einen QueryMethodEvaluationContextProvider verwendet, der die SpEL-Nutzung einschränkt

Betroffene Versionen
Spring Data MongoDB 3.4.0, 3.3.0 bis 3.3.4 und ältere Versionen sind von der Schwachstelle CVE-2022-22980 Spring Data MongoDB SpEL Expression Injection betroffen.

Status
Spring Data MongoDB 3.4.1 und 3.3.5, die die Korrekturen enthalten, wurden veröffentlicht.

Abhilfe und empfohlene Umgehungslösungen
Die bevorzugte Maßnahme ist die Aktualisierung auf Spring Data MongoDB 3.4.1 und 3.3.5 oder höher. Wenn Sie dies getan haben, sind keine Umgehungslösungen erforderlich. Einige befinden sich jedoch möglicherweise in einer Situation, in der ein Upgrade nicht schnell durchgeführt werden kann. Aus diesem Grund hat das Spring-Team im Folgenden einige Umgehungslösungen bereitgestellt.

  • Verwendung der Array-Syntax: Wenn die Anwendung dynamische SpEL-Ausdrücke erfordert, die durch Benutzereingaben gesteuert werden, schreiben Sie die Abfrage- oder Aggregationsdeklarationen so um, dass innerhalb des Ausdrucks Parameterreferenzen ([0] anstelle von ?0) verwendet werden
  • Implementieren einer benutzerdefinierten Repository-Methode: Das Ersetzen des SpEL-Ausdrucks durch eine Implementierung einer benutzerdefinierten Repository-Methode ist eine praktikable Umgehungslösung, um Ihre dynamische Abfrage innerhalb des Anwendungscodes zusammenzustellen. Weitere Einzelheiten finden Sie in der Referenzdokumentation zur Repository-Anpassung.
  • Bereinigen Sie Parameter, bevor Sie die Abfragemethode aufrufen

Patch-Analyse: GitHub Issue und zugehörige Commits
Das GitHub Issue zur SpEL-Injektions-Schwachstelle ist unter github.com/spring-projects/spring-data-mongodb/issues/4089 abrufbar.
Mit Hilfe der beiden unten aufgeführten Commits wurde die zugehörige Schwachstelle behoben.

  • 7c5ac764b343d45e5d0abbaba4e82395b471b4c4
  • 5e241c6ea55939c9587fad5058a07d7b3f0ccbd3

Mit diesen Commits wurde die Klasse spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/EvaluationContextExpressionEvaluator.java hinzugefügt.

class EvaluationContextExpressionEvaluator implements SpELExpressionEvaluator {

	ValueProvider valueProvider;
	ExpressionParser expressionParser;
	Supplier<EvaluationContext> evaluationContext;

	public EvaluationContextExpressionEvaluator(ValueProvider valueProvider, ExpressionParser expressionParser,
			Supplier<EvaluationContext> evaluationContext) {

		this.valueProvider = valueProvider;
		this.expressionParser = expressionParser;
		this.evaluationContext = evaluationContext;
	}

	@Nullable
	@Override
	public <T> T evaluate(String expression) {
		return evaluateExpression(expression, Collections.emptyMap());
	}

	public EvaluationContext getEvaluationContext(String expressionString) {
		return evaluationContext != null ? evaluationContext.get() : new StandardEvaluationContext();
	}

	public SpelExpression getParsedExpression(String expressionString) {
		return (SpelExpression) (expressionParser != null ? expressionParser : new SpelExpressionParser())
				.parseExpression(expressionString);
	}

	public <T> T evaluateExpression(String expressionString, Map<String, Object> variables) {

		SpelExpression expression = getParsedExpression(expressionString);
		EvaluationContext ctx = getEvaluationContext(expressionString);
		variables.entrySet().forEach(entry -> ctx.setVariable(entry.getKey(), entry.getValue()));
Tool herunterladen