image

Oracle waarschuwt voor zero day-lek in WebLogic Server

woensdag 11 november 2015, 11:03 door Redactie, 9 reacties

Softwarebedrijf Oracle heeft een waarschuwing afgegeven voor een zero day-lek in Oracle WebLogic Server en de Apache Commons Library, waardoor een aanvaller kwetsbare Weblogic Servers kan overnemen en een beveiligingsupdate is nog niet beschikbaar.

Het probleem wordt veroorzaakt door een kwetsbaarheid in de Apache Commons Library. Dit is een project van de Apache Software Foundation en biedt een aantal veelgebruikte Java-onderdelen. Verschillende producten van Oracle, alsmede andere softwareleveranciers en opensourcesoftwareprojecten, maken van deze bibliotheek gebruik. Op internet is nu uitgebreide informatie over de kwetsbaarheid verschenen en hoe die is te gebruiken.

Naast Oracle WebLogic Server speelt het probleem ook bij de WebSphere Application Server, JBoss Application Server, Jenkins en OpenNMS. In het geval van Weblogic Server is de kwetsbaarheid op afstand aan te vallen en vereist geen authenticatie. In het geval de aanval succesvol is kan de aanvaller willekeurige code binnen Oracle WebLogic Server uitvoeren. In afwachting van een noodpatch heeft Oracle tijdelijk advies online gezet en adviseert klanten om de update, zodra die beschikbaar is, zo snel als mogelijk te installeren.

Reacties (9)
11-11-2015, 13:28 door Anoniem
En uiteraard - typisch Oracle - de mitigerende info achter een login-drempel zetten. Betaal je je blauw aan licentie-kosten, moet je nog veel moeite doen om aan die bedrijfskritische informatie te komen; dit soort kritieke info achter een login-drempel plaatsen laat weer duidelijk zien dat HOrrorcle security nog steeds niet snapt; nog even los van het feit dat de 0-day stiekem al 9 maanden oud is; maar blijkbaar liep Oracle ook te slapen ...
11-11-2015, 17:00 door Erik van Straten
11 november 2015, 11:03 door Redactie:
[...]
Het probleem wordt veroorzaakt door een kwetsbaarheid in de Apache Commons Library.
[...]
Dat lijkt in eerste instantie het geval, maar is onjuist. Libraries kunnen nou eenmaal functies bevatten die trusted input verwachten, omdat ze anders niet kunnen functioneren en/of te traag zijn.

De kwetsbaarheid hier is dat user-input wordt geïnterpreteerd voordat deze is gevalideerd; tijdens deserialisation kan er al code worden uitgevoerd. M.a.w. wat hier ontbreekt is valideren (UK:sanitisation /US:sanitization) van user input; http://www.ibm.com/developerworks/library/se-lookahead/ beschrijft hoe dit zou kunnen werken.

Het fixen of uitschakelen van de Apache Commons library lost dit ene probleem misschien even op, maar met de schijnwerpers op dit onderwerp verwacht ik meer vergelijkbare lekken in allerlei libraries.

En het gaat hierbij niet alleen om Java, maar om alle user-supplied-input zoals XML (zie bijv. Google: XML XXE) en JSON (zie bijv. https://www.owasp.org/index.php/OWASP_JSON_Sanitizer).

Wat WebLogic mogelijk niet helpt is het volgende, uit http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/:
November 6, 2015, by @breenmachine:
[...]
The exploit runs against the default install on port 7001 – the default and only listening port. WebLogic is kind of cool because it proxies all requests through this port, HTTP, SNMP, T3, and a few other protocols. Depending what protocol it detects it as, it routes it to the right place.

With that said, it’s possible that this vulnerability could be used against WebLogic servers on the Internet due to the fact that it’s unlikely a firewall will get in your way.
[...]

Meer info:
- Bekijk de (10 maanden oude) slides van Chris Frohoff https://frohoff.github.io/appseccali-marshalling-pickles/
- Apache reactie: https://blogs.apache.org/foundation/entry/apache_commons_statement_to_widespread
- https://jenkins-ci.org/content/mitigating-unauthenticated-remote-code-execution-0-day-jenkins-cli en https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+Advisory+2015-11-11
11-11-2015, 18:20 door [Account Verwijderd]
[Verwijderd]
11-11-2015, 23:32 door karma4
Door Erik van Straten: De kwetsbaarheid hier is dat user-input wordt geïnterpreteerd voordat deze is gevalideerd; tijdens deserialisation kan er al code worden uitgevoerd. M.a.w. wat hier ontbreekt is valideren (UK:sanitisation /US:sanitization) van user input.
Wat je zegt is: https://www.owasp.org/index.php/Data_Validation niet juist zou zijn.
Dat lijkt in eerste instantie het geval, maar is onjuist. Libraries kunnen nou eenmaal functies bevatten die trusted input verwachten, omdat ze anders niet kunnen functioneren en/of te traag zijn.
Het argument van te traag of niet kunnen werken mag nooit een argument zijn om het dan meer op de verkeerde onveilige manier te doen. Echte security begint als een onderdeel in het fundament/basis. Niet iets wat je achteraf wel bekijkt.
12-11-2015, 02:07 door Anoniem
Door Erik van Straten:
11 november 2015, 11:03 door Redactie:
Dat lijkt in eerste instantie het geval, maar is onjuist. Libraries kunnen nou eenmaal functies bevatten die trusted input verwachten, omdat ze anders niet kunnen functioneren en/of te traag zijn.

Of omdat de ontwikkelaar geen benul had dat je invoer moet valideren. Er lijkt met geen woord gerept dat deze library trusted input verwacht. Als een ontwikkelaar het al in het hoofd haalt om na te laten geen input validatie te implementeren dan mag je op zijn minst verwachten dat deze bewuste keuze kenbaar is gemaakt zodat ieder die de library wil gebruiken niet eerst zelf een code review hoeft te doen of die library wel veilig is.

Het fixen of uitschakelen van de Apache Commons library lost dit ene probleem misschien even op, maar met de schijnwerpers op dit onderwerp verwacht ik meer vergelijkbare lekken in allerlei libraries.
Vanwaar deze redenatie? Bijna dagelijks worden er meldingen gedaan van lekken in libraries. Dit lek was zelfs 9 maanden bekend maar niemand die er iets om gaf. En om er gebruik van te maken van een security bug in een library ben je meestal afhankelijk van zowel de specifieke implementatie van de library in de applicaties en de plaats waar dan de kwetsbare functie nog wordt toegepast in die applicatie zonder dat die applicatie nog verdere risico's wegneemt. Zoals je zelf al aangaf, libraries gaan nogal eens te makkelijk met input om en dat weten ontwikkelaars van applicaties vaak ook.

Ik hoop persoonlijk dat de kopers van producten van bijvoorbeeld Oracle en IBM, die met WebLogic en WebSphere kwetsbaar zijn, eindelijk eens gaan verhalen waarom ze zelfs na 9 maanden nog geen oplossing hebben geboden en het risico niet aan hun kopers gemeld hebben. Kennelijk vinden dat soort partijen het niet heel belangrijke om unauthenticated remote code execution bij hun klanten tegen te gaan. Maar het grote afschuiven is al begonnen, het is de schuld van de library.
12-11-2015, 08:13 door Erik van Straten
11-11-2015, 24:32 door karma4:
Door Erik van Straten: De kwetsbaarheid hier is dat user-input wordt geïnterpreteerd voordat deze is gevalideerd; tijdens deserialisation kan er al code worden uitgevoerd. M.a.w. wat hier ontbreekt is valideren (UK:sanitisation /US:sanitization) van user input.
Wat je zegt is: https://www.owasp.org/index.php/Data_Validation niet juist zou zijn.
Integendeel, https://www.owasp.org/index.php/Data_Validation#Where_to_include_validation stelt "validation should be performed as per the function of the server executing the code". Leg eens uit wat jij onjuist vindt aan mijn statement?

11-11-2015, 24:32 door karma4:
Dat lijkt in eerste instantie het geval, maar is onjuist. Libraries kunnen nou eenmaal functies bevatten die trusted input verwachten, omdat ze anders niet kunnen functioneren en/of te traag zijn.
Het argument van te traag of niet kunnen werken mag nooit een argument zijn om het dan meer op de verkeerde onveilige manier te doen. Echte security begint als een onderdeel in het fundament/basis. Niet iets wat je achteraf wel bekijkt.
Helaas, dat kan niet altijd. Bovendien laat het code exploderen - wat ook weer risico's met zich meerbrengt.

Een analogie: je kunt (voor zover ik weet) in bijdragen op dit forum geen Javascript opnemen zodanig dat deze door browsers van lezers wordt uitgevoerd. Echter, als je een account hebt kun je spammen wat je wilt; tekstueel inhoudelijke validatie (moderatie) vindt dan, zonodig, achteraf plaats.
Voor C kenners: strcpy() checkt niet of er buiten een buffer wordt geschreven. Sterker, strcpy() heeft geen flauw benul van buffers en checkt geen geheugenadressen; de functie kopieert gewoon (zo snel mogelijk) bytes vanaf adres 1 naar adres 2 totdat er een nul voorbij komt.
12-11-2015, 11:33 door Anoniem
Door Erik van Straten: Voor C kenners: strcpy() checkt niet of er buiten een buffer wordt geschreven. Sterker, strcpy() heeft geen flauw benul van buffers en checkt geen geheugenadressen; de functie kopieert gewoon (zo snel mogelijk) bytes vanaf adres 1 naar adres 2 totdat er een nul voorbij komt.
Secure coding best practices zijn in de eerste plaats bedoeld om in alle code, of het nu applicaties of libraries zijn, overal aandacht te hebben voor security. Net als dat er aandacht is voor performance etc. Best practice laat geen ruimte over om de validatie dan maar willekeurig in libraries weg te laten omdat het beter uit komt om security geheel aan de kant te schuiven. Uiteraard kan het beter uitkomen om bijvoorbeeld een security maatregel niet te implementeren, maar dan hoor je er als developer voor te zorgen dat het risico wordt onderkend. Laat er dan ook net heldere documentatie zijn ter waarschuwing dat die C functie zijn dat dit geen user input validation heeft. Een van de redenen voor best practice rules is dat je als gebruiker er vanuit moet kunnen gaan dat je elke willekeurige functie uit een librarie veilig moet kunnen gebruiken. Je stelling dat het onjuist is dat de kwetsbaarheid in de library zit verwerp ik daarom.
12-11-2015, 12:35 door Erik van Straten
Ik probeer jouw quoting te herstellen in mijn reactie:
12-11-2015, 02:07 door Anoniem:
11-11-2015,17:00 door Erik van Straten:
11 november 2015, 11:03 door Redactie:
[...]
Het probleem wordt veroorzaakt door een kwetsbaarheid in de Apache Commons Library.
[...]
Dat lijkt in eerste instantie het geval, maar is onjuist. Libraries kunnen nou eenmaal functies bevatten die trusted input verwachten, omdat ze anders niet kunnen functioneren en/of te traag zijn.
Of omdat de ontwikkelaar geen benul had dat je invoer moet valideren.
Jouw "Of" begrijp ik niet helemaal: wat mij betreft moet een ontwikkelaar input valideren (niet alleen om te voorkomen dat untrusted input tot code execution kan leiden). Een ontwikkelaar die niet weet dat je input hoort te valideren is een amateur.

12-11-2015, 02:07 door Anoniem: Er lijkt met geen woord gerept dat deze library trusted input verwacht. Als een ontwikkelaar het al in het hoofd haalt om na te laten geen input validatie te implementeren dan mag je op zijn minst verwachten dat deze bewuste keuze kenbaar is gemaakt zodat ieder die de library wil gebruiken niet eerst zelf een code review hoeft te doen of die library wel veilig is.
Lastig in dit kader is dat de input zo wordt gemanipuleerd dat, onverwacht door de programmeur, een library wordt gebruikt die toevallig in het classpath staat. Dit type aanval was, voor zover ik weet, tot voor kort vrij onbekend; de ontdekkingen van Chris Frohoff et al. hebben niet de aandacht gekregen die ze verdienden. Echter, ik stel voor dat we er lessen uit trekken en geen tijd verspillen aan de schuldvraag.

Daarnaast heb je natuurlijk gelijk dat het heel handig zou zijn als van library-functies gedocumenteerd zou zijn of ze "veilig" zijn of niet, maar het is natuurlijk wel erg lastig om te documenteren wat een functie allemaal niet doet.

Als programmeur kun je dan ook niet anders dan ervan uitgaan dat, als specifieke functionaliteit (waaronder input validatie) in code van derden niet is gedocumenteerd, deze waarschijnlijk niet aanwezig zal zijn. Vaak is het helemaal niet zo moeilijk om te testen hoe functies reageren op onverwachte input [*] (d.w.z. bewust gemanipuleerde of legitieme doch beschadigde input, maar ook legitieme input uit andere software met een later versienummer dan waarmee wordt getest).

En dat is exact wat programmeurs en testers in veel te veel gevallen nalaten; er wordt alleen getest of iets werkt zoals bedoeld, en niet hoe het systeem zich gedraagt bij onverwachte, eventueel kwaadaardige, input. Voor steeds meer systemen verschijnt fuzzing software; het argument dat er geen tools voor bestaan gaat vaak niet meer op.

[*] probeer in C++ eens strcpy(0,0).

12-11-2015, 02:07 door Anoniem:
11-11-2015,17:00 door Erik van Straten: Het fixen of uitschakelen van de Apache Commons library lost dit ene probleem misschien even op, maar met de schijnwerpers op dit onderwerp verwacht ik meer vergelijkbare lekken in allerlei libraries.
Vanwaar deze redenatie? Bijna dagelijks worden er meldingen gedaan van lekken in libraries. Dit lek was zelfs 9 maanden bekend maar niemand die er iets om gaf. En om er gebruik van te maken van een security bug in een library ben je meestal afhankelijk van zowel de specifieke implementatie van de library in de applicaties en de plaats waar dan de kwetsbare functie nog wordt toegepast in die applicatie zonder dat die applicatie nog verdere risico's wegneemt. Zoals je zelf al aangaf, libraries gaan nogal eens te makkelijk met input om en dat weten ontwikkelaars van applicaties vaak ook.
Je hebt gelijk dat ik lekken tussen aanhalingstekens had moeten zetten, want het is op z'n minst discutabel of het hier gaat om een lek in een library (zie ook de, al eerder door mij genoemde, reactie van Apache in https://blogs.apache.org/foundation/entry/apache_commons_statement_to_widespread).
13-11-2015, 08:07 door karma4 - Bijgewerkt: 13-11-2015, 19:40
Door Erik van Straten: Integendeel... stelt "validation should be performed as per the function of the server executing the code". Leg eens uit wat jij onjuist vindt aan mijn statement?

Zoals het er staat: De validatie moet uitgevoerd worden binnen de api/server waar code uitgevoerd wordt. De validatie hoort niet bij de aanroepende partij/gebruiker te liggen.
Dat de validatie die ontbreekt in de commons library een fout is. Wat voor fout is een ander verhaal. Daar kun je hele boeken over vullen. (software engineering)
Ik was het niet, maar:
Door Anoniem:
Een van de redenen voor best practice rules is dat je als gebruiker er vanuit moet kunnen gaan dat je elke willekeurige functie uit een librarie veilig moet kunnen gebruiken. Je stelling dat het onjuist is dat de kwetsbaarheid in de library zit verwerp ik daarom.
Heeft het uitstekend verwoord.


Door Erik van Straten: Helaas, dat kan niet altijd. Bovendien laat het code exploderen - wat ook weer risico's met zich meerbrengt.
Is dat echt zo of is er meer gebrek aan kennis en ervaring. Eenvoud is het kenmerk van het ware daarom is het ook zo lastig om alles tot de essentie terug te brengen.

Voor C kenners: setenv() geeft een environment-blok als string door. Je kan ook snel een hele shell aanroepen. Op het punt van root (high privileged) naar een meer restricted (web-server) kun je keuzes maken. Veiliger wegens beperktere functionaliteit is setenv() en fork() met meer, makkelijker is shell. Zie hier de shellchock by design.
http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html

De strcpy staat http://pubs.opengroup.org/onlinepubs/9699919799/functions/strcpy.html#tag_16_571 met als commentaar: "APPLICATION USAGE
- Character movement is performed differently in different implementations. Thus, overlapping moves may yield surprises.
- This version is aligned with the ISO C standard; this does not affect compatibility with XPG3 applications. Reliable error detection by this function was never guaranteed"
Geen betrouwbare errordetectie en verassingen bij implementaties. Daar wil jij een betrouwbaar systeem van maken? Het is peek and poke gedoe met embedded assembler instructies. Je kan het werekend krijgen niet veilig vanuit de basis.

Ik ken het verhaal van de mvc/mvcl 360 assembler instructie. Gedefinieerd als byte voor byte copy van links naar rechts. Dat werd latern als een ontwerpfout gezien. Op het moment dat met 16 32 en 64bit gewerkt werd was dat een vervelend blok aan het been geworden omdat zo veel programmeur van dat links naar rechts per byte gebruikt gemaakt hadden dat ze nooit meer van dat byte/8bit per verwerking af kwamen.


Als je bij acos en atan kijkt zie dat deze wel een goede fout/return beschrijving hebben, Ja zo iets kost overhead en maakt het trager. Daarvoor heb je dan weer aparte func/api's die sneller kunnen zijn in bepaalde situaties. Alles heeft zijn prijs en betrouwbaarheid versus snelheid van uitvoering is er een van.
Wat heeft uw voorkeur veilig maar langzaam of snel en onbetrouwbaar?
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.