- YouTube चैनल के आंतरिक Google account identifier obfuscated Gaia ID के उजागर होने और उसे Pixel Recorder sharing API के जरिए ईमेल पते से जोड़े जा सकने के कारण यह Google account privacy की समस्या बन गई
- लाइव चैट के block menu का Innertube request, असल में block किए बिना भी target channel के Gaia ID वाला
moderateLiveChatEndpointparameter लौटाता था - request parameters में channel ID बदलने पर scope उन Topic Channel तक बढ़ गया जिनमें live chat messages नहीं होते, इसलिए यह समस्या केवल किसी खास participant तक सीमित नहीं थी
- Pixel Recorder का
WriteShareListshare target के obfuscated Gaia ID को input के रूप में लेकर response में ईमेल पता शामिल करता था, और 25 लाख अक्षरों वाले recording title से notification email भेजे जाने को भी रोका जा सकता था - Google ने 15 सितंबर 2024 को report मिलने के बाद 9 फरवरी 2025 को दोनों vulnerabilities के fix की पुष्टि की, और कुल $10,633 reward दिया
YouTube block feature में सामने आया Gaia ID
- Google के Internal People API staging discovery document में यह पुष्टि हुई कि
BlockedTargetobject obfuscated Gaia ID औरfallbackNameका उपयोग करता हैprofileIdblock किए जाने वाले user का obfuscated Gaia ID हैfallbackNameblock किए जा रहे user का display name है
- Google account help में बताया गया था कि YouTube पर accounts को block किया जा सकता है, और वास्तव में YouTube live stream में user को block करने पर वह user
myaccount.google.com/blocklistमें दिखाई देता है - block list में channel name
Mega PrimefallbackNameके रूप में, और107183641464576740691profile ID के रूप में दिखा - इस धारणा के आधार पर कि YouTube channel को underlying Google account expose नहीं करना चाहिए, और क्योंकि पहले भी Gaia ID को ईमेल address में convert करने वाले bugs थे, अतिरिक्त रास्ते खोजने शुरू किए गए
live chat menu से पूरे channels तक विस्तार
- YouTube live chat में 3-dot menu खोलते ही
/youtubei/v1/live_chat/get_item_context_menurequest trigger होता है - response में
/youtubei/v1/live_chat/moderateकी ओर जाने वालाmoderateLiveChatEndpointऔरparamsvalue शामिल होती है - यह
paramsGoogle में आम तौर पर इस्तेमाल होने वाला base64 encoded protobuf था, और decode करने पर इसमें block target user का Gaia ID था- example response में
113907466537670370590और channel-related identifiers शामिल थे - actual block किए बिना भी target का Gaia ID पाया जा सकता था
- example response में
get_item_context_menurequest parameters को decode करने पर block किए जाने वाले channel का channel ID, livestream video ID, और livestream author ID शामिल थे- request parameters के अंदर channel ID को किसी दूसरी value से बदलकर test करने पर, YouTube द्वारा automatically generated Topic Channel का Gaia ID
103261974221829892167भी पाया जा सका- Topic Channel YouTube द्वारा automatically generated होता है, और test इस धारणा पर किया गया कि उसमें live chat messages नहीं होते
Pixel Recorder ईमेल conversion path बना
- पुराने Google products में Gaia ID को email में बदल सकने वाले bug या logic flaw की तलाश के दौरान, nathan के साथ Pixel Recorder की जांच की गई
- Pixel phone पर test recording बनाकर उसे Google account से sync करने के बाद, web के
recorder.google.comendpoints इस्तेमाल किए गए - recording को test email पर share करते समय
WriteShareListrequest ने share target list में obfuscated Gaia ID शामिल किया pixelrecorder-pa.clients6.google.comकेPlaybackService/WriteShareListresponse ने उस share target का email address लौटाया- test response में
vrptest2@gmail.comशामिल था - YouTube block experiment से मिले
107183641464576740691Gaia ID को डालने पर भीredacted@gmail.comलौटा
- test response में
- इससे YouTube से मिले Gaia ID को Pixel Recorder sharing API में डालकर email address पता करने वाली attack chain संभव हो गई
notification email रोकने वाला 25 लाख अक्षरों का recording title
- Pixel Recorder में recording को victim के साथ share करने पर victim को email notification भेजा जाता था, जिससे attack impact कम हो सकता था
- sharing popup में notifications बंद करने का विकल्प नहीं था, और req2proto से request protobuf analyze करने पर भी notification disable करने वाली कोई field नहीं थी
WriteShareListRequeststructure में ये fields थींrecording_iddelete_obfuscated_gaia_idsupdate_shared_userssharing_message
- user को एक साथ add और remove करने पर भी email भेजा जाता रहा
- यह देखते हुए कि notification email subject में recording title शामिल होता है, माना गया कि recording title को बहुत लंबा बनाने पर email भेजना fail हो सकता है
UpdateRecordingTitleendpoint के जरिए recording title को 25 लाख characters में बदलने वाली Python script लिखकर test किया गया, और server side पर title length limit नहीं थी- title को 25 लाख characters पर set करने के बाद जब दूसरी test user के साथ share किया गया, तो notification email नहीं भेजा गया
final PoC और handling timeline
- तैयार attack chain तीन steps से बनी थी
- YouTube Innertube
/get_item_context_menuendpoint से target channel का obfuscated Gaia ID प्राप्त करना - बहुत लंबे title वाली Pixel Recorder recording target के साथ share कर Gaia ID को email address में convert करना
- Pixel Recorder recording के share targets से उस user को remove कर cleanup करना
- YouTube Innertube
- PoC video YouTube video के रूप में दी गई
Google reward और fix timeline
- 2024-09-15: vendor को report भेजी गई
- 2024-09-16: vendor ने report triage की और
Nice catch!response मिला - 2024-10-03: panel ने इसे मौजूदा tracking bug का duplicate mark किया, और initial YouTube obfuscated Gaia ID exposure के लिए incomplete patch किया
- 2024-10-03: vendor को फिर समझाया गया कि Pixel Recorder खुद भी vulnerability है
- obfuscated Gaia ID Google Maps और Google Play reviewers में भी expose हो सकता था
- YouTube channel obfuscated Gaia ID को फिर leak करने वाला bypass method भी दिया गया
- 2024-11-05: panel ने $3,133 reward दिया
- आधार था medium exploitability
- high-impact abuse-related methodology के रूप में classify किया गया
- 2024-12-03: product team ने अतिरिक्त reward review के लिए report को panel के पास वापस भेजा, और 2025-02-03 disclosure schedule coordinate किया
- 2024-12-12: panel ने $7,500 additional reward दिया
- आधार था high exploitability
- high-impact abuse-related methodology के रूप में classify किया गया
- attack chain complexity के कारण base amount से 1 level down लागू किया गया
- 2025-01-29: vendor ने disclosure schedule को 2025-02-02 तक extend करने का अनुरोध किया
- 2025-02-09: पुष्टि हुई कि attack chain के दोनों हिस्से fix हो गए हैं
- initial report के 147 दिन बाद
- 2025-02-12: report public हुई
1 टिप्पणियां
Hacker News की राय
शीर्षक उलझाने वाला था। जिन्होंने लेख अंत तक नहीं पढ़ा, उनके लिए: लीक हुए ईमेल की वजह से कोई खर्च नहीं हुआ था, बल्कि समय और सूझ-बूझ लगाई गई और $10,000 का bug bounty मिला था
responsible disclosure, motive और reward को लेकर बहुत शोर है, लेकिन यह बात कम दिख रही है कि यह centralized permanent identity के खिलाफ एक और दलील है
जब भी कोई service दावा करती है कि वह तभी सबसे अच्छा काम करती है जब वह एक Real Identity™ से जुड़ी हो, तो लगता है कि कंपनियों को users को सचमुच protect करने में सिर्फ सैद्धांतिक दिलचस्पी है, और वह भी कभी-कभार ही
कल्पना कीजिए कि YouTube पर जिसके साथ भी आप interact करते हैं, वह तुरंत आपकी doxxing के तीन-चार कदम और करीब पहुंच सकता है; इस bug का वास्तविक असर मेरे हिसाब से यही था। अच्छा है कि इसे fix कर दिया गया, लेकिन इस तरह के bugs जल्द गायब होंगे, ऐसा नहीं लगता। कंपनियों और बड़ी enterprises को यह समझाने के लिए क्या चाहिए कि ऐसा design फटने को तैयार minefield है
हालांकि बहुत से लोग इन कंपनियों से असली पैसे में लेन-देन करते हैं। जैसे YouTube Premium subscribers या content creators। व्यवहार में, उस disposable account में कहीं न कहीं real-world identity identifier stored होना ही पड़ता है। fraud risk और banking की वास्तविकताओं के कारण, आप अपनी असली identity और address company को दे देते हैं और company भी उसे store करती है
मैं random apps या websites को पहचान बताने वाली जानकारी नहीं देता, लेकिन जिसके साथ मैं transaction करता हूं, वह अनिवार्य रूप से real दुनिया वाले मुझे जानता है और सिद्धांततः वही data leak होने की जगह बन सकता है
कोई healthcare provider अगर medical data leak करे तो उसकी हालत पूरी तरह खराब हो जाएगी
“working exploit POC है: यह video YouTube Terms of Service के उल्लंघन के कारण हटा दिया गया है” — यह मजेदार है
इस thread में हर तीसरे comment में यही बात है कि Google ने इस bug के लिए बहुत कम दिया, इसलिए vulnerability valuation पर बुनियादी तौर पर बात करें तो यह कुछ इस तरह है
Server-side vulnerabilities की value कम होती है क्योंकि vendors उनके लिए compete नहीं करते। Server-side vulnerabilities का लगभग कोई grey market नहीं होता। ऐसे bug पर किसी third party के लिए price लगाना मुश्किल है जिसे Google तुरंत खत्म कर सकता है, जिसके discover होते ही उसकी half-life लगभग खत्म हो जाती है, और exploit करने पर target पर भरोसेमंद remote telemetry पैदा होती है
इसके उलट Android/Chrome full chain जैसे bugs लाखों dollars में इसलिए बिकते हैं क्योंकि Google एक अच्छी तरह बने grey market से compete कर रहा होता है। कोई vendor वह bug लेकर यूरोप के किसी देश की कई agencies, संभवतः 6 जगहों तक, बेच सकता है
फिर भी bounty और grey market की तुलना apples और oranges जैसी है। Google को high-reliability exploit नहीं चाहिए, बस यह proof चाहिए कि exploit लिखा जा सकता है, और maintenance cost भी नहीं चाहिए, इसलिए वह grey market से काफी कम देता है। बाकी market का total amount कई stages में बंटा होता है और risk conditions जुड़ी होती हैं, लेकिन Google discount के बावजूद एक attractive lump sum offer कर सकता है
Attackers वे vulnerabilities खरीदते हैं जो उनके existing business processes में fit बैठती हैं। आम तौर पर वे यह speculative तरीके से नहीं सोचते कि किसी नई vulnerability से क्या cool चीजें की जा सकती हैं और पैसे कैसे कमाए जा सकते हैं। Payment information collect करना, botnet के लिए हजारों machines हासिल करना — ये existing business processes हैं। Google account का असली नाम expose करना क्या business बन सकता है? हो सकता है। क्या पहले से है? शायद नहीं
Bounty payouts आम तौर पर इस बात पर referendum नहीं होते कि bug कितना clever या interesting है। हालांकि यहां थोड़ा वैसा भी है, क्योंकि server-side web bug के लिए 10,000 dollars असामान्य रूप से ज्यादा लगता है
जो लोग ऐसे bugs ढूंढकर जीविका कमाते हैं, उनके लिए business strategy यह है कि बहुत सारे bugs ढूंढने में skilled बनें। यह iOS exploit development जैसा नहीं है, जहां एक reliable exploit पर महीनों लगाए जाते हैं
हाल के career में जो vulnerability research मैंने की है, वह कई दूसरे कामों की तुलना में इस तरफ ज्यादा रही है, इसलिए इस बारे में मुझे काफी confidence है। फिर भी HN पर ऐसे लोग हैं जो यह bounty work full-time करते हैं, इसलिए अगर कोई ऐसा व्यक्ति सुधार करे तो खुशी होगी
इस analysis को दूसरी चीजों पर लागू करें तो नए car audio या bicycle की upper price लगभग 100 dollars हो जाएगी, और copyrighted हर goods की कीमत network पर transmit करने की cost तक सीमित हो जाएगी
मुझे लगता है कि Google ने जो amount दिया, उसे इस काम में लगे समय और पिछली bounty के बाद failed exploit attempts में लगे कुल समय से divide करना ज्यादा useful होगा
इस field में ज्यादातर लोग effort के मुकाबले US minimum wage से कम कमाते होंगे, और सालाना six-figure opportunity cost चुका रहे होंगे
वह number ठीक-ठीक दिखाता है कि Google end-user security और privacy को कितनी value देता है। यह उसी लोगों की personal information चुराने के लिए दूसरे engineers को दिए जाने वाले कई orders of magnitude ज्यादा पैसे से बहुत कम number है
क्योंकि उनके लिए यह extra income source है। जैसे software engineers चाहते हैं कि उनका profession high-paying हो, वैसे ही वे bug bounties भी ऊंची होना चाहते हैं। Workers का अपने profession की wage बढ़ाने की मांग करना natural है, और कोई भी rationalization उस instinct को नहीं बदलता
Attacker market value से अलग incentives भी होते हैं। Online celebrities को stalk करने वाला कोई violent व्यक्ति zero-day exploit market में profitable customer न हो सकता है, लेकिन अगर company लापरवाही से target की identity किसी violent stalker के सामने expose कर सकती है, तो वह vulnerability फिर भी liability और ethical risk है
निजी तौर पर, अगर सुरक्षा पर अधूरा ध्यान देते हुए भारी मात्रा में code उगलने वाले LeetCode performance artists को बहुत पैसे दिए जा रहे हैं, तो बुरी घटना होने से पहले उनकी ढेरों गलतियां ढूंढकर ठीक करने में मदद करने वालों को भी अच्छा payment मिलना चाहिए
“Required attack chain की complexity की वजह से base amount से 1 level downgrade लागू किया गया” — क्या यह common है?
मैंने कुछ ही vulnerability programs में participate किया है, लेकिन उनमें से ज्यादातर में अगर page source में user email दिखने जैसी हद से ज्यादा simple लेकिन serious flaw हो, तो उल्टा कम reward दिया जाता था
“कुछ समय पहले Google में research target खोजते हुए मैं Internal People API (Staging) discovery docs खंगाल रहा था” — क्या इसका simply public होना ठीक है: https://staging-people-pa.sandbox.googleapis.com/$discovery/...
.protodefinitions से automatically convert हुई है। Google security by obscurity पर नहीं, बल्कि वास्तविक cryptography पर rely करता हैइसके अलावा discovery endpoint publicly documented है[0] और external users के लिए बनाया गया है। Internal लोग discovery endpoint नहीं पढ़ेंगे, बल्कि code search से सीधे
.protofile देखेंगेGoogle में काम करने के अनुभव से कहूं तो किसी API को public expose करने के लिए bureaucracy से कई हफ्ते लड़ना पड़ता था। यह गलती से public हो गई AWS S3 bucket जैसी चीज नहीं है। Team को पता रहा होगा कि यह public है, और इसे public करने के लिए उन्होंने bureaucracy पार की होगी
[0]: https://developers.google.com/discovery/v1/getting_started
लेख की टाइमलाइन देखें तो 2024-09-15 को कंपनी को रिपोर्ट किया गया, 2025-01-29 को कंपनी ने सार्वजनिक disclosure को 2025-02-12 तक बढ़ाने का अनुरोध किया, 2025-02-09 को पुष्टि हुई कि exploit के दोनों पहलू ठीक कर दिए गए हैं, और 2025-02-12 को इसे सार्वजनिक किया गया।
तो क्या यह 136 दिनों तक ठीक नहीं हुआ और Google ने extension मांगा? ठीक होने तक 147 दिन, और disclosure तक 150 दिन लगे।
Google Project Zero दूसरी कंपनियों को fix से पहले public disclosure के लिए जो deadline देता है, उससे तुलना करें तो वह कहता है, “इस bug पर 90-दिन की disclosure deadline लागू होती है। अगर 90-दिन की deadline से पहले users के लिए fix उपलब्ध करा दिया जाता है, तो यह bug report fix उपलब्ध होने के 30 दिन बाद प्रकाशित की जाएगी। नहीं तो deadline पर प्रकाशित होगी।”
“अगर patch deadline खत्म होने के 14 दिनों के भीतर आने की उम्मीद हो, तो Project Zero extension दे सकता है… हालांकि 14-दिन का grace period 30-दिन के patch adoption period के साथ overlap करता है, इसलिए grace period के भीतर fix की गई vulnerabilities भी मूल 90-दिन की deadline से अधिकतम 120वें दिन तक प्रकाशित कर दी जाती हैं।”
“अगर यह माना जाए कि fix 14 दिनों के भीतर तैयार नहीं होगा, तो मूल 90-दिन की deadline को ही disclosure time के रूप में इस्तेमाल किया जाता है। यानी 14-दिन का grace extension तभी दिया जाता है जब developer 14-दिन के grace period के भीतर fix deploy करने का वादा करे।”
https://googleprojectzero.blogspot.com/p/vulnerability-discl...
“वे params बस base64-encoded protobuf हैं, और यह Google भर में आम तौर पर इस्तेमाल होने वाला encoding format है” — शानदार binary message format को base64 encode करके JSON के ढेर में ठूंसने वाले Google developer के नाम एक जाम तो बनता है।
अगर भविष्य देखना हो, तो कल्पना करें कि तले पर “worse is better” लिखा एक boot किसी engineer के चेहरे को हमेशा के लिए कुचल रहा है।
JSON वाला हिस्सा automatic conversion है।
email system को खराब करके mail भेजे ही न जा सकें, यही तो icing on the cake है। Google जैसी अनगिनत products बनाने वाली विशाल कंपनी में security नकली जैसी लगती है।
अगर code की हर line एक संभावित vulnerability है, तो लाखों lines में यह बस अपरिहार्य है। इसे simple रखने—जैसे recorder site को बंद कर देने—के अलावा कोई रास्ता नहीं दिखता, लेकिन वह भी आसान नहीं है।
ज्यादातर software products बेहद जटिल software stack पर निर्भर होते हैं, और अगर आप इस्तेमाल की जाने वाली हर library और operating system पर 100% भरोसा करते हैं तो मेरे हिसाब से यह गलत mindset है। processors में भी Meltdown जैसे bugs रहे हैं। security एक लगातार चलने वाली लड़ाई है; आपने जीता है या नहीं, यह कभी निश्चित नहीं होता, और हारे हैं यह बस कभी-कभी पता चलता है।
[1] https://en.wikipedia.org/wiki/Drake_equation
मैंने भी title को GPU compute cost 10,000 dollars जैसा कुछ समझ लिया था। जिस तरह एक पुराना Google product चुनकर तुरंत छेद मिल गया, लगता है ऐसे bugs दर्जनों या सैकड़ों और होंगे।