Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2022-22980 — [CVE-2022-22980] Injection d'expression SpEL Spring Data MongoDB | Kitploit
Outils/GitHubGitHub/murataydemir/cve-2022-22980
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebApprentissage et ÉducationSécurité des Bases de Données
GitHubmurataydemir/cve-2022-22980

CVE-2022-22980

[CVE-2022-22980] Injection d'expression SpEL Spring Data MongoDB

Voir le dépôt
517il y a 4 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

[CVE-2022-22980] Injection d'expression SpEL dans Spring Data MongoDB


MongoDB est une base de données NoSQL orientée documents, scalable et flexible, utilisée pour le stockage de données à volume élevé. Au lieu d'utiliser des tables et des lignes comme dans les bases de données relationnelles traditionnelles, MongoDB utilise des collections et des documents. Les documents sont constitués de paires clé-valeur, qui sont l'unité de base des données dans MongoDB.

Spring Data for MongoDB fait partie du projet parapluie Spring Data, qui vise à fournir un modèle de programmation familier et cohérent basé sur Spring pour les nouveaux magasins de données tout en conservant les fonctionnalités et capacités spécifiques au magasin. Le projet Spring Data MongoDB fournit une intégration avec la base de données documentaire MongoDB. Les principaux domaines fonctionnels de Spring Data MongoDB sont un modèle centré sur les POJO pour interagir avec une DBCollection MongoDB et écrire facilement une couche d'accès aux données de type Repository.

Le 20 juin 2022, VMware a publié un avis de sécurité sur son site officiel concernant une vulnérabilité d'injection d'expression SpEL (menant à une exécution de code à distance) affectant Spring Data MongoDB. Vous trouverez des informations détaillées sur la vulnérabilité CVE-2022-22980 ci-dessous.

Vulnérabilité
Une application Spring Data MongoDB est vulnérable à l'injection SpEL lorsqu'elle utilise des méthodes de requête annotées avec @Query ou @Aggregation avec des expressions SpEL contenant des espaces réservés de paramètres de requête pour la liaison de valeurs si l'entrée n'est pas assainie. De plus, les configurations qui exposent des méthodes de requête de référentiel sans impliquer de code applicatif supplémentaire (comme Spring Data REST) sont également vulnérables.

Plus précisément, une application est vulnérable lorsque toutes les conditions suivantes sont réunies :

  • une méthode de requête de référentiel est annotée avec @Query ou @Aggregation qui utilisent SpEL (Spring Expression Language) et utilisent des références de paramètres d'entrée (?0, ?1, …) dans l'expression SpEL
  • la requête ou l'agrégation/pipeline annoté contient des parties SpEL utilisant la syntaxe d'espace réservé de paramètre dans l'expression
  • l'entrée fournie par l'utilisateur n'est pas assainie par l'application
  • Spring Data MongoDB 3.4.0, 3.3.0 à 3.3.4, et les versions antérieures

Une application n'est pas vulnérable si l'une des conditions suivantes est vraie :

  • la méthode de requête ou d'agrégation annotée ne contient pas d'expressions
  • la méthode de requête ou d'agrégation annotée n'utilise pas la syntaxe d'espace réservé de paramètre dans l'expression
  • l'entrée fournie par l'utilisateur est assainie par l'application
  • le référentiel est configuré pour utiliser un QueryMethodEvaluationContextProvider qui limite l'utilisation de SpEL

Versions affectées
Spring Data MongoDB 3.4.0, 3.3.0 à 3.3.4, et les versions antérieures sont affectées par la vulnérabilité CVE-2022-22980 Spring Data MongoDB SpEL Expression Injection.

Statut
Spring Data MongoDB 3.4.1 et 3.3.5, qui contiennent les correctifs, ont été publiés.

Atténuation et solutions de contournement suggérées
La réponse préférée est de mettre à jour vers Spring Data MongoDB 3.4.1 et 3.3.5 ou une version ultérieure. Si vous avez fait cela, aucune solution de contournement n'est nécessaire. Cependant, certains peuvent être dans une position où la mise à niveau est impossible à faire rapidement. Pour cette raison, l'équipe Spring a fourni quelques solutions de contournement ci-dessous.

  • Utiliser la syntaxe de tableau : si l'application nécessite des expressions SpEL dynamiques contrôlées par l'entrée utilisateur, alors réécrivez les déclarations de requête ou d'agrégation pour utiliser des références de paramètres ([0] au lieu de ?0) dans l'expression.
  • Implémenter une méthode de référentiel personnalisée : Remplacer l'expression SpEL par une implémentation de méthode de référentiel personnalisée est une solution de contournement viable pour assembler votre requête dynamique dans le code de l'application. Référez-vous à la documentation de référence sur la personnalisation du référentiel pour plus de détails.
  • Assainissez les paramètres avant d'appeler la méthode de requête.

Analyse du correctif : Problème GitHub et commits associés
Le problème GitHub pour la vulnérabilité d'injection SpEL est accessible depuis github.com/spring-projects/spring-data-mongodb/issues/4089.
Grâce aux deux commits ci-dessous, la vulnérabilité associée a été corrigée.

  • 7c5ac764b343d45e5d0abbaba4e82395b471b4c4
  • 5e241c6ea55939c9587fad5058a07d7b3f0ccbd3

Avec ces commits, la classe spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/EvaluationContextExpressionEvaluator.java a été ajoutée.

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()));
Télécharger l’outil