
仔细研究 MVCrequestMatcher Spring 漏洞
Le 20 mars 2023, Spring Security Advisories a publié un billet de blog faisant référence à une vulnérabilité découverte en interne, CVE-2023-20860. Aucune information détaillée n'a été divulguée, si ce n'est qu'il s'agissait d'un problème de contrôle d'accès concernant l'utilisation de mvcMatchers. Les développeurs de Spring ont remédié au problème et une mise à jour de la version est conseillée.
Souhaitez-vous vivre une expérience de première main ? Essayez la mission ici.
La sécurité étant notre principale préoccupation chez Secure Code Warriornous avons décidé de nous pencher sur la vulnérabilité de mvcRequestMatchers et de comprendre où se situe le problème.
Spring fournit l'interface RequestMatcher pour déterminer si une requête correspond à un modèle de chemin. Jetez un coup d'œil à l'extrait de code ci-dessous dans lequel la méthode d'aide mvcMatchers est utilisée pour enregistrer les points de terminaison avec leurs exigences en matière d'authentification et d'autorisation. Par exemple, nous pouvons voir que seuls les utilisateurs ayant le rôle ADMIN peuvent accéder au point de terminaison /logs/audit .

MvcMisMatchers?
Dans Spring, ** est un modèle qui permet de faire correspondre un nombre quelconque de répertoires et de sous-répertoires dans une URL. Par exemple, /bankaccount/** correspondrait à toutes les URL commençant par /bankaccount/, y compris les sous-répertoires tels que /bankaccount/dashboard/settings.
Le motif * est un motif qui correspond à n'importe quelle URL et qui comporte exactement un niveau de sous-répertoire. Par exemple, /bankaccount/* correspondrait à bankaccount/dashboard.
Lors de la configuration des filtres avec *, Spring indique qu '"une erreur dans la correspondance des motifs entre Spring Security et Spr ing MVC" s'est produite, créant ainsi la vulnérabilité.
Essentiellement, en raison de l'absence de séparateur devant le double caractère générique, le chemin ne correspond pas à une demande entrante, car toutes les demandes entrantes sont précédées d'une barre oblique. Cela signifie que les règles de contrôle d'accès ne sont pas appliquées, ce qui permet à tout utilisateur non authentifié d'accéder aux ressources.
Jetons un coup d'œil au commit qui a corrigé le problème.

La modification la plus importante est l'ajout de la ligne 315, qui corrige le contournement des règles d'autorisation et d'authentification. Elle garantit que tout modèle de chemin soumis est précédé d'une barre oblique (/).
404 correspondance non trouvée

Lors de l'envoi d'une requête web à /bankaccounts/view , la méthode match analyse et compare les motifs définis dans le filtre de sécurité avec le chemin d'accès demandé. L'analyseur transforme le motif donné en un arbre d'éléments de chemin.

L'analyseur lit le premier caractère en tant qu'élément SeparatorPathElement. Il continue ensuite à lire les caractères de la chaîne jusqu'au séparateur suivant, en créant un nouvel élément LiteralPathElement.
Où se situe le problème lorsque l'on utilise ** comme modèle ?
Bien qu'il existe de nombreux types d'éléments de chemin, les plus intéressants sont les éléments WildcardPathElementet WildcardTheRestPathElement, avec leurs représentations respectives sous forme de chaînes de caractères : * et /**.
Un WildcardPathElement correspond à zéro ou plusieurs caractères dans un seul segment de chemin, tandis qu'un WildcardTheRestPathElement correspond à zéro ou plusieurs segments de chemin seuls (y compris les séparateurs).
Cette dernière nous donne un indice sur ce qui ne va pas lorsque l'on soumet ** comme motif. Lors de l'analyse syntaxique, il recherche des motifs, mais ** ne commence pas par la barre oblique attendue. Ainsi, au lieu de devenir un WildcardTheRestPathElement, il devient deux WildcardPathElements consécutifs.
Ensuite, le motif analysé est utilisé pour établir une correspondance avec l'URL demandée. Les chemins doivent commencer par une barre oblique, mais les caractères génériques ne correspondent pas aux séparateurs.

Cela signifie qu'au lieu d'un RequestMatchResult, c'est un null qui est renvoyé. Par conséquent, les règles de contrôle d'accès placées sur ce comparateur ne seront pas appliquées à l'URL demandée.
Spring a résolu le problème en ajoutant une barre oblique. En d'autres termes, tout motif ** devient /**, ce qui signifie qu'il peut être analysé comme un WildcardTheRestPathElement, et qu'un RequestMatchResult sera renvoyé car le motif correspond désormais à l'URL demandée.
Vulnérabilité ou utilisation abusive de l'API ?
On peut se demander si cela doit être considéré comme une vulnérabilité, car le code fonctionne comme prévu. Le problème réside essentiellement dans le fait que la documentation de Spring ne mentionne pas explicitement que les chemins doivent commencer par un séparateur. Par conséquent, on pourrait considérer qu'il s'agit davantage d'un cas de mauvaise utilisation de l'API que d'un bogue ou d'une vulnérabilité.


2023 年 3 月 20 日,Spring Security Advisories 发布了一篇博客文章,引用了内部发现的漏洞 CVE-2023-20860。没有透露任何详细信息,只是这是与使用 “mvcMatchers” 有关的访问控制问题。Spring 开发人员已经修复了这个问题,建议进行版本更新。由于安全是我们在Secure Code Warrior的主要关注点,因此我们决定更深入地研究这个MvcRequestMatchers漏洞,找出核心问题所在。

Secure Code Warrior peut aider votre organisation à sécuriser le code tout au long du cycle de vie du développement logiciel et à instaurer une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, directeur de la sécurité de l'information ou tout autre professionnel concerné par la sécurité, nous pouvons aider votre organisation à réduire les risques liés au code non sécurisé.
Veuillez réserver une démonstration.Brysen est développeur de logiciels à Secure Code Warrior et se concentre sur l'écriture de codes sécurisés.


Le 20 mars 2023, Spring Security Advisories a publié un billet de blog faisant référence à une vulnérabilité découverte en interne, CVE-2023-20860. Aucune information détaillée n'a été divulguée, si ce n'est qu'il s'agissait d'un problème de contrôle d'accès concernant l'utilisation de mvcMatchers. Les développeurs de Spring ont remédié au problème et une mise à jour de la version est conseillée.
Souhaitez-vous vivre une expérience de première main ? Essayez la mission ici.
La sécurité étant notre principale préoccupation chez Secure Code Warriornous avons décidé de nous pencher sur la vulnérabilité de mvcRequestMatchers et de comprendre où se situe le problème.
Spring fournit l'interface RequestMatcher pour déterminer si une requête correspond à un modèle de chemin. Jetez un coup d'œil à l'extrait de code ci-dessous dans lequel la méthode d'aide mvcMatchers est utilisée pour enregistrer les points de terminaison avec leurs exigences en matière d'authentification et d'autorisation. Par exemple, nous pouvons voir que seuls les utilisateurs ayant le rôle ADMIN peuvent accéder au point de terminaison /logs/audit .

MvcMisMatchers?
Dans Spring, ** est un modèle qui permet de faire correspondre un nombre quelconque de répertoires et de sous-répertoires dans une URL. Par exemple, /bankaccount/** correspondrait à toutes les URL commençant par /bankaccount/, y compris les sous-répertoires tels que /bankaccount/dashboard/settings.
Le motif * est un motif qui correspond à n'importe quelle URL et qui comporte exactement un niveau de sous-répertoire. Par exemple, /bankaccount/* correspondrait à bankaccount/dashboard.
Lors de la configuration des filtres avec *, Spring indique qu '"une erreur dans la correspondance des motifs entre Spring Security et Spr ing MVC" s'est produite, créant ainsi la vulnérabilité.
Essentiellement, en raison de l'absence de séparateur devant le double caractère générique, le chemin ne correspond pas à une demande entrante, car toutes les demandes entrantes sont précédées d'une barre oblique. Cela signifie que les règles de contrôle d'accès ne sont pas appliquées, ce qui permet à tout utilisateur non authentifié d'accéder aux ressources.
Jetons un coup d'œil au commit qui a corrigé le problème.

La modification la plus importante est l'ajout de la ligne 315, qui corrige le contournement des règles d'autorisation et d'authentification. Elle garantit que tout modèle de chemin soumis est précédé d'une barre oblique (/).
404 correspondance non trouvée

Lors de l'envoi d'une requête web à /bankaccounts/view , la méthode match analyse et compare les motifs définis dans le filtre de sécurité avec le chemin d'accès demandé. L'analyseur transforme le motif donné en un arbre d'éléments de chemin.

L'analyseur lit le premier caractère en tant qu'élément SeparatorPathElement. Il continue ensuite à lire les caractères de la chaîne jusqu'au séparateur suivant, en créant un nouvel élément LiteralPathElement.
Où se situe le problème lorsque l'on utilise ** comme modèle ?
Bien qu'il existe de nombreux types d'éléments de chemin, les plus intéressants sont les éléments WildcardPathElementet WildcardTheRestPathElement, avec leurs représentations respectives sous forme de chaînes de caractères : * et /**.
Un WildcardPathElement correspond à zéro ou plusieurs caractères dans un seul segment de chemin, tandis qu'un WildcardTheRestPathElement correspond à zéro ou plusieurs segments de chemin seuls (y compris les séparateurs).
Cette dernière nous donne un indice sur ce qui ne va pas lorsque l'on soumet ** comme motif. Lors de l'analyse syntaxique, il recherche des motifs, mais ** ne commence pas par la barre oblique attendue. Ainsi, au lieu de devenir un WildcardTheRestPathElement, il devient deux WildcardPathElements consécutifs.
Ensuite, le motif analysé est utilisé pour établir une correspondance avec l'URL demandée. Les chemins doivent commencer par une barre oblique, mais les caractères génériques ne correspondent pas aux séparateurs.

Cela signifie qu'au lieu d'un RequestMatchResult, c'est un null qui est renvoyé. Par conséquent, les règles de contrôle d'accès placées sur ce comparateur ne seront pas appliquées à l'URL demandée.
Spring a résolu le problème en ajoutant une barre oblique. En d'autres termes, tout motif ** devient /**, ce qui signifie qu'il peut être analysé comme un WildcardTheRestPathElement, et qu'un RequestMatchResult sera renvoyé car le motif correspond désormais à l'URL demandée.
Vulnérabilité ou utilisation abusive de l'API ?
On peut se demander si cela doit être considéré comme une vulnérabilité, car le code fonctionne comme prévu. Le problème réside essentiellement dans le fait que la documentation de Spring ne mentionne pas explicitement que les chemins doivent commencer par un séparateur. Par conséquent, on pourrait considérer qu'il s'agit davantage d'un cas de mauvaise utilisation de l'API que d'un bogue ou d'une vulnérabilité.

Le 20 mars 2023, Spring Security Advisories a publié un billet de blog faisant référence à une vulnérabilité découverte en interne, CVE-2023-20860. Aucune information détaillée n'a été divulguée, si ce n'est qu'il s'agissait d'un problème de contrôle d'accès concernant l'utilisation de mvcMatchers. Les développeurs de Spring ont remédié au problème et une mise à jour de la version est conseillée.
Souhaitez-vous vivre une expérience de première main ? Essayez la mission ici.
La sécurité étant notre principale préoccupation chez Secure Code Warriornous avons décidé de nous pencher sur la vulnérabilité de mvcRequestMatchers et de comprendre où se situe le problème.
Spring fournit l'interface RequestMatcher pour déterminer si une requête correspond à un modèle de chemin. Jetez un coup d'œil à l'extrait de code ci-dessous dans lequel la méthode d'aide mvcMatchers est utilisée pour enregistrer les points de terminaison avec leurs exigences en matière d'authentification et d'autorisation. Par exemple, nous pouvons voir que seuls les utilisateurs ayant le rôle ADMIN peuvent accéder au point de terminaison /logs/audit .

MvcMisMatchers?
Dans Spring, ** est un modèle qui permet de faire correspondre un nombre quelconque de répertoires et de sous-répertoires dans une URL. Par exemple, /bankaccount/** correspondrait à toutes les URL commençant par /bankaccount/, y compris les sous-répertoires tels que /bankaccount/dashboard/settings.
Le motif * est un motif qui correspond à n'importe quelle URL et qui comporte exactement un niveau de sous-répertoire. Par exemple, /bankaccount/* correspondrait à bankaccount/dashboard.
Lors de la configuration des filtres avec *, Spring indique qu '"une erreur dans la correspondance des motifs entre Spring Security et Spr ing MVC" s'est produite, créant ainsi la vulnérabilité.
Essentiellement, en raison de l'absence de séparateur devant le double caractère générique, le chemin ne correspond pas à une demande entrante, car toutes les demandes entrantes sont précédées d'une barre oblique. Cela signifie que les règles de contrôle d'accès ne sont pas appliquées, ce qui permet à tout utilisateur non authentifié d'accéder aux ressources.
Jetons un coup d'œil au commit qui a corrigé le problème.

La modification la plus importante est l'ajout de la ligne 315, qui corrige le contournement des règles d'autorisation et d'authentification. Elle garantit que tout modèle de chemin soumis est précédé d'une barre oblique (/).
404 correspondance non trouvée

Lors de l'envoi d'une requête web à /bankaccounts/view , la méthode match analyse et compare les motifs définis dans le filtre de sécurité avec le chemin d'accès demandé. L'analyseur transforme le motif donné en un arbre d'éléments de chemin.

L'analyseur lit le premier caractère en tant qu'élément SeparatorPathElement. Il continue ensuite à lire les caractères de la chaîne jusqu'au séparateur suivant, en créant un nouvel élément LiteralPathElement.
Où se situe le problème lorsque l'on utilise ** comme modèle ?
Bien qu'il existe de nombreux types d'éléments de chemin, les plus intéressants sont les éléments WildcardPathElementet WildcardTheRestPathElement, avec leurs représentations respectives sous forme de chaînes de caractères : * et /**.
Un WildcardPathElement correspond à zéro ou plusieurs caractères dans un seul segment de chemin, tandis qu'un WildcardTheRestPathElement correspond à zéro ou plusieurs segments de chemin seuls (y compris les séparateurs).
Cette dernière nous donne un indice sur ce qui ne va pas lorsque l'on soumet ** comme motif. Lors de l'analyse syntaxique, il recherche des motifs, mais ** ne commence pas par la barre oblique attendue. Ainsi, au lieu de devenir un WildcardTheRestPathElement, il devient deux WildcardPathElements consécutifs.
Ensuite, le motif analysé est utilisé pour établir une correspondance avec l'URL demandée. Les chemins doivent commencer par une barre oblique, mais les caractères génériques ne correspondent pas aux séparateurs.

Cela signifie qu'au lieu d'un RequestMatchResult, c'est un null qui est renvoyé. Par conséquent, les règles de contrôle d'accès placées sur ce comparateur ne seront pas appliquées à l'URL demandée.
Spring a résolu le problème en ajoutant une barre oblique. En d'autres termes, tout motif ** devient /**, ce qui signifie qu'il peut être analysé comme un WildcardTheRestPathElement, et qu'un RequestMatchResult sera renvoyé car le motif correspond désormais à l'URL demandée.
Vulnérabilité ou utilisation abusive de l'API ?
On peut se demander si cela doit être considéré comme une vulnérabilité, car le code fonctionne comme prévu. Le problème réside essentiellement dans le fait que la documentation de Spring ne mentionne pas explicitement que les chemins doivent commencer par un séparateur. Par conséquent, on pourrait considérer qu'il s'agit davantage d'un cas de mauvaise utilisation de l'API que d'un bogue ou d'une vulnérabilité.

Veuillez cliquer sur le lien ci-dessous pour télécharger le PDF de cette ressource.
Secure Code Warrior peut aider votre organisation à sécuriser le code tout au long du cycle de vie du développement logiciel et à instaurer une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, directeur de la sécurité de l'information ou tout autre professionnel concerné par la sécurité, nous pouvons aider votre organisation à réduire les risques liés au code non sécurisé.
Veuillez consulter le rapport.Veuillez réserver une démonstration.Brysen est développeur de logiciels à Secure Code Warrior et se concentre sur l'écriture de codes sécurisés.
Le 20 mars 2023, Spring Security Advisories a publié un billet de blog faisant référence à une vulnérabilité découverte en interne, CVE-2023-20860. Aucune information détaillée n'a été divulguée, si ce n'est qu'il s'agissait d'un problème de contrôle d'accès concernant l'utilisation de mvcMatchers. Les développeurs de Spring ont remédié au problème et une mise à jour de la version est conseillée.
Souhaitez-vous vivre une expérience de première main ? Essayez la mission ici.
La sécurité étant notre principale préoccupation chez Secure Code Warriornous avons décidé de nous pencher sur la vulnérabilité de mvcRequestMatchers et de comprendre où se situe le problème.
Spring fournit l'interface RequestMatcher pour déterminer si une requête correspond à un modèle de chemin. Jetez un coup d'œil à l'extrait de code ci-dessous dans lequel la méthode d'aide mvcMatchers est utilisée pour enregistrer les points de terminaison avec leurs exigences en matière d'authentification et d'autorisation. Par exemple, nous pouvons voir que seuls les utilisateurs ayant le rôle ADMIN peuvent accéder au point de terminaison /logs/audit .

MvcMisMatchers?
Dans Spring, ** est un modèle qui permet de faire correspondre un nombre quelconque de répertoires et de sous-répertoires dans une URL. Par exemple, /bankaccount/** correspondrait à toutes les URL commençant par /bankaccount/, y compris les sous-répertoires tels que /bankaccount/dashboard/settings.
Le motif * est un motif qui correspond à n'importe quelle URL et qui comporte exactement un niveau de sous-répertoire. Par exemple, /bankaccount/* correspondrait à bankaccount/dashboard.
Lors de la configuration des filtres avec *, Spring indique qu '"une erreur dans la correspondance des motifs entre Spring Security et Spr ing MVC" s'est produite, créant ainsi la vulnérabilité.
Essentiellement, en raison de l'absence de séparateur devant le double caractère générique, le chemin ne correspond pas à une demande entrante, car toutes les demandes entrantes sont précédées d'une barre oblique. Cela signifie que les règles de contrôle d'accès ne sont pas appliquées, ce qui permet à tout utilisateur non authentifié d'accéder aux ressources.
Jetons un coup d'œil au commit qui a corrigé le problème.

La modification la plus importante est l'ajout de la ligne 315, qui corrige le contournement des règles d'autorisation et d'authentification. Elle garantit que tout modèle de chemin soumis est précédé d'une barre oblique (/).
404 correspondance non trouvée

Lors de l'envoi d'une requête web à /bankaccounts/view , la méthode match analyse et compare les motifs définis dans le filtre de sécurité avec le chemin d'accès demandé. L'analyseur transforme le motif donné en un arbre d'éléments de chemin.

L'analyseur lit le premier caractère en tant qu'élément SeparatorPathElement. Il continue ensuite à lire les caractères de la chaîne jusqu'au séparateur suivant, en créant un nouvel élément LiteralPathElement.
Où se situe le problème lorsque l'on utilise ** comme modèle ?
Bien qu'il existe de nombreux types d'éléments de chemin, les plus intéressants sont les éléments WildcardPathElementet WildcardTheRestPathElement, avec leurs représentations respectives sous forme de chaînes de caractères : * et /**.
Un WildcardPathElement correspond à zéro ou plusieurs caractères dans un seul segment de chemin, tandis qu'un WildcardTheRestPathElement correspond à zéro ou plusieurs segments de chemin seuls (y compris les séparateurs).
Cette dernière nous donne un indice sur ce qui ne va pas lorsque l'on soumet ** comme motif. Lors de l'analyse syntaxique, il recherche des motifs, mais ** ne commence pas par la barre oblique attendue. Ainsi, au lieu de devenir un WildcardTheRestPathElement, il devient deux WildcardPathElements consécutifs.
Ensuite, le motif analysé est utilisé pour établir une correspondance avec l'URL demandée. Les chemins doivent commencer par une barre oblique, mais les caractères génériques ne correspondent pas aux séparateurs.

Cela signifie qu'au lieu d'un RequestMatchResult, c'est un null qui est renvoyé. Par conséquent, les règles de contrôle d'accès placées sur ce comparateur ne seront pas appliquées à l'URL demandée.
Spring a résolu le problème en ajoutant une barre oblique. En d'autres termes, tout motif ** devient /**, ce qui signifie qu'il peut être analysé comme un WildcardTheRestPathElement, et qu'un RequestMatchResult sera renvoyé car le motif correspond désormais à l'URL demandée.
Vulnérabilité ou utilisation abusive de l'API ?
On peut se demander si cela doit être considéré comme une vulnérabilité, car le code fonctionne comme prévu. Le problème réside essentiellement dans le fait que la documentation de Spring ne mentionne pas explicitement que les chemins doivent commencer par un séparateur. Par conséquent, on pourrait considérer qu'il s'agit davantage d'un cas de mauvaise utilisation de l'API que d'un bogue ou d'une vulnérabilité.
Table des matières

Secure Code Warrior peut aider votre organisation à sécuriser le code tout au long du cycle de vie du développement logiciel et à instaurer une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, directeur de la sécurité de l'information ou tout autre professionnel concerné par la sécurité, nous pouvons aider votre organisation à réduire les risques liés au code non sécurisé.
Veuillez réserver une démonstration.TéléchargerRessources pour vous aider à démarrer
Formation sur les codes de sécurité : thèmes et contenu
Notre contenu de pointe évolue constamment pour s'adapter au paysage changeant du développement logiciel, tout en tenant compte de votre rôle. Les sujets abordés couvrent tout, de l'IA à l'injection XQuery, et s'adressent à divers postes, des architectes et ingénieurs aux chefs de produit et responsables de l'assurance qualité. Découvrez un aperçu par thème et par rôle de ce que notre catalogue de contenu a à offrir.
La Chambre de commerce établit la norme en matière de sécurité à grande échelle axée sur les développeurs
La Chambre de commerce néerlandaise explique comment elle a intégré le codage sécurisé dans le développement quotidien grâce à des certifications basées sur les rôles, à l'évaluation comparative du Trust Score et à une culture de responsabilité partagée en matière de sécurité.
Modélisation des menaces avec l'IA : transformer chaque développeur en modélisateur de menaces
Vous repartirez mieux équipé pour aider les développeurs à combiner les idées et les techniques de modélisation des menaces avec les outils d'IA qu'ils utilisent déjà pour renforcer la sécurité, améliorer la collaboration et créer des logiciels plus résilients dès le départ.
Ressources pour vous aider à démarrer
Cybermon est de retour : la mission AI pour vaincre le boss est désormais disponible sur demande.
Cybermon 2025 : la campagne « Vaincre le boss » est désormais disponible toute l'année dans SCW. La guerre de sécurité avancée de l'IA/LLM tribale, le renforcement de l'IA de sécurité à grande échelle.
Interprétation de la loi sur la résilience des réseaux : que signifie la sécurité par le biais de la conception et du développement de logiciels ?
Comprenez les exigences de la loi européenne sur la résilience des réseaux (CRA), à qui elle s'applique et comment les équipes d'ingénierie peuvent s'y préparer grâce à des pratiques de conception, à la prévention des vulnérabilités et au renforcement des capacités des développeurs.
Facteur déterminant 1 : des critères de réussite clairs et mesurables
Le catalyseur n° 1 constitue le premier volet de notre série en dix parties consacrée aux facteurs de réussite. Il démontre comment relier la sécurité du code aux résultats opérationnels, tels que la réduction des risques et l'accélération de la maturité des programmes à long terme.




%20(1).avif)
.avif)
