Sikkerhedshuller i Java-framework

Spring-frameworket indeholder brister, som kan give angribere mulighed for at overtage kontrollen med en Java-applikation.

Sikkerhedsfirmaet The Ounce Labs Advanced Research Team (ART) har fundet fejl i Java-frameworket Spring, som kan gøre det muligt for hackere at overtage en applikation.

Sikkerhedsbristerne har fået navnene "ModelView Injection" and "Data Submission to Non-Editable Fields," skriver Application Development Trends.

De to sårbarheder giver mulighed for at angribere kan undergrave programlogikken og overtage kontrollen med applikationen. Det kan benyttes til at skaffe adgang til alle data i programmet, så som brugeroplysninger og nøgler.

Ifølge ARTs videnskabelige chef Ryan Berg er hullerne symptom på et generelt problem med frameworks i softwareudvikling. Der er ikke megen synlighed med hensyn til frameworkets indre opførsel, mener han. Det betyder, at det er svært at gennemskue frameworkets sikkerhedsmæssige implikationer.

Spring-frameworket er blandt de ledende af slagsen, med mere end fem millioner downloads på bagen. Det betyder, at sårbarhederne kan berøre tusindvis af virksomheder, mener Ryan Berg.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (1)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#1 Jeppe Cramon

Problemet gælder ikke kun Spring MVC eller Java for den sags skyld. Alle action baserede MVC frameworks der bruges med "Exposed Domain Model" designpatternet (som er populært i forbindelse med Ruby on Rails, Grails, Stripes, Struts2, etc.) har problemet.

Lige som SQL injection, er der med Exposed Domain Model, problemer hvis man upåagtet tillader web form data at blive bindet og dermed persisteret uden kontrol.

I "gamle" dage var det normalt man havde et Form backing object der var en 1-1 spejling af de data man kunne taste ind i formen (f.eks. Struts). Så der eksisterede problemet ikke.

Med introduktionen med "transparent" persistens af domæne objekter (vha. Hibernate, ActiveRecord, etc.) er det oplagt at binde web form data direkte til domæne modellens properties, aka. Exposed Domain Model.

Eksempel: ...

Når JSP, GSP, RSP, etc. siden bliver renderet til HTML bliver dataene fra domæne automatisk skrevet ud i HTML input objektets value felt. Når formen bliver submittet igen, bliver form dataene bundet direkte tilbage til domæne objektet. Nemt og lækkert :) Men også med en sikkerheds konsekvens. There's no free lunch ;-)

Hvad hvis en "ond" bruger nu sender et ekstra form felt med tilbage, f.eks. "user.passwordHint" (biding til password burde ikke give problemer da password bør være en sikker hashværdi af brugerens virkelige password), "user.activated" eller "user.account.balance". Pludselig er der persisteret data i domæne modellen som ikke var tilsigtet.

"Exposed Domain Model" er et godt design princip, men for at det er "sikkert", bør det understøttes af MVC frameworket, således at der er kontrol over hvad man må binde til. Der er mange måder hvor på man kan gøre det. Den bedste/nemmeste løsning jeg har set indtil videre er i Stripes (http://www.stripesframework.org) som i version 1.5 har introduceret @StrictBinding og @DontBind annoteringerne.

F.eks. @StrictBinding(allow={"user.firstName", "user.lastName"})

@StrictBinding(allow="user.*", deny="user.activated")

@StrictBinding(allow="user.**")

@StrictBinding(defaultPolicy=Policy.ALLOW, deny="user.activated")

/Jeppe

  • 0
  • 0
Log ind eller Opret konto for at kommentere