Ein genauerer Blick auf die mvcRequestMatcher Spring-Schwachstelle
Ein genauerer Blick auf die mvcRequestMatcher Spring-Schwachstelle
![Schädel-Symbol über einem gelben geometrischen abstrakten Hintergrund](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/643fc914018b33e1cad58645_Spring-vulnerability-blog-image.webp)
![Schädel-Symbol über einem gelben geometrischen abstrakten Hintergrund](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/643fc914018b33e1cad58645_Spring-vulnerability-blog-image.webp)
Am 20. März 2023 veröffentlichte Spring Security Advisories einen Blogbeitrag, der sich auf eine intern entdeckte Sicherheitslücke CVE-2023-20860 bezog. Es wurden keine detaillierten Informationen bekannt gegeben, außer dass es sich um ein Problem der Zugriffskontrolle bei der Verwendung von mvcMatchers handelt. Die Spring-Entwickler haben das Problem behoben, und es wird ein Versionsupdate empfohlen.
Möchten Sie eine Erfahrung aus erster Hand machen? Probieren Sie die Mission hier aus.
Da Sicherheit unser Hauptaugenmerk bei Secure Code Warriorist, haben wir uns entschlossen, diese mvcRequestMatchers-Schwachstelle genauer zu untersuchen und herauszufinden, wo das Kernproblem liegt.
Spring bietet die RequestMatcher-Schnittstelle, um festzustellen, ob eine Anfrage mit einem Pfadmuster übereinstimmt. Schauen Sie sich den folgenden Codeausschnitt an, in dem die Hilfsmethode mvcMatchers verwendet wird, um die Endpunkte zusammen mit ihren Authentifizierungs- und Autorisierungsanforderungen zu registrieren. Zum Beispiel können wir sehen, dass nur Benutzer mit der Rolle ADMIN auf den Endpunkt /logs/audit zugreifen können.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/64400b95059a87dfdb10e86b_code-block-1.webp)
MvcMisMatchers?
In Spring ist ** ein Muster, das mit einer beliebigen Anzahl von Verzeichnissen und Unterverzeichnissen in einer URL übereinstimmt. Zum Beispiel würde /bankaccount/** allen URLs entsprechen, die mit /bankaccount/ beginnen, einschließlich Unterverzeichnissen wie /bankaccount/dashboard/settings.
Das *-Muster ist ein Muster, das mit jeder URL übereinstimmt und genau eine Ebene eines Unterverzeichnisses hat. Zum Beispiel würde /bankaccount/* auf bankaccount/dashboard passen .
Bei der Konfiguration der Matcher mit * stellt Spring fest, dass "eine Fehlanpassung beim Pattern-Matching zwischen Spring Security und Spr ing MVC" stattgefunden hat, wodurch die Schwachstelle entstand.
Da dem doppelten Platzhalter kein Trennzeichen vorangestellt ist, passt der Pfad nicht zu einer eingehenden Anfrage, da allen eingehenden Anfragen ein Schrägstrich vorangestellt wird. Dies bedeutet, dass die Zugriffskontrollregeln nicht angewendet werden und jeder nicht authentifizierte Benutzer auf die Ressourcen zugreifen kann.
Werfen wir einen Blick auf den Commit, der das Problem behoben hat.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/643fc7d3e1ca1a5117329c74_f24b5spYh-5YSUWbTgjOR873kwe9Zokg7HcNdv-NJasWTBytgNbrt0AZGaNNBOCKUuasibRVCyiWo-GMGnnvxSo6DrN9oKdTAeEPVG5xNrPi-P-4CwJMcjvWHubQyS5T3uoFvVRJAayWqD2VxILEBQM.webp)
Die auffälligste und wichtigste Änderung ist die Hinzufügung von Zeile 315, mit der die Umgehung der Autorisierungs- und Authentifizierungsregeln behoben wird. Sie stellt sicher, dass jedem Pfadmuster, das übermittelt wird, ein Schrägstrich (/) vorangestellt wird.
404 Treffer nicht gefunden
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/64400baee212a629597bdc40_code-block-2.webp)
Beim Senden einer Webanforderung an /bankaccounts/view wird die Match-Methode die im Sicherheitsfilter definierten Muster analysieren und mit dem angeforderten Pfad vergleichen. Der Parser wandelt das angegebene Muster in einen Baum von Pfadelementen um.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/643fc8c71437d0b2cc8c6914_%3Abankaccounts%3Aview.webp)
Der Parser liest das erste Zeichen als SeparatorPathElement. Er setzt dann das Lesen der Zeichenfolgen bis zum nächsten Trennzeichen fort und erstellt ein neues LiteralPathElement.
Was läuft also schief, wenn ** als Muster verwendet wird?
Es gibt zwar eine Vielzahl von Pfadelementtypen, aber die interessantesten sind das WildcardPathElementund das WildcardTheRestPathElement mit ihren jeweiligen Zeichenkettendarstellungen: * und /**.
Ein WildcardPathElement stimmt mit null oder mehr Zeichen innerhalb eines einzelnen Pfadsegments überein, während ein WildcardTheRestPathElement mit null oder mehr Pfadsegmenten allein übereinstimmt (einschließlich der Trennzeichen).
Letzteres gibt uns einen Hinweis darauf, was falsch läuft, wenn ** als Muster eingegeben wird. Beim Parsen wird nach Mustern gesucht, aber ** beginnt nicht mit dem erwarteten Schrägstrich. Anstatt also ein WildcardTheRestPathElement zu werden, wird es zu zwei aufeinanderfolgenden WildcardPathElementen.
Anschließend wird das geparste Muster zum Abgleich mit der angeforderten URL verwendet. Es wird erwartet, dass Pfade mit einem Schrägstrich beginnen, aber ein Platzhalter passt nicht auf Trennzeichen.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/644259043d142e4380b218d6_code-block-3.webp)
Dies bedeutet, dass anstelle eines RequestMatchResult ein Nullwert zurückgegeben wird. Folglich werden die Zugriffskontrollregeln, die diesem Abgleicher zugewiesen wurden, nicht auf die angeforderte URL angewendet.
Spring hat das Problem behoben, indem ein Schrägstrich vorangestellt wurde. Mit anderen Worten: Jedes **-Muster wird zu /**, d. h. es kann als WildcardTheRestPathElement geparst werden, und es wird ein RequestMatchResult zurückgegeben, da das Muster nun mit der angeforderten URL übereinstimmt.
Schwachstelle oder API-Missbrauch?
Es ist fraglich, ob dies als Schwachstelle betrachtet werden sollte, da der Code wie vorgesehen funktioniert. Das Problem liegt im Wesentlichen darin, dass in der Spring-Dokumentation nicht ausdrücklich erwähnt wird, dass Pfade mit einem Trennzeichen beginnen sollten. Daher könnte es eher als ein Fall von API-Missbrauch und nicht als ein Fehler oder eine Schwachstelle angesehen werden.
CVE-2023-20860 Auftrag
Probieren Sie unsere Mission aus, um die Auswirkungen selbst zu erleben und zu lernen, wie Sie ähnliche Fehler vermeiden können.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/643fcc013cfe7a5ea12bde76_Spring-Mission-CTA-Image.webp)
Ressourcen für den Einstieg
Vertrauensperson von Secure Code Warrior
Entdecken Sie den SCW Trust Agent, eine innovative Lösung, die die Sicherheit erhöht, indem sie die Kenntnisse und Fähigkeiten von Entwicklern in Bezug auf sicheren Code mit der von ihnen übertragenen Arbeit in Einklang bringt. Er bietet umfassende Transparenz und Kontrolle über das gesamte Code-Repository eines Unternehmens, indem er jeden Commit mit den sicheren Code-Profilen der Entwickler abgleicht. Mit SCW Trust Agent können Unternehmen ihre Sicherheitslage verbessern, die Entwicklungszyklen optimieren und die entwicklergesteuerte Sicherheit skalieren.
Trust Score von Secure Code Warrior
Entdecken Sie den SCW Trust Score, ein branchenweit einzigartiges Benchmarking zur Messung der Effektivität Ihres Sicherheitsprogramms. Vergleichen Sie sich mit Branchenkollegen, optimieren Sie Ihre Sicherheitslage und treffen Sie datengestützte Entscheidungen für eine verbesserte Software-Sicherheit.
Ressourcen für den Einstieg
Frauen in der Sicherheitsbranche sind auf dem Vormarsch: Wie die AWSN eine neue Generation von Superfrauen im Sicherheitsbereich hervorbringt
Secure-by-Design ist die neueste Initiative, die in aller Munde ist, und die australische Regierung, die mit der CISA auf den höchsten Ebenen der Global Governance zusammenarbeitet, fordert von den Anbietern einen höheren Standard für Softwarequalität und -sicherheit.
Frauen in der Sicherheitsbranche sind auf dem Vormarsch: Wie die AWSN eine neue Generation von Superfrauen im Sicherheitsbereich hervorbringt
Secure-by-Design ist die neueste Initiative, die in aller Munde ist, und die australische Regierung, die mit der CISA auf den höchsten Ebenen der Global Governance zusammenarbeitet, fordert von den Anbietern einen höheren Standard für Softwarequalität und -sicherheit.
SCW Trust Agent - Sichtbarkeit und Kontrolle zur Skalierung der entwicklergesteuerten Sicherheit
Der von Secure Code Warrior vorgestellte SCW Trust Agent bietet Sicherheitsverantwortlichen die Transparenz und Kontrolle, die sie für die Skalierung der entwicklergesteuerten Sicherheit in Unternehmen benötigen. Durch die Verbindung mit Code-Repositories wertet er Code-Commit-Metadaten aus, prüft Entwickler, verwendete Programmiersprachen und Zeitstempel für den Versand, um das Sicherheitswissen der Entwickler zu ermitteln.
Ist Ihr Sicherheitsprogramm bereit für den CISA-Strategieplan für Cybersicherheit?
Der Strategische Plan für Cybersicherheit sieht weitreichende Änderungen in der Art und Weise vor, wie die meisten Unternehmen an die Cybersicherheit herangehen, und Entwickler befinden sich in einer einzigartigen Position, um zur Erreichung dieser neuen Ziele beizutragen.
Ein genauerer Blick auf die mvcRequestMatcher Spring-Schwachstelle
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/643fc914018b33e1cad58645_Spring-vulnerability-blog-image.webp)
Am 20. März 2023 veröffentlichte Spring Security Advisories einen Blogbeitrag, der sich auf eine intern entdeckte Sicherheitslücke CVE-2023-20860 bezog. Es wurden keine detaillierten Informationen bekannt gegeben, außer dass es sich um ein Problem der Zugriffskontrolle bei der Verwendung von mvcMatchers handelt. Die Spring-Entwickler haben das Problem behoben, und es wird ein Versionsupdate empfohlen.
Möchten Sie eine Erfahrung aus erster Hand machen? Probieren Sie die Mission hier aus.
Da Sicherheit unser Hauptaugenmerk bei Secure Code Warriorist, haben wir uns entschlossen, diese mvcRequestMatchers-Schwachstelle genauer zu untersuchen und herauszufinden, wo das Kernproblem liegt.
Spring bietet die RequestMatcher-Schnittstelle, um festzustellen, ob eine Anfrage mit einem Pfadmuster übereinstimmt. Schauen Sie sich den folgenden Codeausschnitt an, in dem die Hilfsmethode mvcMatchers verwendet wird, um die Endpunkte zusammen mit ihren Authentifizierungs- und Autorisierungsanforderungen zu registrieren. Zum Beispiel können wir sehen, dass nur Benutzer mit der Rolle ADMIN auf den Endpunkt /logs/audit zugreifen können.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/64400b95059a87dfdb10e86b_code-block-1.webp)
MvcMisMatchers?
In Spring ist ** ein Muster, das mit einer beliebigen Anzahl von Verzeichnissen und Unterverzeichnissen in einer URL übereinstimmt. Zum Beispiel würde /bankaccount/** allen URLs entsprechen, die mit /bankaccount/ beginnen, einschließlich Unterverzeichnissen wie /bankaccount/dashboard/settings.
Das *-Muster ist ein Muster, das mit jeder URL übereinstimmt und genau eine Ebene eines Unterverzeichnisses hat. Zum Beispiel würde /bankaccount/* auf bankaccount/dashboard passen .
Bei der Konfiguration der Matcher mit * stellt Spring fest, dass "eine Fehlanpassung beim Pattern-Matching zwischen Spring Security und Spr ing MVC" stattgefunden hat, wodurch die Schwachstelle entstand.
Da dem doppelten Platzhalter kein Trennzeichen vorangestellt ist, passt der Pfad nicht zu einer eingehenden Anfrage, da allen eingehenden Anfragen ein Schrägstrich vorangestellt wird. Dies bedeutet, dass die Zugriffskontrollregeln nicht angewendet werden und jeder nicht authentifizierte Benutzer auf die Ressourcen zugreifen kann.
Werfen wir einen Blick auf den Commit, der das Problem behoben hat.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/643fc7d3e1ca1a5117329c74_f24b5spYh-5YSUWbTgjOR873kwe9Zokg7HcNdv-NJasWTBytgNbrt0AZGaNNBOCKUuasibRVCyiWo-GMGnnvxSo6DrN9oKdTAeEPVG5xNrPi-P-4CwJMcjvWHubQyS5T3uoFvVRJAayWqD2VxILEBQM.webp)
Die auffälligste und wichtigste Änderung ist die Hinzufügung von Zeile 315, mit der die Umgehung der Autorisierungs- und Authentifizierungsregeln behoben wird. Sie stellt sicher, dass jedem Pfadmuster, das übermittelt wird, ein Schrägstrich (/) vorangestellt wird.
404 Treffer nicht gefunden
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/64400baee212a629597bdc40_code-block-2.webp)
Beim Senden einer Webanforderung an /bankaccounts/view wird die Match-Methode die im Sicherheitsfilter definierten Muster analysieren und mit dem angeforderten Pfad vergleichen. Der Parser wandelt das angegebene Muster in einen Baum von Pfadelementen um.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/643fc8c71437d0b2cc8c6914_%3Abankaccounts%3Aview.webp)
Der Parser liest das erste Zeichen als SeparatorPathElement. Er setzt dann das Lesen der Zeichenfolgen bis zum nächsten Trennzeichen fort und erstellt ein neues LiteralPathElement.
Was läuft also schief, wenn ** als Muster verwendet wird?
Es gibt zwar eine Vielzahl von Pfadelementtypen, aber die interessantesten sind das WildcardPathElementund das WildcardTheRestPathElement mit ihren jeweiligen Zeichenkettendarstellungen: * und /**.
Ein WildcardPathElement stimmt mit null oder mehr Zeichen innerhalb eines einzelnen Pfadsegments überein, während ein WildcardTheRestPathElement mit null oder mehr Pfadsegmenten allein übereinstimmt (einschließlich der Trennzeichen).
Letzteres gibt uns einen Hinweis darauf, was falsch läuft, wenn ** als Muster eingegeben wird. Beim Parsen wird nach Mustern gesucht, aber ** beginnt nicht mit dem erwarteten Schrägstrich. Anstatt also ein WildcardTheRestPathElement zu werden, wird es zu zwei aufeinanderfolgenden WildcardPathElementen.
Anschließend wird das geparste Muster zum Abgleich mit der angeforderten URL verwendet. Es wird erwartet, dass Pfade mit einem Schrägstrich beginnen, aber ein Platzhalter passt nicht auf Trennzeichen.
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/644259043d142e4380b218d6_code-block-3.webp)
Dies bedeutet, dass anstelle eines RequestMatchResult ein Nullwert zurückgegeben wird. Folglich werden die Zugriffskontrollregeln, die diesem Abgleicher zugewiesen wurden, nicht auf die angeforderte URL angewendet.
Spring hat das Problem behoben, indem ein Schrägstrich vorangestellt wurde. Mit anderen Worten: Jedes **-Muster wird zu /**, d. h. es kann als WildcardTheRestPathElement geparst werden, und es wird ein RequestMatchResult zurückgegeben, da das Muster nun mit der angeforderten URL übereinstimmt.
Schwachstelle oder API-Missbrauch?
Es ist fraglich, ob dies als Schwachstelle betrachtet werden sollte, da der Code wie vorgesehen funktioniert. Das Problem liegt im Wesentlichen darin, dass in der Spring-Dokumentation nicht ausdrücklich erwähnt wird, dass Pfade mit einem Trennzeichen beginnen sollten. Daher könnte es eher als ein Fall von API-Missbrauch und nicht als ein Fehler oder eine Schwachstelle angesehen werden.
Ressourcen für den Einstieg
Frauen in der Sicherheitsbranche sind auf dem Vormarsch: Wie die AWSN eine neue Generation von Superfrauen im Sicherheitsbereich hervorbringt
Secure-by-Design ist die neueste Initiative, die in aller Munde ist, und die australische Regierung, die mit der CISA auf den höchsten Ebenen der Global Governance zusammenarbeitet, fordert von den Anbietern einen höheren Standard für Softwarequalität und -sicherheit.
SCW Trust Agent - Sichtbarkeit und Kontrolle zur Skalierung der entwicklergesteuerten Sicherheit
Der von Secure Code Warrior vorgestellte SCW Trust Agent bietet Sicherheitsverantwortlichen die Transparenz und Kontrolle, die sie für die Skalierung der entwicklergesteuerten Sicherheit in Unternehmen benötigen. Durch die Verbindung mit Code-Repositories wertet er Code-Commit-Metadaten aus, prüft Entwickler, verwendete Programmiersprachen und Zeitstempel für den Versand, um das Sicherheitswissen der Entwickler zu ermitteln.
Vertrauensperson von Secure Code Warrior
Entdecken Sie den SCW Trust Agent, eine innovative Lösung, die die Sicherheit erhöht, indem sie die Kenntnisse und Fähigkeiten von Entwicklern in Bezug auf sicheren Code mit der von ihnen übertragenen Arbeit in Einklang bringt. Er bietet umfassende Transparenz und Kontrolle über das gesamte Code-Repository eines Unternehmens, indem er jeden Commit mit den sicheren Code-Profilen der Entwickler abgleicht. Mit SCW Trust Agent können Unternehmen ihre Sicherheitslage verbessern, die Entwicklungszyklen optimieren und die entwicklergesteuerte Sicherheit skalieren.