{"id":849,"date":"2025-10-01T07:50:38","date_gmt":"2025-10-01T07:50:38","guid":{"rendered":"https:\/\/www.kacateknologi.com\/en\/?p=849"},"modified":"2025-10-01T07:53:42","modified_gmt":"2025-10-01T07:53:42","slug":"privilege-escalation-vulnerability-in-google-search-console","status":"publish","type":"post","link":"https:\/\/www.kacateknologi.com\/en\/privilege-escalation-vulnerability-in-google-search-console\/","title":{"rendered":"$3,133.70 Bounty for Privilege Escalation Vulnerability in Google Search Console (GSC) via DOM Manipulation"},"content":{"rendered":"\n<p><strong>Kaca Teknologi<\/strong> &#8211; A privilege escalation vulnerability was discovered in Google Search Console that allowed an attacker to export all performance data to BigQuery despite permission restrictions. This finding alone was rewarded with $3,133.70 through the Google Vulnerability Reward Program (VRP).<\/p>\n\n\n\n<p>If you\u2019re expecting a \u201cfancy\u201d exploitation scenario, this article may not meet your expectations.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-b08ed13\" id=\"background-of-discovering-a-privilege-escalation-vulnerability-in-google-search-console-gsc\" data-block-id=\"b08ed13\"><h2 class=\"stk-block-heading__text\">Background of Discovering a Privilege Escalation Vulnerability in Google Search Console (GSC)<\/h2><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1362\" src=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/3133.70-Bounty-for-Privilege-Escalation-Vulnerability-in-Google-Search-Console-GSC-via-DOM-Manipulation-scaled.jpg\" alt=\"$3,133.70 Bounty for Privilege Escalation Vulnerability in Google Search Console (GSC) via DOM Manipulation\" class=\"wp-image-858\" srcset=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/3133.70-Bounty-for-Privilege-Escalation-Vulnerability-in-Google-Search-Console-GSC-via-DOM-Manipulation-scaled.jpg 2560w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/3133.70-Bounty-for-Privilege-Escalation-Vulnerability-in-Google-Search-Console-GSC-via-DOM-Manipulation-768x409.jpg 768w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/3133.70-Bounty-for-Privilege-Escalation-Vulnerability-in-Google-Search-Console-GSC-via-DOM-Manipulation-1536x817.jpg 1536w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/3133.70-Bounty-for-Privilege-Escalation-Vulnerability-in-Google-Search-Console-GSC-via-DOM-Manipulation-2048x1090.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n\n\n\n<p>It all started at 2 AM when I needed to export my website performance data from GSC for data visualization. While looking for that feature, I came across the Bulk Data Export option to BigQuery.<\/p>\n\n\n\n<p>The difference between exporting performance data to Google Sheets, CSV, or Excel is that those methods only allow a one-time export for the selected date. In contrast, Bulk Data Export provides full, unsampled datasets without the row limits of CSV exports, enabling automated daily transfers and long-term data retention.<\/p>\n\n\n\n<p>However, when I tried to export the data, I encountered a message: \u201cYou <strong>must<\/strong> be a property owner.\u201d The Continue button was disabled since my account only had a low-privilege role.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1735\" height=\"1162\" src=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console.jpg\" alt=\"Bulk Data Export to BigQuery on Google Search Console\" class=\"wp-image-851\" srcset=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console.jpg 1735w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console-200x135.jpg 200w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console-768x514.jpg 768w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console-1536x1029.jpg 1536w\" sizes=\"auto, (max-width: 1735px) 100vw, 1735px\" \/><\/figure>\n\n\n\n<p>The word <strong>\u201cmust\u201d<\/strong> indicates that the role of property owner is mandatory. Sometimes, when you\u2019re looking for vulnerabilities and the documentation says <strong>\u201cshould\u201d<\/strong>, you need to carefully validate whether the role is truly mandatory or if it\u2019s still possible to perform certain actions through another endpoint or feature. <span style=\"background: linear-gradient(to bottom, transparent 50%, var(--theme-palette-color-2, #4ebffd) 50%)\" class=\"stk-highlight\">Not every restriction that can be bypassed qualifies as a vulnerability.<\/span><\/p>\n\n\n\n<p>I often attempt to bypass such restrictions, but I\u2019ve learned that some are still considered intended behavior since they aren\u2019t strictly mandatory. As a result, a few of my reports have been closed as informative.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Understanding The Roles in Google Search Console (GSC)<\/h2>\n\n\n\n<p>You may skip this part, but there\u2019s a condition I want to emphasize. GSC has three main roles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Property Owner: full control over the property.<\/li>\n\n\n\n<li>Full User: can view site data and perform some actions.<\/li>\n\n\n\n<li>Restricted: can view site data but is limited in actions.<\/li>\n<\/ul>\n\n\n\n<p>When testing Broken Access Control (BAC), usually each role behaves differently. If a restriction cannot be bypassed in role A, that doesn\u2019t mean it\u2019s not bypassable in role B, so test each role. <\/p>\n\n\n\n<p>I usually apply a &#8220;what-if approach&#8221; to explore and attempt exploits for every role; this helps me craft dozens of exploitation scenarios. I\u2019ll discuss this more deeply in another article.<\/p>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-13f2749\" id=\"bypassing-the-restriction-to-fully-export-performance-data\" data-block-id=\"13f2749\"><h2 class=\"stk-block-heading__text\">Bypassing the Restriction to Fully Export Performance Data<\/h2><\/div>\n\n\n\n<p>Since it was 2 AM and I was too lazy to open Burp Suite, whether I used Burp or not didn\u2019t matter as long as I achieved the goal.<\/p>\n\n\n\n<p>Using a <strong>Full<\/strong> role, I configured my Google Cloud project and then right-clicked the disabled Continue button in the UI. I modified the button element from <code>disabled<\/code> to <code>enabled<\/code>, which made the Continue button clickable.<\/p>\n\n\n\n<div class=\"wp-block-stackable-image stk-block-image stk-block stk-61ef7db\" data-block-id=\"61ef7db\"><figure><span class=\"stk-img-wrapper stk-image--shape-stretch\"><img loading=\"lazy\" decoding=\"async\" class=\"stk-img wp-image-853\" src=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bypass-The-Restriction-in-Bulk-Data-Export-Google-Search-Console-scaled.jpg\" width=\"2560\" height=\"1355\" alt=\"Bypass The Restriction in Bulk Data Export Google Search Console\" srcset=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bypass-The-Restriction-in-Bulk-Data-Export-Google-Search-Console-scaled.jpg 2560w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bypass-The-Restriction-in-Bulk-Data-Export-Google-Search-Console-768x406.jpg 768w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bypass-The-Restriction-in-Bulk-Data-Export-Google-Search-Console-1536x813.jpg 1536w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bypass-The-Restriction-in-Bulk-Data-Export-Google-Search-Console-2048x1084.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/span><\/figure><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1355\" src=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console-by-Modifying-The-Button-Code-scaled.jpg\" alt=\"Data export interface with code snippet.\" class=\"wp-image-854\" srcset=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console-by-Modifying-The-Button-Code-scaled.jpg 2560w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console-by-Modifying-The-Button-Code-768x406.jpg 768w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console-by-Modifying-The-Button-Code-1536x813.jpg 1536w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Bulk-Data-Export-Google-Search-Console-by-Modifying-The-Button-Code-2048x1084.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n\n\n\n<p>Here is the complete code before modification:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;button class=\"VfPpkd-LgbsSe VfPpkd-LgbsSe-OWXEXe-k8QpJ VfPpkd-LgbsSe-OWXEXe-dgl2Hf nCP5yc AjY5Oe DuMIQc LQeN7 P01spf\" jscontroller=\"soHxf\" jsaction=\"click:cOuCgd; mousedown:UX7yZ; mouseup:lbsD7e; mouseenter:tfO1Yc; mouseleave:JywGue; touchstart:p6p2H; touchmove:FwuNnf; touchend:yfqBxc; touchcancel:JMtRjd; focus:AHmuwe; blur:O22p3e; contextmenu:mg9Pef;mlnRJb:fLiPzd\" data-idom-class=\"nCP5yc AjY5Oe DuMIQc LQeN7 P01spf\" jsname=\"EwKiCc\" data-tooltip-enabled=\"true\" aria-describedby=\"tt-c85\" style=\"--mdc-ripple-fg-size: 65px; --mdc-ripple-fg-scale: 1.9163256995605362; --mdc-ripple-fg-translate-start: 41.5px, -3.5px; --mdc-ripple-fg-translate-end: 21.87890625px, -14.5px;\" <strong>disabled<\/strong>=\"\">&lt;div class=\"VfPpkd-Jh9lGc\">&lt;\/div>&lt;div class=\"VfPpkd-J1Ukfc-LhBDec\">&lt;\/div>&lt;div class=\"VfPpkd-RLmnJb\">&lt;\/div>&lt;span jsname=\"V67aGc\" class=\"VfPpkd-vQzf8d\">Continue&lt;\/span>&lt;\/button><\/code><\/pre>\n\n\n\n<p>The code after modification:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;button class=\"VfPpkd-LgbsSe VfPpkd-LgbsSe-OWXEXe-k8QpJ VfPpkd-LgbsSe-OWXEXe-dgl2Hf nCP5yc AjY5Oe DuMIQc LQeN7 P01spf\" jscontroller=\"soHxf\" jsaction=\"click:cOuCgd; mousedown:UX7yZ; mouseup:lbsD7e; mouseenter:tfO1Yc; mouseleave:JywGue; touchstart:p6p2H; touchmove:FwuNnf; touchend:yfqBxc; touchcancel:JMtRjd; focus:AHmuwe; blur:O22p3e; contextmenu:mg9Pef;mlnRJb:fLiPzd\" data-idom-class=\"nCP5yc AjY5Oe DuMIQc LQeN7 P01spf\" jsname=\"EwKiCc\" data-tooltip-enabled=\"true\" aria-describedby=\"tt-c85\" style=\"--mdc-ripple-fg-size: 65px; --mdc-ripple-fg-scale: 1.9163256995605362; --mdc-ripple-fg-translate-start: 41.5px, -3.5px; --mdc-ripple-fg-translate-end: 21.87890625px, -14.5px;\" <strong>enabled<\/strong>=\"\">&lt;div class=\"VfPpkd-Jh9lGc\">&lt;\/div>&lt;div class=\"VfPpkd-J1Ukfc-LhBDec\">&lt;\/div>&lt;div class=\"VfPpkd-RLmnJb\">&lt;\/div>&lt;span jsname=\"V67aGc\" class=\"VfPpkd-vQzf8d\">Continue&lt;\/span>&lt;\/button><\/code><\/pre>\n\n\n\n<p>After modifying the button, the export action succeeded and I was able to export Search Console performance data to my Google Cloud project despite not having the required property owner permission. Once the export started, the attacker could not stop the export process. I repeated the same DOM modification to enable and then stop the export process.<\/p>\n\n\n\n<p>For clarity, see the video PoC below.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"$3,133.70 Bounty from a Privilege Escalation Vulnerability on Google Search Console (Fixed)\" width=\"1290\" height=\"968\" src=\"https:\/\/www.youtube.com\/embed\/-gPMSAUQZjY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>I reported the vulnerability to Google VRP and within two weeks I received a bounty of $3,133.70 for this finding.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1452\" height=\"826\" src=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Privilege-Escalation-Vulnerability-in-Google-Search-Console-via-DOM-Manipulation.jpg\" alt=\"Privilege Escalation Vulnerability in Google Search Console via DOM Manipulation\" class=\"wp-image-856\" srcset=\"https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Privilege-Escalation-Vulnerability-in-Google-Search-Console-via-DOM-Manipulation.jpg 1452w, https:\/\/www.kacateknologi.com\/en\/wp-content\/uploads\/2025\/10\/Privilege-Escalation-Vulnerability-in-Google-Search-Console-via-DOM-Manipulation-768x437.jpg 768w\" sizes=\"auto, (max-width: 1452px) 100vw, 1452px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-51cc1ac\" id=\"report-timeline\" data-block-id=\"51cc1ac\"><h2 class=\"stk-block-heading__text\">Report Timeline<\/h2><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reported: Aug 11, 2025 | 03:43<\/li>\n\n\n\n<li>Received comment: Aug 12, 2025 | 07:05 \u2014 \u201cThis report seems to describe an issue in Google Cloud.\u201d<\/li>\n\n\n\n<li>Triaged: Aug 12, 2025 | 23:30<\/li>\n\n\n\n<li>Accepted: Aug 15, 2025 | 07:04<\/li>\n\n\n\n<li>Rewarded: Aug 26, 2025 | 20:56 \u2014 $3,133.70 (downgrade applied because the attacker needed access to an impacted victim\u2019s project; otherwise the reward could have been $5,000)<\/li>\n\n\n\n<li>Fixed: Sep 05, 2025 | 06:26<\/li>\n\n\n\n<li>Retested \/ Confirmed non-reproducible: Sep 05, 2025 | 08:54<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-366a918\" id=\"conclusion\" data-block-id=\"366a918\"><h2 class=\"stk-block-heading__text\">Conclusion<\/h2><\/div>\n\n\n\n<p>Whether you need a fancy or simple exploit, use advanced tools or just Inspect Element, or work on a high-spec or low-end laptop, tools are just tools. They help, but relying on them too much misses the point: some vulnerabilities can also be discovered and exploited with very simple techniques.<\/p>\n\n\n\n<p>FYI, I save time when DOM manipulation is enough to exploit an issue. Still, $3K is $3K for a straightforward vulnerability.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kaca Teknologi &#8211; A privilege escalation vulnerability was discovered in Google Search Console that allowed an attacker to export all performance data to BigQuery despite permission restrictions. This finding alone was rewarded with $3,133.70 through the Google Vulnerability Reward Program (VRP). If you\u2019re expecting a \u201cfancy\u201d exploitation scenario, this article may not meet your expectations. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":858,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44,43],"tags":[46,45,47],"class_list":["post-849","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bug-bounty","category-cybersecurity","tag-bug-bounty","tag-cybersecurity","tag-google-vulnerability-reward-program"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/posts\/849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/comments?post=849"}],"version-history":[{"count":0,"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/posts\/849\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/media\/858"}],"wp:attachment":[{"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/media?parent=849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/categories?post=849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kacateknologi.com\/en\/wp-json\/wp\/v2\/tags?post=849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}