
Ուսումնասիրողը ստացել է 90 000 դոլար Google-ի մշակողական կայքերում հեռահար կոդի կատարման խնդրի համար
Ուսումնասիրողը հայտնաբերել է, որ Google-ի DevSite հարթակը OAuth-ի գաղտնիքները Flask-ի աշխատաշրջանի քուքիներում էր պահում, ինչը առանց լիազորության հեռահար կոդի կատարման հնարավորություն էր տալիս:
OAuth-ի գաղտնի տվյալները աշխատաշրջանի քուքիներում
Անվտանգության ուսումնասիրողը Simon Koeck-ը հայտնաբերել է, որ Google-ի մշակողական փաստաթղթերի կայքերում ընդհանուր OAuth-ի հոսքը զգայուն գաղտնի տվյալները անմիջապես Flask-ի աշխատաշրջանի քուքիներում է պահում։ developers.google.com-ում /oauth2authorize հասցեում մտնելիս ստեղծվում է աշխատաշրջանի քուքի, որը ստորագրված է, բայց չի կոդավորվում, ինչը նշանակում է, որ քուքու սեփականատիրոջը կարող է դրա պարունակությունը վերկոդավորել։
Քուքու ներսում Koeck-ը գտել է pickle-ով սերիալիզացված oauth2client.client.OAuth2WebServerFlow օբյեկտ, որը պարունակում էր ակտիվ Google OAuth-ի client_id-ն ու client_secret-ը բաց տեքստով։ Ավելի կրիտիկական էր այն, որ նույն client secret-ը մեկից ավելի չէ, այլ նույն ժամանակ Flask-ի SECRET_KEY-ն, որով հենց իսկ քուքիները ստորագրվում էին։ Նա սա հաստատեց՝ ստորագրությունը օֆլայն վերահաշվարկելով HMAC-ի և cookie-session բանալու արտադրության միջոցով, ինչի արդյունքում ստացվեց տրված քուքու ստորագրության բայթային համարժեք արդյունք։
Կեղծ քուքիից մինչև հեռահար կոդի կատարում
Ստորագրության բանալու վերականգնումից հետո Koeck-ը կարող էր ստեղծել կամայական աշխատաշրջանի քուքիներ, որոնք սերվերը վավեր էր ընդունում։ OAuth-ի callback-ը աշխատաշրջանից հետո կարդում է flow օբյեկտը և փոխանցում է pickle.loads-ին, որը unpickling-ի ընթացքում REDUCE օպկոդով կոդ է կատարում։
Google-ի արտադրական համակարգերում հրամաններ գործարկելու փոխարեն Koeck-ը սխալը ժամանակային գործողությամբ հաստատեց։ Համապատասխան payload-ը, որը time.sleep(N)-ից սկսած նված է, առաջացնում էր պատասխանի հետաձգումներ ընտրված արժեքներին համապատասխան՝ 0,207 վայրկյան sleep(0)-ի համար, 3,193-ը՝ sleep(3)-ի, 5,194-ը՝ sleep(5)-ի և 8,283-ը՝ sleep(8)-ի համար։ Վերահսկիչ թեստերը սա հաստատեցին: քուքիի բացակայությունը, ստորագրության փոփոխված բայթը կամ flow գրառման բացակայությունը բոլոր դեպքերում վերադարձնում էին «Invalid request» հաղորդագրությունը, իսկ sleep-ի payload-ը պատասխանի հետաձգումը պահպանում էր հստակ չափված քանակով։
Ազդեցությունը և նվերը
Սխալը ամբողջ DevSite հարթակի վրա էր, ուստի վերականգնված բանալին վավեր աշխատաշրջաններ էր տալիս firebase.google.com-ում, developer.android.com-ում, source.android.com-ում և docs.partner.android.com-ում։ Google-ը զեկուքը ընդունեց և 90 000 դոլար պարգևատրեց, ինչը հաշվարկվում է որպես Google Applications RCE-ի համար սովորական 75 000 դոլարի հիմնական գումարի 1,2 անգամ բազմապատկում զեկուքի հատուկ մակարդակի համար։ Զեկուքը ներկայացվել է 2026 թվականի օգոստոսի 6-ին, ստուգվել և ընդունվել է օգոստոսի 7-ին, իսկ ուղղվել է 2026 թվականի հոկտեմբերի 7-ին։
Ուղղումը
Google-ը կատարեց քառատեսակ փոփոխություններ: փոխեց երկու բացահայտված OAuth-ի հաճախորդի գաղտնիքները և անվավերացրեց դրանցով ստորագրված աշխատաշրջանները, յուրաքանչյուր տեղադրման համար տեղադրեց սեփական բարձր էնթրոպիական Flask-ի SECRET_KEY սերվերային կողմի կատարած պահեստից, որը կապված չէ OAuth-ի տվյալների հետ, OAuth-ի flow օբյեկտը թողեց սերվերում, իսկ քուքիներում պահեց միայն անթափանցիկ մատնացուցիչ, և փոխեց pickle-ը սխեմայապես ստուգված միայն տվյալների ֆորմատով ամեն դեպքում, ինչը սահմանափակում է հաճախորդի սահմանները։ Ցանկացած մեկ փոփոխությունը ընդհատում էր հարձակման շղթան։
Աղբյուրները: simonkoeck.com
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։