Express Prototype Pollution Gadgets
Dien XSS antwoorde aan
Vir verdere besonderhede kyk na die oorspronklike navorsing
Verander JSON inhouds tipe na HTML
In 'n Express-app wat 'n JSON inhouds tipe antwoord gebruik en 'n JSON reflekteer:
In hierdie gevalle is XSS normaalweg nie moontlik met 'n JSON-inhouds tipe nie. egter, met prototipe besoedeling kan ons Express verwar om 'n HTML-antwoord te dien. Hierdie kwesbaarheid is afhanklik van die toepassing wat res.send(obj)
gebruik en die liggaam parser met die toepassing/json-inhouds tipe.
Deur body
en _body
eienskappe te pollute, is dit moontlik om Express te dwing om die HTML inhoud tipe te bedien en die _body
eienskap te reflekteer, wat lei tot gestoor XSS.
Render UTF7
Dit is moontlik om express UTF-7 inhoud te laat render met:
Veilige Scanning Tegnieke
JSON spasie
Die volgende PP sal eienskappe binne 'n JSON 'n ekstra spasie gee wat die funksionaliteit nie sal breek nie:
Dan sal 'n weerspieëlde JSON soos volg lyk:
Blootgestelde Koppe
Die volgende PP-gadget sal die bediener laat terugstuur die HTTP-kop: Access-Control-Expose_headers: foo
Dit vereis dat die CORS-module geïnstalleer moet wees
OPTIONS Metode
Met die volgende payload is dit moontlik om 'n metode uit 'n OPTIONS-antwoord te verberg:
Status
Dit is moontlik om die teruggegee statuskode te verander met die volgende PP payload:
Fout
Wanneer jy aan 'n prototipe met 'n primitiewe soos 'n string toewys, produseer dit 'n geen-operasie nie, aangesien die prototipe 'n objek moet wees. As jy probeer om 'n prototipe objek aan die Object.prototype
self toe te wys, sal dit 'n uitsondering gooi. Ons kan hierdie twee gedrag gebruik om te detecteer of prototipe besoedeling suksesvol was:
Reflected Value
Wanneer 'n toepassing 'n objek in sy antwoord insluit, kan dit insiggewend wees om 'n attribuut met 'n ongewone naam saam met __proto__
te skep. Spesifiek, as slegs die ongewone attribuut in die antwoord teruggestuur word, kan dit die toepassing se kwesbaarheid aandui:
Boonop, in scenario's waar 'n biblioteek soos Lodash gebruik word, bied die instelling van 'n eienskap sowel via prototipe besoedeling (PP) as direk binne die objek 'n ander diagnostiese benadering. As so 'n eienskap uit die antwoord weggelaat word, dui dit daarop dat Lodash die bestaan van die eienskap in die teikenobjek verifieer voordat dit saamgevoeg word:
Misc
Laat Punte Toe
Daar is 'n opsie in Express wat jou toelaat om objekte uit navraagstring parameters te skep. Jy kan dit beslis in 'n fout ketting gebruik om 'n prototype besmetting kwesbaarheid te benut.
?foo.bar=baz
skep 'n objek in Node.
Verwysings
Last updated