SCW图标
英雄背景无分隔线
博客

Un análisis más detallado de la vulnerabilidad MVC RequestMatcher Spring

布赖森-阿克思
发表于 2023 年 4 月 19 日
最后更新于 2026年3月6日

El 20 de marzo de 2023, Spring Security Advisories publicó un entrada de blog haciendo referencia a una vulnerabilidad descubierta internamente, CVE-2023-20860. No se reveló información detallada, excepto que se trataba de un problema de control de acceso relacionado con el uso de Matchers de MVC. Los desarrolladores de Spring han solucionado el problema y se recomienda actualizar la versión.

¿Quieres una experiencia de primera mano? Prueba la misión aquí.

Dado que la seguridad es nuestro principal objetivo en Secure Code Warrior, decidimos profundizar en esta vulnerabilidad de MVCRequestMatchers y averiguar cuál es el problema principal.

Spring proporciona la interfaz RequestMatcher para determinar si una solicitud coincide con un patrón de ruta. Eche un vistazo al fragmento de código que aparece a continuación, donde Matchers de MVC el método helper se utiliza para registrar los puntos finales junto con sus requisitos de autenticación y autorización. Por ejemplo, podemos ver que solo los usuarios con el rol de ADMINISTRADOR pueden acceder al /logs/auditoría punto final.

MvcSrta.¿Emparejadores?

En primavera, ** es un patrón para hacer coincidir cualquier número de directorios y subdirectorios de una URL. Por ejemplo,/cuenta bancaria/** coincidiría con todas las URL que comiencen por /cuenta bancaria/, incluidos subdirectorios como /cuenta bancaria/panel de control/configuración.

El * el patrón es un patrón que coincide con cualquier URL y tiene exactamente un nivel de subdirectorio. Por ejemplo, /cuenta bancaria/ * coincidiría cuenta bancaria/panel de control.

Al configurar los comparadores con *, Spring afirma que «una falta de coincidencia en la coincidencia de patrones entre Spring Security y Spring MVC» tuvo lugar, creando la vulnerabilidad.

Básicamente, debido a la falta de un separador delante del comodín doble, la ruta no coincide con una solicitud entrante, ya que todas las solicitudes entrantes van precedidas de una barra diagonal. Esto significa que las reglas de control de acceso no se aplican y permite que cualquier usuario no autenticado acceda a los recursos.

Vamos a echar un vistazo a la cometer eso solucionó el problema.

El cambio más destacado e importante es la adición de la línea 315, que corrige la omisión de las reglas de autorización y autenticación. Garantiza que cualquier patrón de ruta que se envíe vaya precedido de una barra diagonal (/).

404 coincidencias no encontradas

Clase PathPatternMatchableHandlerMapping (Fuente) marco de muelles)

Al enviar una solicitud web a /cuentas bancarias/ver la concuerda El método analizará y comparará los patrones definidos en el filtro de seguridad con la ruta solicitada. El analizador convertirá el patrón dado en un árbol de elementos de ruta.

El analizador lee el primer carácter como Elemento Separator Path. Luego continúa leyendo los caracteres de la cadena hasta el siguiente separador, creando un nuevo Elemento LiteralPath.

Entonces, ¿dónde sale mal cuando se usa? ** como patrón?

Si bien hay muchos tipos de elementos de ruta, los más interesantes aquí son los Pathelemen comodínt y el Comodín: el elemento RestPath, con sus respectivas representaciones de cadenas: * y /**. 

UN Elemento WildcardPath coincide con cero o más caracteres dentro de un solo segmento de ruta, mientras que un Comodín: el elemento RestPath coincide con cero o más segmentos de ruta por sí solos (incluidos los separadores).

Este último nos da una pista de lo que sale mal al enviar ** como patrón. Durante el análisis, busca patrones, pero ** no comienza con la barra oblicua esperada. Entonces, en lugar de convertirse en Comodín: el elemento RestPath, se convierte en dos consecutivos Elementos de Wildcard Path.

A continuación, el patrón analizado se usa para compararlo con la URL solicitada. Se espera que las rutas comiencen con una barra diagonal, pero un comodín no coincide con los separadores.

Fragmento de WildCardPathElement.java

Esto significa que en lugar de un Solicitar resultado de la coincidencia, se devuelve un valor nulo. Por lo tanto, las reglas de control de acceso establecidas en este comparador no se aplicarán a la URL solicitada.

Spring solucionó el problema anteponiendo una barra. En otras palabras, cualquier ** el patrón se convierte /**, lo que significa que se puede analizar como Comodín: el elemento RestPath, y un Solicitar resultado de la coincidencia se devolverá ya que el patrón coincide ahora con la URL solicitada.

¿Vulnerabilidad o uso indebido de API?

Es discutible si esto debe considerarse una vulnerabilidad, ya que el código funciona según lo previsto. El problema radica básicamente en el hecho de que el Documentación de primavera carece de una mención explícita de que las rutas deben comenzar con un separador. Por lo tanto, podría considerarse más un caso de uso indebido de la API que un error o una vulnerabilidad.

Icono de calavera sobre un fondo abstracto geométrico amarillo
Icono de calavera sobre un fondo abstracto geométrico amarillo
查看资源
查看资源

El 20 de marzo de 2023, Spring Security Advisories publicó una entrada de blog en la que hacía referencia a una vulnerabilidad descubierta internamente, la CVE-2023-20860. No se reveló información detallada, excepto que se trataba de un problema de control de acceso relacionado con el uso de `MvcMatchers`. Los desarrolladores de Spring han solucionado el problema y se recomienda actualizar la versión. Como la seguridad es nuestro principal objetivo en Secure Code Warrior, hemos decidido profundizar en esta vulnerabilidad de MVCRequestMatchers y averiguar dónde reside el problema principal.

感兴趣了解更多吗?

了解更多

Secure Code Warrior 您的组织在软件开发全生命周期中保护代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全管理员、开发人员、首席信息安全官,还是任何与安全相关的工作人员,我们都能助力您的组织降低不安全代码带来的风险。

预约演示
分享到:
领英品牌社交x 标志
作者
布赖森-阿克思
2023年4月19日出版

Brysen是Secure Code Warrior 的一名软件开发人员,专注于编写安全代码。

分享到:
领英品牌社交x 标志
Icono de calavera sobre un fondo abstracto geométrico amarillo
Icono de calavera sobre un fondo abstracto geométrico amarillo

El 20 de marzo de 2023, Spring Security Advisories publicó un entrada de blog haciendo referencia a una vulnerabilidad descubierta internamente, CVE-2023-20860. No se reveló información detallada, excepto que se trataba de un problema de control de acceso relacionado con el uso de Matchers de MVC. Los desarrolladores de Spring han solucionado el problema y se recomienda actualizar la versión.

¿Quieres una experiencia de primera mano? Prueba la misión aquí.

Dado que la seguridad es nuestro principal objetivo en Secure Code Warrior, decidimos profundizar en esta vulnerabilidad de MVCRequestMatchers y averiguar cuál es el problema principal.

Spring proporciona la interfaz RequestMatcher para determinar si una solicitud coincide con un patrón de ruta. Eche un vistazo al fragmento de código que aparece a continuación, donde Matchers de MVC el método helper se utiliza para registrar los puntos finales junto con sus requisitos de autenticación y autorización. Por ejemplo, podemos ver que solo los usuarios con el rol de ADMINISTRADOR pueden acceder al /logs/auditoría punto final.

MvcSrta.¿Emparejadores?

En primavera, ** es un patrón para hacer coincidir cualquier número de directorios y subdirectorios de una URL. Por ejemplo,/cuenta bancaria/** coincidiría con todas las URL que comiencen por /cuenta bancaria/, incluidos subdirectorios como /cuenta bancaria/panel de control/configuración.

El * el patrón es un patrón que coincide con cualquier URL y tiene exactamente un nivel de subdirectorio. Por ejemplo, /cuenta bancaria/ * coincidiría cuenta bancaria/panel de control.

Al configurar los comparadores con *, Spring afirma que «una falta de coincidencia en la coincidencia de patrones entre Spring Security y Spring MVC» tuvo lugar, creando la vulnerabilidad.

Básicamente, debido a la falta de un separador delante del comodín doble, la ruta no coincide con una solicitud entrante, ya que todas las solicitudes entrantes van precedidas de una barra diagonal. Esto significa que las reglas de control de acceso no se aplican y permite que cualquier usuario no autenticado acceda a los recursos.

Vamos a echar un vistazo a la cometer eso solucionó el problema.

El cambio más destacado e importante es la adición de la línea 315, que corrige la omisión de las reglas de autorización y autenticación. Garantiza que cualquier patrón de ruta que se envíe vaya precedido de una barra diagonal (/).

404 coincidencias no encontradas

Clase PathPatternMatchableHandlerMapping (Fuente) marco de muelles)

Al enviar una solicitud web a /cuentas bancarias/ver la concuerda El método analizará y comparará los patrones definidos en el filtro de seguridad con la ruta solicitada. El analizador convertirá el patrón dado en un árbol de elementos de ruta.

El analizador lee el primer carácter como Elemento Separator Path. Luego continúa leyendo los caracteres de la cadena hasta el siguiente separador, creando un nuevo Elemento LiteralPath.

Entonces, ¿dónde sale mal cuando se usa? ** como patrón?

Si bien hay muchos tipos de elementos de ruta, los más interesantes aquí son los Pathelemen comodínt y el Comodín: el elemento RestPath, con sus respectivas representaciones de cadenas: * y /**. 

UN Elemento WildcardPath coincide con cero o más caracteres dentro de un solo segmento de ruta, mientras que un Comodín: el elemento RestPath coincide con cero o más segmentos de ruta por sí solos (incluidos los separadores).

Este último nos da una pista de lo que sale mal al enviar ** como patrón. Durante el análisis, busca patrones, pero ** no comienza con la barra oblicua esperada. Entonces, en lugar de convertirse en Comodín: el elemento RestPath, se convierte en dos consecutivos Elementos de Wildcard Path.

A continuación, el patrón analizado se usa para compararlo con la URL solicitada. Se espera que las rutas comiencen con una barra diagonal, pero un comodín no coincide con los separadores.

Fragmento de WildCardPathElement.java

Esto significa que en lugar de un Solicitar resultado de la coincidencia, se devuelve un valor nulo. Por lo tanto, las reglas de control de acceso establecidas en este comparador no se aplicarán a la URL solicitada.

Spring solucionó el problema anteponiendo una barra. En otras palabras, cualquier ** el patrón se convierte /**, lo que significa que se puede analizar como Comodín: el elemento RestPath, y un Solicitar resultado de la coincidencia se devolverá ya que el patrón coincide ahora con la URL solicitada.

¿Vulnerabilidad o uso indebido de API?

Es discutible si esto debe considerarse una vulnerabilidad, ya que el código funciona según lo previsto. El problema radica básicamente en el hecho de que el Documentación de primavera carece de una mención explícita de que las rutas deben comenzar con un separador. Por lo tanto, podría considerarse más un caso de uso indebido de la API que un error o una vulnerabilidad.

查看资源
查看资源

请填写以下表格以下载报告

我们希望获得您的许可,以便向您发送有关我们产品或安全编码相关主题的信息。我们将始终以最高标准谨慎处理您的个人数据,绝不会出于营销目的将其出售给其他公司。

发送
scw 成功图标
SCW 错误图标
要提交表单,请启用「分析」cookie。完成后请随时将其重新禁用。
Icono de calavera sobre un fondo abstracto geométrico amarillo

El 20 de marzo de 2023, Spring Security Advisories publicó un entrada de blog haciendo referencia a una vulnerabilidad descubierta internamente, CVE-2023-20860. No se reveló información detallada, excepto que se trataba de un problema de control de acceso relacionado con el uso de Matchers de MVC. Los desarrolladores de Spring han solucionado el problema y se recomienda actualizar la versión.

¿Quieres una experiencia de primera mano? Prueba la misión aquí.

Dado que la seguridad es nuestro principal objetivo en Secure Code Warrior, decidimos profundizar en esta vulnerabilidad de MVCRequestMatchers y averiguar cuál es el problema principal.

Spring proporciona la interfaz RequestMatcher para determinar si una solicitud coincide con un patrón de ruta. Eche un vistazo al fragmento de código que aparece a continuación, donde Matchers de MVC el método helper se utiliza para registrar los puntos finales junto con sus requisitos de autenticación y autorización. Por ejemplo, podemos ver que solo los usuarios con el rol de ADMINISTRADOR pueden acceder al /logs/auditoría punto final.

MvcSrta.¿Emparejadores?

En primavera, ** es un patrón para hacer coincidir cualquier número de directorios y subdirectorios de una URL. Por ejemplo,/cuenta bancaria/** coincidiría con todas las URL que comiencen por /cuenta bancaria/, incluidos subdirectorios como /cuenta bancaria/panel de control/configuración.

El * el patrón es un patrón que coincide con cualquier URL y tiene exactamente un nivel de subdirectorio. Por ejemplo, /cuenta bancaria/ * coincidiría cuenta bancaria/panel de control.

Al configurar los comparadores con *, Spring afirma que «una falta de coincidencia en la coincidencia de patrones entre Spring Security y Spring MVC» tuvo lugar, creando la vulnerabilidad.

Básicamente, debido a la falta de un separador delante del comodín doble, la ruta no coincide con una solicitud entrante, ya que todas las solicitudes entrantes van precedidas de una barra diagonal. Esto significa que las reglas de control de acceso no se aplican y permite que cualquier usuario no autenticado acceda a los recursos.

Vamos a echar un vistazo a la cometer eso solucionó el problema.

El cambio más destacado e importante es la adición de la línea 315, que corrige la omisión de las reglas de autorización y autenticación. Garantiza que cualquier patrón de ruta que se envíe vaya precedido de una barra diagonal (/).

404 coincidencias no encontradas

Clase PathPatternMatchableHandlerMapping (Fuente) marco de muelles)

Al enviar una solicitud web a /cuentas bancarias/ver la concuerda El método analizará y comparará los patrones definidos en el filtro de seguridad con la ruta solicitada. El analizador convertirá el patrón dado en un árbol de elementos de ruta.

El analizador lee el primer carácter como Elemento Separator Path. Luego continúa leyendo los caracteres de la cadena hasta el siguiente separador, creando un nuevo Elemento LiteralPath.

Entonces, ¿dónde sale mal cuando se usa? ** como patrón?

Si bien hay muchos tipos de elementos de ruta, los más interesantes aquí son los Pathelemen comodínt y el Comodín: el elemento RestPath, con sus respectivas representaciones de cadenas: * y /**. 

UN Elemento WildcardPath coincide con cero o más caracteres dentro de un solo segmento de ruta, mientras que un Comodín: el elemento RestPath coincide con cero o más segmentos de ruta por sí solos (incluidos los separadores).

Este último nos da una pista de lo que sale mal al enviar ** como patrón. Durante el análisis, busca patrones, pero ** no comienza con la barra oblicua esperada. Entonces, en lugar de convertirse en Comodín: el elemento RestPath, se convierte en dos consecutivos Elementos de Wildcard Path.

A continuación, el patrón analizado se usa para compararlo con la URL solicitada. Se espera que las rutas comiencen con una barra diagonal, pero un comodín no coincide con los separadores.

Fragmento de WildCardPathElement.java

Esto significa que en lugar de un Solicitar resultado de la coincidencia, se devuelve un valor nulo. Por lo tanto, las reglas de control de acceso establecidas en este comparador no se aplicarán a la URL solicitada.

Spring solucionó el problema anteponiendo una barra. En otras palabras, cualquier ** el patrón se convierte /**, lo que significa que se puede analizar como Comodín: el elemento RestPath, y un Solicitar resultado de la coincidencia se devolverá ya que el patrón coincide ahora con la URL solicitada.

¿Vulnerabilidad o uso indebido de API?

Es discutible si esto debe considerarse una vulnerabilidad, ya que el código funciona según lo previsto. El problema radica básicamente en el hecho de que el Documentación de primavera carece de una mención explícita de que las rutas deben comenzar con un separador. Por lo tanto, podría considerarse más un caso de uso indebido de la API que un error o una vulnerabilidad.

观看网络研讨会
开始
了解更多

点击下方链接,下载此资源的PDF文件。

Secure Code Warrior 您的组织在软件开发全生命周期中保护代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全管理员、开发人员、首席信息安全官,还是任何与安全相关的工作人员,我们都能助力您的组织降低不安全代码带来的风险。

查看报告预约演示
查看资源
分享到:
领英品牌社交x 标志
感兴趣了解更多吗?

Pon a prueba nuestra misión de experimentar el impacto por ti mismo y aprende a evitar cometer un error similar.

Pruébalo ahora
分享到:
领英品牌社交x 标志
作者
布赖森-阿克思
2023年4月19日出版

Brysen是Secure Code Warrior 的一名软件开发人员,专注于编写安全代码。

分享到:
领英品牌社交x 标志

El 20 de marzo de 2023, Spring Security Advisories publicó un entrada de blog haciendo referencia a una vulnerabilidad descubierta internamente, CVE-2023-20860. No se reveló información detallada, excepto que se trataba de un problema de control de acceso relacionado con el uso de Matchers de MVC. Los desarrolladores de Spring han solucionado el problema y se recomienda actualizar la versión.

¿Quieres una experiencia de primera mano? Prueba la misión aquí.

Dado que la seguridad es nuestro principal objetivo en Secure Code Warrior, decidimos profundizar en esta vulnerabilidad de MVCRequestMatchers y averiguar cuál es el problema principal.

Spring proporciona la interfaz RequestMatcher para determinar si una solicitud coincide con un patrón de ruta. Eche un vistazo al fragmento de código que aparece a continuación, donde Matchers de MVC el método helper se utiliza para registrar los puntos finales junto con sus requisitos de autenticación y autorización. Por ejemplo, podemos ver que solo los usuarios con el rol de ADMINISTRADOR pueden acceder al /logs/auditoría punto final.

MvcSrta.¿Emparejadores?

En primavera, ** es un patrón para hacer coincidir cualquier número de directorios y subdirectorios de una URL. Por ejemplo,/cuenta bancaria/** coincidiría con todas las URL que comiencen por /cuenta bancaria/, incluidos subdirectorios como /cuenta bancaria/panel de control/configuración.

El * el patrón es un patrón que coincide con cualquier URL y tiene exactamente un nivel de subdirectorio. Por ejemplo, /cuenta bancaria/ * coincidiría cuenta bancaria/panel de control.

Al configurar los comparadores con *, Spring afirma que «una falta de coincidencia en la coincidencia de patrones entre Spring Security y Spring MVC» tuvo lugar, creando la vulnerabilidad.

Básicamente, debido a la falta de un separador delante del comodín doble, la ruta no coincide con una solicitud entrante, ya que todas las solicitudes entrantes van precedidas de una barra diagonal. Esto significa que las reglas de control de acceso no se aplican y permite que cualquier usuario no autenticado acceda a los recursos.

Vamos a echar un vistazo a la cometer eso solucionó el problema.

El cambio más destacado e importante es la adición de la línea 315, que corrige la omisión de las reglas de autorización y autenticación. Garantiza que cualquier patrón de ruta que se envíe vaya precedido de una barra diagonal (/).

404 coincidencias no encontradas

Clase PathPatternMatchableHandlerMapping (Fuente) marco de muelles)

Al enviar una solicitud web a /cuentas bancarias/ver la concuerda El método analizará y comparará los patrones definidos en el filtro de seguridad con la ruta solicitada. El analizador convertirá el patrón dado en un árbol de elementos de ruta.

El analizador lee el primer carácter como Elemento Separator Path. Luego continúa leyendo los caracteres de la cadena hasta el siguiente separador, creando un nuevo Elemento LiteralPath.

Entonces, ¿dónde sale mal cuando se usa? ** como patrón?

Si bien hay muchos tipos de elementos de ruta, los más interesantes aquí son los Pathelemen comodínt y el Comodín: el elemento RestPath, con sus respectivas representaciones de cadenas: * y /**. 

UN Elemento WildcardPath coincide con cero o más caracteres dentro de un solo segmento de ruta, mientras que un Comodín: el elemento RestPath coincide con cero o más segmentos de ruta por sí solos (incluidos los separadores).

Este último nos da una pista de lo que sale mal al enviar ** como patrón. Durante el análisis, busca patrones, pero ** no comienza con la barra oblicua esperada. Entonces, en lugar de convertirse en Comodín: el elemento RestPath, se convierte en dos consecutivos Elementos de Wildcard Path.

A continuación, el patrón analizado se usa para compararlo con la URL solicitada. Se espera que las rutas comiencen con una barra diagonal, pero un comodín no coincide con los separadores.

Fragmento de WildCardPathElement.java

Esto significa que en lugar de un Solicitar resultado de la coincidencia, se devuelve un valor nulo. Por lo tanto, las reglas de control de acceso establecidas en este comparador no se aplicarán a la URL solicitada.

Spring solucionó el problema anteponiendo una barra. En otras palabras, cualquier ** el patrón se convierte /**, lo que significa que se puede analizar como Comodín: el elemento RestPath, y un Solicitar resultado de la coincidencia se devolverá ya que el patrón coincide ahora con la URL solicitada.

¿Vulnerabilidad o uso indebido de API?

Es discutible si esto debe considerarse una vulnerabilidad, ya que el código funciona según lo previsto. El problema radica básicamente en el hecho de que el Documentación de primavera carece de una mención explícita de que las rutas deben comenzar con un separador. Por lo tanto, podría considerarse más un caso de uso indebido de la API que un error o una vulnerabilidad.

目录

下载PDF
查看资源
感兴趣了解更多吗?

了解更多

Secure Code Warrior 您的组织在软件开发全生命周期中保护代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全管理员、开发人员、首席信息安全官,还是任何与安全相关的工作人员,我们都能助力您的组织降低不安全代码带来的风险。

预约演示下载
分享到:
领英品牌社交x 标志
资源中心

入门资源

更多出版物
资源中心

入门资源

更多出版物