An open API service indexing awesome lists of open source software.

https://github.com/nemmusu/powerbi-extractor

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.
https://github.com/nemmusu/powerbi-extractor

acl audit dax dump enumeration hacking harvest harvester microsoft penetration-testing penetration-testing-tools powerbi redteaming redteaming-tools scanner tool user-enumeration vulnerability web-hacking-tool

Last synced: 12 months ago
JSON representation

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.

Awesome Lists containing this project

README

          

# 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](https://img.shields.io/github/stars/nemmusu/powerbi-extractor?style=social)](https://github.com/nemmusu/powerbi-extractor/stargazers)
[![GitHub Forks](https://img.shields.io/github/forks/nemmusu/powerbi-extractor?style=social)](https://github.com/nemmusu/powerbi-extractor/forks)
[![GitHub Issues](https://img.shields.io/github/issues/nemmusu/powerbi-extractor)](https://github.com/nemmusu/powerbi-extractor/issues)
[![GitHub Last Commit](https://img.shields.io/github/last-commit/nemmusu/powerbi-extractor)](https://github.com/nemmusu/powerbi-extractor/commits/main)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

---

## ๐Ÿ“Œ 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

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

Requirements (in `requirements.txt`):

```txt
requests
tabulate
pandas
```

---

## ๐Ÿงช Usage

```bash
python3 powerbi_extractor.py --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//`: Exported report PDFs (if accessible)
- `dax//`: Dataset output in JSON format
- `logs//`: 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](https://github.com/nemmusu/powerbi-extractor)