From 413329cd261e4f1a579a5c0a2333954933ab0af8 Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 12 Mar 2026 13:30:45 +0100 Subject: [PATCH] Fix: zizmor findings (#3797) * zizmor auto fixes * add github action for security analysis with zizmor * add access token to iOS push action * fix zizmor findings * add exceptions for dangerous-triggers including comments for reasoning * improve comments * prettier --- .github/workflows/blocked.yaml | 9 +++++++++ .github/workflows/build-element-call.yaml | 4 +++- .github/workflows/changelog-label.yml | 8 ++++++++ .github/workflows/pr-deploy.yaml | 11 ++++++++++- .github/workflows/publish-embedded-packages.yaml | 14 ++++++++++++-- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/.github/workflows/blocked.yaml b/.github/workflows/blocked.yaml index 12a4b020..cc7db747 100644 --- a/.github/workflows/blocked.yaml +++ b/.github/workflows/blocked.yaml @@ -1,7 +1,16 @@ name: Prevent blocked on: + # zizmor: ignore[dangerous-triggers] + # Reason: This workflow does not checkout code or use secrets. + # It only reads labels to set a failure status on the PR. pull_request_target: types: [opened, labeled, unlabeled, synchronize] + +permissions: + pull-requests: read + # Required to fail the check on the PR + statuses: write + jobs: prevent-blocked: name: Prevent blocked diff --git a/.github/workflows/build-element-call.yaml b/.github/workflows/build-element-call.yaml index 300138e0..3ddabb0b 100644 --- a/.github/workflows/build-element-call.yaml +++ b/.github/workflows/build-element-call.yaml @@ -45,7 +45,7 @@ jobs: - name: Install dependencies run: "yarn install --immutable" - name: Build Element Call - run: ${{ format('yarn run build:{0}:{1}', inputs.package, inputs.build_mode) }} + run: yarn run build:"$PACKAGE":"$BUILD_MODE" env: SENTRY_ORG: ${{ secrets.SENTRY_ORG }} SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} @@ -54,6 +54,8 @@ jobs: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} VITE_APP_VERSION: ${{ inputs.vite_app_version }} NODE_OPTIONS: "--max-old-space-size=4096" + PACKAGE: ${{ inputs.package }} + BUILD_MODE: ${{ inputs.build_mode }} - name: Upload Artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: diff --git a/.github/workflows/changelog-label.yml b/.github/workflows/changelog-label.yml index 8d9acbc2..f11d3130 100644 --- a/.github/workflows/changelog-label.yml +++ b/.github/workflows/changelog-label.yml @@ -1,8 +1,16 @@ name: PR changelog label on: + # zizmor: ignore[dangerous-triggers] + # This is safe because we do not use actions/checkout or execute untrusted code. + # Using pull_request_target is necessary to allow status writes for PRs from forks. pull_request_target: types: [labeled, unlabeled, opened] + +permissions: + pull-requests: read + statuses: write + jobs: pr-changelog-label: runs-on: ubuntu-latest diff --git a/.github/workflows/pr-deploy.yaml b/.github/workflows/pr-deploy.yaml index 138ab2b5..0084b76b 100644 --- a/.github/workflows/pr-deploy.yaml +++ b/.github/workflows/pr-deploy.yaml @@ -1,5 +1,7 @@ name: Deploy previews for PRs on: + # zizmor: ignore[dangerous-triggers] + # Reason: This is now restricted to internal PRs only using the 'if' condition below. workflow_run: workflows: ["Build"] types: @@ -7,7 +9,14 @@ on: jobs: prdetails: - if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request' }} + # Logic: + # 1. Build must be successful + # 2. Event must be a pull_request + # 3. Head repository must be the SAME as the base repository (No Forks!) + if: > + github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.head_repository.full_name == github.repository runs-on: ubuntu-latest outputs: pr_number: ${{ steps.prdetails.outputs.pr_id }} diff --git a/.github/workflows/publish-embedded-packages.yaml b/.github/workflows/publish-embedded-packages.yaml index 1c6cd7b1..3ab275a5 100644 --- a/.github/workflows/publish-embedded-packages.yaml +++ b/.github/workflows/publish-embedded-packages.yaml @@ -22,8 +22,18 @@ jobs: TAG: ${{ steps.tag.outputs.TAG }} steps: - name: Calculate VERSION - # We should only use the hard coded test value for a dry run - run: echo "VERSION=${{ github.event_name == 'release' && github.event.release.tag_name || 'v0.0.0-pre.0' }}" >> "$GITHUB_ENV" + # Safely store dynamic values in environment variables + # to prevent shell injection (template-injection) + run: | + # The logic is executed within the shell using the env variables + if [ "$EVENT_NAME" = "release" ]; then + echo "VERSION=$RELEASE_TAG" >> "$GITHUB_ENV" + else + echo "VERSION=v0.0.0-pre.0" >> "$GITHUB_ENV" + fi + env: + RELEASE_TAG: ${{ github.event.release.tag_name }} + EVENT_NAME: ${{ github.event_name }} - id: dry_run name: Set DRY_RUN # We perform a dry run for all events except releases.