Skip to content

Latest commit

ย 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Power BI Extractor

powerbi_extractor.py is a fully open-source auditing and exploration tool for Microsoft Power BI environments.
Designed for red teams, security auditors, and data analysts, it performs deep metadata extraction, access control validation, user-role mapping, and optional DAX/report export operations โ€” all from the command line.

GitHub Stars GitHub Forks GitHub Issues GitHub Last Commit License: MIT


๐Ÿ“Œ Why Power BI Extractor?

Microsoft Power BI is a widely adopted business intelligence platform โ€” yet security misconfigurations are common.
powerbi_extractor.py enables structured discovery and validation of:

  • ๐Ÿ” Access Control Lists (ACLs)
  • ๐Ÿ“Š Report + Dataset mapping
  • ๐Ÿ‘ค Role-Based Access Control (RBAC)
  • ๐Ÿ“ค Export-to behavior
  • ๐Ÿ”Ž Data exposure via DAX
  • ๐Ÿง‘โ€๐Ÿ’ผ User enumeration and role visibility
  • ๐Ÿง  AAD Group lookups (optional via Microsoft Graph)

๐Ÿš€ Features

  • โœ… List accessible workspaces
  • โœ… Extract report metadata and export tokens
  • โœ… Dump datasets and DAX output (when permitted)
  • โœ… Perform ACL and RBAC checks
  • โœ… Enumerate workspace users and roles (opt-in)
  • โœ… Map users โ†’ workspaces โ†’ permissions
  • โœ… Save audit logs, summaries, and vulnerabilities
  • โœ… Optional integration with Microsoft Graph

โš™๏ธ Installation

git clone https://github.com/nemmusu/powerbi-extractor.git
cd powerbi-extractor
pip install -r requirements.txt

Requirements (in requirements.txt):

requests
tabulate
pandas

๐Ÿงช Usage

python3 powerbi_extractor.py --token <BEARER_TOKEN> [--enum-users] [--audit] [--output OUTPUT_DIR]

Arguments

  • --token: Required. A Power BI access token.
  • --enum-users: List users and roles for each workspace.
  • --audit: Trigger ACL and export token validation.
  • --output: Destination directory. Defaults to output/YYYYMMDD_HHMMSS.

Output

Terminal Output (Example)

[=] Workspace: Finance_Dept
    โ†’ Your role: Contributor
    โ†ช Report: Quarterly_Summary
    โ”œโ”€ [โœ“] Fetched reportId: 7a1df76...
    โ”œโ”€ โš™๏ธ Checking embed token...
    โ”œโ”€ [โœ“] Embed token generated (HTTP 200)
    โ”œโ”€ [โœ“] Sent ExportTo request โ†’ jobId: 3a1f...
    โ”œโ”€ [โœ“] Export succeeded
    [โœ”] DAX OK: FinancialsDataset (24 columns)

    โ†ช Report: Forecast_2024
    โ”œโ”€ [โœ“] Fetched reportId: 9bbff3e...
    โ”œโ”€ โš™๏ธ Checking embed token...
    โ”œโ”€ [โœ“] Embed token generated (HTTP 200)
    โ”œโ”€ [โœ“] Sent ExportTo request โ†’ jobId: 8ab7...
    โ”œโ”€ [โœ˜] Polling attempt 1 โ†’ HTTP 404
    โ””โ”€ [โœ˜] Export job valid but PDF missing

[=] Workspace: HR_Team
    โ†’ Your role: Unknown (not in list)
    โ†ช Report: Employee_Stats
    โ”œโ”€ [โœ˜] Embed token failed โ†’ HTTP 403
    โ†ช Report: Headcount_Report
    โ”œโ”€ [โœ“] Fetched reportId: b821ffe...
    โ”œโ”€ โš™๏ธ Checking embed token...
    โ”œโ”€ [โœ“] Embed token generated (HTTP 200)
    โ”œโ”€ [โœ“] Sent ExportTo request โ†’ jobId: c771...
    โ”œโ”€ [โœ˜] Export job failed

[โœ”] DAX OK: FinancialsDataset (24 columns)
[โœ˜] DAX FAIL: HR_Dataset (HTTP 403)

๐Ÿง‘โ€๐Ÿ’ผ Users Summary:
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ displayName                โ”‚ emailAddress               โ”‚ identifier   โ”‚ role     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Alice Admin                โ”‚ alice@contoso.com          โ”‚ ...          โ”‚ Admin    โ”‚
โ”‚ Bob Viewer                 โ”‚ bob@contoso.com            โ”‚ ...          โ”‚ Viewer   โ”‚
โ”‚ Carol Contributor          โ”‚ carol@contoso.com          โ”‚ ...          โ”‚ Contributorโ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

๐Ÿ“Œ User โ†’ Workspace Mapping (with roles):
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ User               โ”‚ Workspaces (Role)                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ alice@contoso.com  โ”‚ Finance_Dept (Admin), HR_Team (Viewer)       โ”‚
โ”‚ bob@contoso.com    โ”‚ Finance_Dept (Viewer)                        โ”‚
โ”‚ carol@contoso.com  โ”‚ HR_Team (Contributor)                        โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

[โœ“] Summary saved to output/20250509_172302/summary.txt
[โœ“] Full output saved to output/20250509_172302/full_output_summary.txt

๐Ÿšจ Vulnerabilities Detected: 3
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ Type        โ”‚ Vulnerability                                               โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ๐Ÿ”ด VULN     โ”‚ Embed token can be generated for: Quarterly_Summary         โ”‚
โ”‚ ๐Ÿ”ด VULN     โ”‚ Dataset executed without error or RLS: FinancialsDataset    โ”‚
โ”‚ ๐Ÿ”ด VULN     โ”‚ Export job valid but PDF missing: Forecast_2024             โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Example summary.txt

๐Ÿ“Š Workspace: Finance_Dept
  ๐Ÿ“„ Reports:
    [โœ”] Quarterly_Summary         โ†’ exported
    [โœ˜] Annual_Overview           โ†’ failed_403
    [โœ˜] Legacy_Budget             โ†’ export_failed_404
  ๐Ÿงฌ Datasets:
    [โœ”] FinancialsDataset         โ†’ DAX OK, 24 col
    [โœ˜] HR_Dataset                โ†’ FAIL (fail_403)

๐Ÿ“Š Workspace: HR_Team
  ๐Ÿ“„ Reports:
    [โœ˜] Employee_Stats            โ†’ failed_403
    [โœ˜] Salary_Overview           โ†’ export_failed
  ๐Ÿงฌ Datasets:
    [โœ˜] StaffData                 โ†’ FAIL (fail_403)

๐Ÿ“‹ Enumerated Users:

| displayName     | emailAddress          | identifier | role       |
|-----------------|-----------------------|------------|------------|
| Alice Admin     | alice@contoso.com     | ...        | Admin      |
| Bob Viewer      | bob@contoso.com       | ...        | Viewer     |
| Eve External    | eve@external.com      | ...        | Contributor|

=== USERS โ†’ WORKSPACES MAP ===
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ User               โ”‚ Workspaces (Role)                                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ alice@contoso.com  โ”‚ Finance_Dept (Admin), HR_Team (Contributor)            โ”‚
โ”‚ bob@contoso.com    โ”‚ Finance_Dept (Viewer)                                  โ”‚
โ”‚ eve@external.com   โ”‚ HR_Team (Contributor)                                  โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

=== AUDIT VULNERABILITY SUMMARY ===
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ Type        โ”‚ Vulnerability                                                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ๐Ÿ”ด VULN     โ”‚ Embed token can be generated for: Quarterly_Summary          โ”‚
โ”‚ ๐Ÿ”ด VULN     โ”‚ Dataset executed without error or RLS: FinancialsDataset     โ”‚
โ”‚ ๐Ÿ”ด VULN     โ”‚ Export job valid but PDF missing: Legacy_Budget (jobId: ...) โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Example full_output_summary.txt

======================================================================
SUMMARY
======================================================================
๐Ÿ“Š Workspace: Finance_Dept
  ๐Ÿ“„ Reports:
    [โœ”] Quarterly_Summary         โ†’ exported
    [โœ˜] Annual_Overview           โ†’ failed_403
    [โœ˜] Legacy_Budget             โ†’ export_failed_404
  ๐Ÿงฌ Datasets:
    [โœ”] FinancialsDataset         โ†’ DAX OK, 24 col
    [โœ˜] HR_Dataset                โ†’ FAIL (fail_403)

๐Ÿ“Š Workspace: HR_Team
  ๐Ÿ“„ Reports:
    [โœ˜] Employee_Stats            โ†’ failed_403
    [โœ˜] Salary_Overview           โ†’ export_failed
  ๐Ÿงฌ Datasets:
    [โœ˜] StaffData                 โ†’ FAIL (fail_403)

๐Ÿ“‹ Enumerated Users:

| displayName     | emailAddress          | identifier | role       |
|-----------------|-----------------------|------------|------------|
| Alice Admin     | alice@contoso.com     | ...        | Admin      |
| Bob Viewer      | bob@contoso.com       | ...        | Viewer     |
| Eve External    | eve@external.com      | ...        | Contributor|

=== USERS โ†’ WORKSPACES MAP ===
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ User               โ”‚ Workspaces (Role)                                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ alice@contoso.com  โ”‚ Finance_Dept (Admin), HR_Team (Contributor)            โ”‚
โ”‚ bob@contoso.com    โ”‚ Finance_Dept (Viewer)                                  โ”‚
โ”‚ eve@external.com   โ”‚ HR_Team (Contributor)                                  โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

=== AUDIT VULNERABILITY SUMMARY ===
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ Type        โ”‚ Vulnerability                                                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ๐Ÿ”ด VULN     โ”‚ Embed token can be generated for: Quarterly_Summary          โ”‚
โ”‚ ๐Ÿ”ด VULN     โ”‚ Dataset executed without error or RLS: FinancialsDataset     โ”‚
โ”‚ ๐Ÿ”ด VULN     โ”‚ Export job valid but PDF missing: Legacy_Budget (jobId: ...) โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

======================================================================
REPORT LOGS
======================================================================

๐Ÿ“„ Quarterly_Summary.log
--------------------------------------------------
Report Name: Quarterly_Summary
Workspace: Finance_Dept
Group ID: GID-FIN-001
Report ID: RPT-123
Dataset ID: DS-456
EmbedTokenCheck: HTTP 200
EmbedToken: eyJ0eXAi...
Job ID: JOB-789

๐Ÿ“„ Legacy_Budget.log
--------------------------------------------------
Report Name: Legacy_Budget
Workspace: Finance_Dept
Group ID: GID-FIN-001
Report ID: RPT-LEG-333
Dataset ID: DS-LEGACY
EmbedTokenCheck: HTTP 200
EmbedToken: eyJ0eXAi...
Job ID: JOB-XYZ
Polling: 404 NOT FOUND

๐Ÿ“„ Salary_Overview.log
--------------------------------------------------
Report Name: Salary_Overview
Workspace: HR_Team
Group ID: GID-HR-002
Report ID: RPT-SAL
Dataset ID: DS-HR-02
EmbedTokenCheck: HTTP 200
Job ID: JOB-FAIL
Status: FAILED

======================================================================
AUDIT FINDINGS
======================================================================
[OK] Token context โ†’ service_principal=False, guest=False, admin=False
[INFO] Embed URL detected: https://app.powerbi.com/reportEmbed?reportId=...
[OK] Token subject explicitly in report ACL: Quarterly_Summary
[VULN] Embed token can be generated for: Quarterly_Summary
[VULN] Dataset executed without error or RLS: FinancialsDataset (cols: 24)
[OK] RLS roles defined for dataset: FinancialsDataset
[OK] RLS enforcement confirmed: FinancialsDataset
[VULN] Export job valid but PDF missing: Legacy_Budget (jobId: JOB-XYZ)

๐Ÿ—‚ Output Structure

  • reports/<workspace>/: Exported report PDFs (if accessible)
  • dax/<workspace>/: Dataset output in JSON format
  • logs/<workspace>/: Detailed logs for each export
  • users.csv / users.json: Workspace user listings (if enabled)
  • summary.txt: Human-readable summary
  • full_output_summary.txt: Full logs + findings

Notes

  • Tokens must be valid for the Power BI REST API. Microsoft Graph access (e.g., AAD group resolution) requires additional scopes but is optional.
  • Export and DAX operations do not guarantee access โ€” HTTP errors are logged and reported.

โš ๏ธ Disclaimer

This tool is released for educational and authorized assessment purposes only.
It is always distributed as Python source code.
โš ๏ธ Beware of .exe versions: they are unofficial and potentially malicious.


๐Ÿ“ซ Contact

GitHub: nemmusu/powerbi-extractor

About

PowerBI Extractor is a fully open-source auditing and exploration tool for Microsoft Power BI environments, it performs deep metadata extraction, access control validation, user-role mapping, and optional DAX/report export operations.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages