Նախաբան

Բարև֊բարև, այսօր ուզում եմ խոսել մի քիչ pentesting սցենարներից` ինչ թեստել, երբ տեսնում ենք OAuth, առանց շա՜տ խորանալու, եկեք սկսենք։


Cases

OAuth bad state parameter checks, in account linking flow

“Account Linking” ասվածը այն է, երբ՝ կա հնարավորություն գրանցվելուց հետո, ավելացնել օրինակ Gmail/Facebook֊ով մուտք գործելու հնարավորություն։

Սենց օրինակ․՝

Հիմա նման կրիտիկական ֆունկցիաներում առաջին pentest idea-ն որ կարա գա, դա CSRF-ն է


թեստ 1.

ուղղակի burp-ով կարող եք բռնել

/callback?code=….&state=…

հարցումը, եթե state param չկա շատ վատ ա արդեն (եթե basic flow ա), հակառակ դեպքում

փորձում ենք ուղարկել հարցումը առանց state parameter-ի կամ այն փոփոխված, եթե հաշիվը կցվում ա, ապա դա արդեն խնդիր ա՝

հիշեք որ code-ը նախ մեկ անգամ ա գործում, ու բացի էդ էլ state ա փոխվում, այսինքն թեստելու համար reply attack-ները չեն գործի՝

ձեզ կարող ա թվալ, հանեցիք կցված FB հաշիվը, հիմա reply անեմ հարցումը state parameter-ը փոփոխված՝ տեսնելու եք չի աշխատում, մտածեք CSRF պաշտպանությունը state param-ի վրա նոռմալ ա, բայց իրականում դուք սխալ թեստ եք արել, մոռանալով որ ձեզ պետք էր թարմ գեներացված code param value, որը չի հասել երբեք callback-ին, նախորդ գրառման մեջ կարծեմ ասել եմ որ code-ը մեկ անգամ ա գործում, երբ հասնում ա Idp՝ server callback-ից, user-ի auth մանրամասների փոխանակաման համար


հաստատելու համար այսինքն, ցանկալի ա օգտագործել burp intercept-ը, եթե ուզում եք կարող եք ուղարկել replayer ու սաղ drop անեք, հետո էն տեղով հանգիստ փորձեք


թեստ 2․

Էս տեղ ենթադրվում ա որ կարա լինի վատ CSRF protection, ասենք էնպես, որ, user B-ի state param-ը կաշխատի նաև user A-ի համար,

սա թեստելու համար, նույն պրինցիպով intercept ենք անում, ուղարկում replayer ու drop անում՝ զուտ արդեն user B-ի state պարամետրով լինքը վերցնում ենք, ու paste անում բացում user A-ի սեսսիայով բրաուզերում,

եթե լինքով անցնելուց հետո, հարձակվողի էջը կցվում ա՝ շնորհավորում եմ դուք գտաք developer-ների կողմից շատ ապուշ սխալ, state parameter-ի վատ վերիֆիկացիա, որը հանգեցնում ա ATO-ի (account takeover)


այսինքն դուք կարող եք լինքեր ստեղծել որոնք որ եթե տաք զոհին ու նա մտնի՝ ձեր հաշիվը կկցվի, իսկ դուք հետո այդ սայտի “Continue with Google“ կոճակով, ձեր էջով մտնելով, կմտնեք զոհի հաշիվ

(իհարկե code-ը 10 րոպե ա max. գործում as RFC advise to Idps, նենց որ ռեալ հարձակման սեթափը՝ live code param value updating-ով բարդ կլինի, կակ մինիմում, python suport-ով hosting ա պետք)


Իհարկե էս մի քիչ 2010-2015֊ականների բան կարա թվա որոշների համար, բայց վստահեցնում եմ որ custom/3-rd party կոդերում նման բաները կարող են հանդիպել բավականին,

բայց եթե ինչ֊որ հայտնի ու լավ թեստված գրադարան ա օգտագործվում՝ էդ դեպքում խոցելի լինելու շանսերը քչանում են


Stored Self-XSS + OAuth Login CSRF == RXSS

Էսի self-invention-ների շարքից․

Ու ես կասեի բավականին պրակտիկ ա, բայց irl exploitation-ը էլի կարա բարդ լինի, բայց մեզ հերիք ա որ կարանք ասենք real impact կա


ինչպես թեստել․

նախ որպեսզի ժմնկ․ խնայել, կարելի ա սկզբից թեստել հետևյալը՝

արդյոք OAuth Login-ի ժամանակ state param-ը ստուգվում ա թե չէ

Հ․Գ․ իրականում չի էլ կարա ստուգվի․․․, նու սեսսիա չկա որի հետ կապեն, շատ֊շատ IP-ի հետ կապե՞ն, էն էլ չեն անում, էդքան չեն խորանում


Ուստի՜, 95% դեպքերում, պետք ա որ սա լինի, Booking.com, Trip.com ստուգել եմ ասենք, աշխատում ա, իհարկե Trip-ի վրա opener-ով պահեր կա, էդի մի քիչ բարդացնում ա` էն մասով որ user-ը որ էդ տարօրինակ pop-up բացվել փագվելը տենա արդեն հերիք ա որ հասկանա մի բան էն չի, ստե չարժի սկի նայել Stored Self-XSS


Հիմա՝ ինչ ա մեզ հարկավոր, Stored Self-XSS, ու ցանկալի կլիներ նաև Logout CSRF

Բայց եթե դա էլ չլինի (եթե Logout CSRF էլ չլինի)՝

Կասենք ուղղակի Impact-ը Log Out եղած/Session timed out եղած user-ների վրայա


Եթե session cookie-ի expiry-ն էլ մի քանի օր լինի, վաբշե բոմբ, էդ կարելի ա report-ում ավելացնել։


Դրանից հետո կարծում եմ կարիք չկա բացատրելու, որ Impact-ը միայն DOM Manipulation / Keylogger և այլն կարող են լինել, բայց համենայն դեպս մեկ կամ երկու-իրեք հարյուր $ կարող ա լինի Low որպես, բայց էլի բան ա, իհարկե ես սենց դեպքեր չեմ գտել, զուտ ալարել եմ Stored Self-XSS ման գամ, բայց հաստատ բան եմ ասում, եթե գործերը վատ են կարելի ա 2 կոպեկ տենց աշխատել։


գուցե ինչ֊որ բան մոռանում եմ, բայց լավ ինչևէ, այսօր այսքանը,

ինչպես ասեցի վերջինը ես ինքս էի մտածել, բայց երբ մի փոքր dork արեցի, տեսա որ H1֊ում մի քանի մարդ նույն շղթայով բաունտիներ որսացել են արդեն, hmph, ինչևէ, հաքերները էնտեղ շատ են, հնարավորինս նոր չմտածված շղթաներ ա պետք մտածել, ու գիտելիքները ընդլայնել,

Մինչ նոր հանդիպում։