Skip to content

Commit ba11bb7

Browse files
authored
Merge branch 'master' into ramiro.aquino.romero/sc-97459/add-export-to-png-and-pdf-options-for-charts
2 parents e8b6286 + 65f13f7 commit ba11bb7

268 files changed

Lines changed: 16119 additions & 4119 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/SECURITY.md

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,46 @@ e-mail address [security@superset.apache.org](mailto:security@superset.apache.or
1818
More details can be found on the ASF website at
1919
[ASF vulnerability reporting process](https://apache.org/security/#reporting-a-vulnerability)
2020

21-
We kindly ask you to include the following information in your report:
22-
- Apache Superset version that you are using
23-
- A sanitized copy of your `superset_config.py` file or any config overrides
24-
- Detailed steps to reproduce the vulnerability
21+
**Submission Standards & AI Policy**
22+
23+
To ensure engineering focus remains on verified risks and to manage high reporting volumes, all reports must meet the following criteria:
24+
- Plain Text Format: In accordance with Apache guidelines, please provide all details in plain text within the email body. Avoid sending PDFs, Word documents, or password-protected archives.
25+
- Mandatory AI Disclosure: If you utilized Large Language Models (LLMs) or AI tools to identify a flaw or assist in writing a report, you must disclose this in your submission so our triage team can contextualize the findings.
26+
- Human-Verified PoC: All submissions must include a manual, step-by-step Proof of Concept (PoC) performed on a supported release. Raw AI outputs, hypothetical chat transcripts, or unverified scanner logs will be closed as Invalid.
27+
28+
We kindly ask you to include the following information in your report to assist our developers in triaging and remediating issues efficiently:
29+
- Version/Commit: The specific version of Apache Superset or the Git commit hash you are using.
30+
- Configuration: A sanitized copy of your `superset_config.py` file or any config overrides.
31+
- Environment: Your deployment method (e.g., Docker Compose, Helm, or source) and relevant OS/Browser details.
32+
- Impacted Component: Identification of the affected area (e.g., Python backend, React frontend, or a specific database connector).
33+
- Expected vs. Actual Behavior: A clear description of the intended system behavior versus the observed vulnerability.
34+
- Detailed Reproduction Steps: Clear, manual steps to reproduce the vulnerability.
35+
36+
**Out of Scope Vulnerabilities**
37+
38+
To prioritize engineering efforts on genuine architectural risks, the following scenarios are explicitly out of scope and will not be issued a CVE:
39+
- Attacks requiring Admin privileges: (e.g., CSS injection, template manipulation, dashboard ownership overrides, or modifying global system settings). Per the CVE vulnerability definition in CNA Operational Rules 4.1, a qualifying vulnerability must allow violation of a security policy. The Admin role is a fully trusted operational boundary defined by Apache Superset's security policy; actions within this boundary do not violate that policy and are therefore considered intended capabilities 'by design,' not vulnerabilities.
40+
- Brute Force and Rate Limiting: Reports targeting a lack of resource exhaustion protections, generic rate-limiting, or volumetric Denial of Service (DoS) attempts.
41+
- Theoretical attack vectors: Issues without a demonstrable, reproducible exploit path.
42+
- Non-Exploitable Findings: Missing security headers, generic banner disclosures, or descriptive error messages that do not lead to a direct, documented exploit.
43+
44+
**Outcome of Reports**
45+
46+
Reports that are deemed out-of-scope for a CVE but represent valid security best practices or hardening opportunities may be converted into public GitHub issues. This allows the community to contribute to the general hardening of the platform even when a specific vulnerability threshold is not met.
2547

2648
Note that Apache Superset is not responsible for any third-party dependencies that may
2749
have security issues. Any vulnerabilities found in third-party dependencies should be
2850
reported to the maintainers of those projects. Results from security scans of Apache
2951
Superset dependencies found on its official Docker image can be remediated at release time
3052
by extending the image itself.
3153

54+
**Vulnerability Aggregation & CVE Attribution**
55+
56+
In accordance with MITRE CNA Operational Rules (4.1.10, 4.1.11, and 4.2.13), Apache Superset issues CVEs based on the underlying architectural root cause rather than the number of affected endpoints or exploit payloads.
57+
- Aggregation: If multiple exploit vectors stem from the same programmatic failure or shared vulnerable code, they must be aggregated into a single, comprehensive report.
58+
- Independent Fixes: Separate CVEs will only be assigned if the vulnerabilities reside in decoupled architectural modules and can be fixed independently of one another.
59+
Reports that fail to aggregate related findings will be merged during triage to ensure an accurate and defensible CVE record.
60+
3261
**Your responsible disclosure and collaboration are invaluable.**
3362

3463
## Extra Information

.github/workflows/docker.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ jobs:
104104
# Scan for vulnerabilities in built container image after pushes to mainline branch.
105105
- name: Run Trivy container image vulnerabity scan
106106
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && (steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker) && matrix.build_preset == 'lean'
107-
uses: aquasecurity/trivy-action@97e0b3872f55f89b95b2f65b3dbab56962816478 # v0.34.2
107+
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # v0.35.0
108108
with:
109109
image-ref: ${{ env.IMAGE_TAG }}
110110
format: 'sarif'

.github/workflows/pre-commit.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,17 @@ jobs:
6464
restore-keys: |
6565
pre-commit-v2-${{ runner.os }}-py${{ matrix.python-version }}-
6666
67+
- name: Get changed files
68+
id: changed_files
69+
uses: ./.github/actions/file-changes-action
70+
with:
71+
output: ' '
72+
6773
- name: pre-commit
6874
run: |
6975
set +e # Don't exit immediately on failure
70-
export SKIP=eslint-frontend,type-checking-frontend
71-
pre-commit run --all-files
76+
export SKIP=type-checking-frontend
77+
pre-commit run --files ${{ steps.changed_files.outputs.files }}
7278
PRE_COMMIT_EXIT_CODE=$?
7379
git diff --quiet --exit-code
7480
GIT_DIFF_EXIT_CODE=$?

.github/workflows/superset-docs-deploy.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
yarn install --check-cache
6969
- name: Download database diagnostics (if triggered by integration tests)
7070
if: github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success'
71-
uses: dawidd6/action-download-artifact@v16
71+
uses: dawidd6/action-download-artifact@v19
7272
continue-on-error: true
7373
with:
7474
workflow: superset-python-integrationtest.yml
@@ -77,7 +77,7 @@ jobs:
7777
path: docs/src/data/
7878
- name: Try to download latest diagnostics (for push/dispatch triggers)
7979
if: github.event_name != 'workflow_run'
80-
uses: dawidd6/action-download-artifact@v16
80+
uses: dawidd6/action-download-artifact@v19
8181
continue-on-error: true
8282
with:
8383
workflow: superset-python-integrationtest.yml

.github/workflows/superset-docs-verify.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,13 @@ jobs:
111111
run: |
112112
yarn install --check-cache
113113
- name: Download database diagnostics from integration tests
114-
uses: dawidd6/action-download-artifact@v16
114+
uses: dawidd6/action-download-artifact@v19
115115
with:
116116
workflow: superset-python-integrationtest.yml
117117
run_id: ${{ github.event.workflow_run.id }}
118118
name: database-diagnostics
119119
path: docs/src/data/
120+
if_no_artifact_found: 'warning'
120121
- name: Use fresh diagnostics
121122
run: |
122123
if [ -f "src/data/databases-diagnostics.json" ]; then

.github/workflows/superset-frontend.yml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ jobs:
5454
- name: Save Docker Image as Artifact
5555
if: steps.check.outputs.frontend
5656
run: |
57-
docker save $TAG | gzip > docker-image.tar.gz
57+
docker save $TAG | zstd -3 --threads=0 > docker-image.tar.zst
5858
5959
- name: Upload Docker Image Artifact
6060
if: steps.check.outputs.frontend
6161
uses: actions/upload-artifact@v7
6262
with:
6363
name: docker-image
64-
path: docker-image.tar.gz
64+
path: docker-image.tar.zst
6565

6666
sharded-jest-tests:
6767
needs: frontend-build
@@ -78,7 +78,8 @@ jobs:
7878
name: docker-image
7979

8080
- name: Load Docker Image
81-
run: docker load < docker-image.tar.gz
81+
run: |
82+
zstd -d < docker-image.tar.zst | docker load
8283
8384
- name: npm run test with coverage
8485
run: |
@@ -148,7 +149,7 @@ jobs:
148149

149150
- name: Load Docker Image
150151
run: |
151-
docker load < docker-image.tar.gz
152+
zstd -d < docker-image.tar.zst | docker load
152153
153154
- name: lint
154155
run: |
@@ -171,7 +172,8 @@ jobs:
171172
name: docker-image
172173

173174
- name: Load Docker Image
174-
run: docker load < docker-image.tar.gz
175+
run: |
176+
zstd -d < docker-image.tar.zst | docker load
175177
176178
- name: Build Plugins Packages
177179
run: |
@@ -189,7 +191,8 @@ jobs:
189191
name: docker-image
190192

191193
- name: Load Docker Image
192-
run: docker load < docker-image.tar.gz
194+
run: |
195+
zstd -d < docker-image.tar.zst | docker load
193196
194197
- name: Build Storybook and Run Tests
195198
run: |

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ CLAUDE.local.md
133133
PROJECT.md
134134
.aider*
135135
.claude_rc*
136+
.claude/settings.local.json
136137
.env.local
137138
oxc-custom-build/
138139
*.code-workspace

UPDATING.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ assists people when migrating to a new version.
2424

2525
## Next
2626

27+
### Deck.gl MapBox viewport and opacity controls are functional
28+
29+
The Deck.gl MapBox chart's **Opacity**, **Default longitude**, **Default latitude**, and **Zoom** controls were previously non-functional — changing them had no effect on the rendered map. These controls are now wired up correctly.
30+
31+
**Behavior change for existing charts:** Previously, the viewport controls had hard-coded default values (`-122.405293`, `37.772123`, zoom `11` — San Francisco) that were stored in each chart's `form_data` but never applied. The map always used `fitBounds` to center on the data. With this fix, those stored values are now respected, which means existing MapBox charts may open centered on the old default coordinates instead of fitting to data bounds.
32+
33+
**To restore fit-to-data behavior:** Open the chart in Explore, clear the **Default longitude**, **Default latitude**, and **Zoom** fields in the Viewport section, and re-save the chart.
34+
2735
### ClickHouse minimum driver version bump
2836

2937
The minimum required version of `clickhouse-connect` has been raised to `>=0.13.0`. If you are using the ClickHouse connector, please upgrade your `clickhouse-connect` package. The `_mutate_label` workaround that appended hash suffixes to column aliases has also been removed, as it is no longer needed with modern versions of the driver.

docs/developer_docs/extensions/mcp-server.md renamed to docs/admin_docs/configuration/mcp-server.mdx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: MCP Server Deployment & Authentication
33
hide_title: true
4-
sidebar_position: 9
4+
sidebar_position: 14
55
version: 1
66
---
77

@@ -30,6 +30,10 @@ Superset includes a built-in [Model Context Protocol (MCP)](https://modelcontext
3030

3131
This guide covers how to run, secure, and deploy the MCP server.
3232

33+
:::tip Looking for user docs?
34+
See **[Using AI with Superset](/user-docs/using-superset/using-ai-with-superset)** for a guide on what AI can do with Superset and how to connect your AI client.
35+
:::
36+
3337
```mermaid
3438
flowchart LR
3539
A["AI Client<br/>(Claude, ChatGPT, etc.)"] -- "MCP protocol<br/>(HTTP + JSON-RPC)" --> B["MCP Server<br/>(:5008/mcp)"]
@@ -668,12 +672,13 @@ MCP_CSRF_CONFIG = {
668672
- **Secrets management** -- Store `MCP_JWT_SECRET`, database credentials, and API keys in environment variables or a secrets manager, never in config files committed to version control
669673
- **Scoped tokens** -- Use `MCP_REQUIRED_SCOPES` to limit what operations a token can perform
670674
- **Network isolation** -- In Kubernetes, restrict MCP pod network policies to only allow traffic from your AI client endpoints
671-
- Review the **[Security documentation](./security)** for additional extension security guidance
675+
- Review the **[Security documentation](/developer-docs/extensions/security)** for additional extension security guidance
672676

673677
---
674678

675679
## Next Steps
676680

677-
- **[MCP Integration](./mcp)** -- Build custom MCP tools and prompts via Superset extensions
678-
- **[Security](./security)** -- Security best practices for extensions
679-
- **[Deployment](./deployment)** -- Package and deploy Superset extensions
681+
- **[Using AI with Superset](/user-docs/using-superset/using-ai-with-superset)** -- What AI can do with Superset and how to get started
682+
- **[MCP Integration](/developer-docs/extensions/mcp)** -- Build custom MCP tools and prompts via Superset extensions
683+
- **[Security](/developer-docs/extensions/security)** -- Security best practices for extensions
684+
- **[Deployment](/developer-docs/extensions/deployment)** -- Package and deploy Superset extensions

docs/admin_docs/security/security.mdx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ A table with the permissions for these roles can be found at [/RESOURCES/STANDAR
2424
Admins have all possible rights, including granting or revoking rights from other
2525
users and altering other people’s slices and dashboards.
2626

27+
>#### Threat Model and Privilege Boundaries: The Admin Role
28+
>
29+
>Apache Superset is built with a granular permission model where users assigned the Admin role are considered fully trusted. Admins possess complete control over the application's configuration, UI rendering, and access controls.
30+
>
31+
>Consequently, actions performed by an Admin that alter the application's behavior or presentation—such as injecting custom CSS, modifying Jinja templates, or altering security flags—are intended administrative capabilities by design.
32+
>
33+
>In accordance with MITRE CNA Rule 4.1, a vulnerability must represent a violation of an explicit security policy. Because the Admin role is defined as a trusted operational boundary, actions executed with Admin privileges do not cross a security perimeter. Therefore, exploit vectors that strictly require Admin access are not classified as security vulnerabilities and are ineligible for CVE assignment.
34+
2735
### Alpha
2836

2937
Alpha users have access to all data sources, but they cannot grant or revoke access

0 commit comments

Comments
 (0)