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 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

데모 예약하기
공유하기:
링크드인 브랜드사회적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 오류 아이콘
양식을 보내려면 '분석' 쿠키를 활성화하세요. 완료 후에는 언제든지 다시 비활성화해도 됩니다.
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 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

보고서 보기데모 예약하기
리소스 보기
공유하기:
링크드인 브랜드사회적x 로고
더 알고 싶으신가요?

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

지금 바로 사용해 보세요
공유하기:
링크드인 브랜드사회적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 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

데모 예약하기다운로드
공유하기:
링크드인 브랜드사회적x 로고
자원 센터

시작하기 위한 자료

더 많은 게시물
자원 센터

시작하기 위한 자료

더 많은 게시물