Nieuwe kwetsbaarheid in Apache Struts maakt uitvoeren code op afstand mogelijk

Op internet is exploitcode verschenen om misbruik te maken van een kwetsbaarheid in Apache Struts. De Apache Software Foundation heeft het lek deze week gedicht en bedrijven wordt aangeraden snel te updaten.

Voor een succesvolle aanval hoeft een kwaadwillende alleen de juiste request via een browser naar een site die een kwetsbare Apache Struts-installatie draait te sturen. Vervolgens kan diegene code uitvoeren op de server en bijvoorbeeld bij bestanden en databases komen. Niet elke Apache Struts-installatie is kwetsbaar. Het hangt af van de configuratie, meldt het Semmle-beveiligingsteam, dat de kwetsbaarheid ontdekte.

De Apache Software Foundation publiceerde woensdag een patch voor het probleem, dat alle versies van Struts 2 treft. De update brengt Struts 2.3 naar versie 2.3.35 en Struts 2.5 naar 2.5.17. De kwetsbaarheid heeft de aanduiding CVE-2018-11776 gekregen.

Hoewel het risico op misbruik afhangt van de configuratie, wordt bedrijven aangeraden zo snel mogelijk te updaten naar de nieuwste versie. Semmle verwijst naar een schatting van vorig jaar dat 65 procent van de Amerikaanse Fortune 100-bedrijven webapplicaties gebruikt die zijn gemaakt met het Apache Struts-framework. Daarnaast wijst het bedrijf erop dat kwetsbare installaties makkelijk te vinden en te misbruiken zijn en dat een wijziging van de configuratie een aanvankelijk veilige installatie kwetsbaar kan maken.

De ernst van kwetsbaarheden in Apache Struts wordt geïllustreerd door de hack bij de Amerikaanse kredietbeoordelaar Equifax, een jaar geleden. Criminelen wisten de database van het bedrijf te benaderen via een toen al maanden bekend lek in Apache Struts. Daardoor kwamen gevoelige gegevens van miljoenen Amerikanen en Britten op straat te liggen.

Door Olaf van Miltenburg

Nieuwscoördinator

24-08-2018 • 09:57

21

Submitter: Muncher

Reacties (21)

Sorteer op:

Weergave:

Apache Struts heb ik sinds 2010 niet meer zien draaien. Leeft het nog steeds?
Het zijn legacy applicaties uit de jaren stilletjes toen java web applicaties nog boiler plate en log was. Het is voorbij gestoken door Spring ea met dependecy injection, inversion of control, ajax en web based applicaties.
Het behoort tot de lijst van frameworks waar een hoop applicaties in geschreven zijn, die niemand nog wilt aanpassen maar noodzakelijk zijn voor de business. En als een bedrijf geen geld heeft om ze te herschrijven blijven te draaien tot ze gehackt worden.

Struts wordt al jaren niet meer ontwikkeld, enkel security fixes en library updates. Zie https://struts.apache.org/releases.html voor de niet-ontwikkeling en de hoevelheid security updates.
Als je kijkt naar de kwaliteit van source code dan zie je waarom het niet veel meer gebruikt wordt (zou moeten worden). Het is een van de meeste amateuristische Apache applicaties, ik zou verwachten dat ze het snel deprecaten want het geeft Apache een slechte naam.
Kun je deze claim staven met voorbeelden en/of bronnen? Struts is natuurlijk al redelijk oud, maar dat wil nog niet per se zeggen dat de kwaliteit van de code slecht is. Zou kunnen maar zou daar dan graag wat meer informatie over willen zien dan alleen een kale claim.
Kwaliteit van de Java code is inderdaad niet buitengewoon goed volgens LGTM.com: https://lgtm.com/projects/g/apache/struts

Meer info over hoe LGTM kwaliteit van code bepaalt: https://lgtm.com/blog/code_quality_1

Dat wil overigens niet zeggen dat het een "amateuristische" applicatie is — dat zijn @MrBlues' woorden ;)

(full disclosure: ik werk voor Semmle)

[Reactie gewijzigd door Verwijderd op 22 juli 2024 23:01]

Shameless plug dus, maar toch bedankt, het is een mooi overzicht. In de graph lijken er niet zoveel alerts te zijn, dan een stuk of 3 alerts erbij dan weer eentje weg. Maar in de summary zie ik 152 alerts, hoe kan dat?

Edit: Ah zowel de makers van LGTM.com als het team dat het lek meldt, dat had ik ff niet gezien. Cool.

[Reactie gewijzigd door jimshatt op 22 juli 2024 23:01]

Je ziet natuurlijk maar een subset van de alerts omdat LGTM niet alle 12 jaar van Apache Struts geschiedenis geanalyseerd heeft! En gezien de afgenomen populariteit is er in de geanalyseerde 2 jaar niet zo bijzonder veel gebeurd. De meeste van die 152 alerts zijn dus al een stuk ouder.
Aaah, duidelijk. Tnx.
Ik kan je vertellen dat ik het in het bedrijfsleven nog regelmatig tegenkom.
Heel veel grote Apps zijn destijds in Struts geschreven. Dat zijn apps die niet elke paar jaar worden vervangen maar wel 10 jaar of langer mee kunnen gaan. Dus ja, er draaien nog best veel webapps op Struts.
Daar lijkt het wel op: https://www.scmagazine.co...h-equifax/article/764480/

Ik zie Struts zeer regelmatig terug in legacy applicaties die nog gewoon in grote organisaties draaien. Het was enkele jaren geleden het meest populaire framework om Java webapplicaties mee te bouwen, en een groot aantal van die applicaties draait gewoon nog.

(full disclosure: ik werk voor Semmle)

[Reactie gewijzigd door Verwijderd op 22 juli 2024 23:01]

3/4 van een bekende belgische sociale HR en administratie bevoegdheid draait nog op Struts, zelfs nog de Struts 1 versie ;)
Extra quote uit het security rapport van Semmle:
For your application to be vulnerable to the attack vectors described below, both of the following conditions should hold:
  • The alwaysSelectFullNamespace flag is set to true in the Struts configuration. Note that this is automatically the case if your application uses the popular Struts Convention plugin.
  • Your application uses actions that are configured without specifying a namespace, or with a wildcard namespace (e.g. “/*”). This applies to actions and namespaces specified in the Struts configuration file (e.g. <package namespace="main">), but also to actions and namespaces specified in Java code if you are using the Struts Convention plugin.
Men geeft er nog een extra disclaimer bij dat op varianten op hierop mogelijks nog gevonden kunnen worden. Vandaar dat men aandringt om bestaande software die gebruik maakt van Apache Struts te updaten.

[Reactie gewijzigd door Ravefiend op 22 juli 2024 23:01]

Wel raar dat ze alleen het advies zouden geven aan bedrijven om te updaten. Ik draai zelf persoonlijk ook een paar apache servers. Waarbij het ook zeker geen slecht idee is om snel te updaten.
Dit is apache struts, niet gewoon apache server...
Dat wist ik niet. Ik dacht dat dit de naam was die ze aan de huidige Apache 2 hadden gegeven.
Nee, zie Wikipedia: Apache Struts 2 of de website van Apache zelf.
Zou het updaten nu wel goed gaan of krijgen we straks een ander bedrijf met een groot datalek? :P
Het updaten veronderstelt dat je in de code de library versie aanpast, recompiled, test, nieuwe release maken, deployment plannen, de applicatie herstarten en zorgen dat je clients er geen last van hebben.

Gezien ze om de paar maand nieuwe security fixes doen (struts is een security ramp), is ander bedrijf met groot datalek het juiste antwoord
Ik snap het onderliggende punt wat je wil maken maar ik ben niet van mening dat dit een excuus mag zijn om je software niet up-to-date te houden. Als er zoveel security problemen met struts zijn mag een bedrijf toch wel eens na gaan denken over alternatieven. En daarnaast zijn er ook nog andere manieren om aanvallen tijdelijk tegen te gaan, denk bijvoorbeeld aan virtual patching. Zie ook OWASP Top 10 nummertje 9.

[Reactie gewijzigd door Archcry op 22 juli 2024 23:01]

Ik miste hier en daar wat details over wat voor code je dan kunt uitvoeren, maar dat staat dus wel in meer detail uitgelegd op de semmle site als je op dat kleine woordje "meldt" klikt in de tekst :)

Een duidelijk voorbeeld dat Struts net even teveel toeters en bellen bevat. Dat was vroegah ook wel een ding, er kwamen zoveel web frameworks uit dat ze een bestaansrecht moesten hebben en meer coole gemaksfeatures waren een goed verkooppunt.

En dan lees je dit:
Attackers can attack vulnerable applications by injecting their own namespace as a parameter in an HTTP request. The value of that parameter is insufficiently validated by the Struts framework, and can be any OGNL string. OGNL (“Object-Graph Navigation Language”) is a powerful domain-specific language that is used to customize Apache Struts’ behavior.
Dat klinkt echt als een "dat moet je niet willen" feature. Maar goed, achteraf is het makkelijk lullen.

Op dit item kan niet meer gereageerd worden.