Skip to content

Per-key secrets-backend config options are not recognised as sensitive under a team-scoped spelling #71037

Open

Description

@potiuk

What happened

airflow/api_fastapi/core_api/services/public/config.py treats the synthetic per-key secrets-backend options as sensitive by matching literal section names:

_PER_KEY_SENSITIVE_PREFIXES: dict[str, str] = {
    "secrets": "backend_kwarg__",
    "workers": "secrets_backend_kwarg__",
}

Both _is_per_key_sensitive_option and _mask_per_key_sensitive_options key off those exact names, so neither recognises a team-scoped spelling of the same option:

  • the config-file section [<team>=secrets], and
  • AIRFLOW__<TEAM>___SECRETS__BACKEND_KWARG__*, which is reported under a section named after the team rather than after secrets.

This is the same root cause as #70755 — sensitivity being decided from a section name that a team-scoped override does not use — but a different mechanism, and it was left untouched there.

Why it is not currently exploitable

_get_custom_secret_backend is not team-aware, so there is no way to configure a team-scoped backend_kwarg__* that the literal-section match could miss. Nothing leaks today. The gap becomes live the moment secrets backends gain team scoping, and at that point it fails open — a team's backend credentials would be returned in full by GET /config.

What needs doing

Resolve both spellings back to the base option before deciding sensitivity, as AirflowConfigParser.is_sensitive_option now does for registered options. The env-var spelling is the awkward half: it lands under a section named after the team, which is the shape _names_sensitive_team_env_var deals with in the shared parser. The synthetic per-key options are built separately and need their own pass over conf_dict.

Acceptance criteria

  • A team-scoped backend_kwarg__* / secrets_backend_kwarg__* value is redacted by GET /config and GET /config/section/{section}/option/{option} when display_sensitive=False, under both the [<team>=secrets] and the AIRFLOW__<TEAM>___SECRETS__... spelling.
  • display_sensitive=True still returns real values.
  • Tests covering both spellings.

Raised in review of #70755.


Drafted-by: Claude Code (Opus 5); reviewed by @potiuk before posting

Activity

  1. added
    area:APIAirflow's REST/HTTP API
    kind:bugThis is a clearly a bug
    securitySecurity issues that must be fixed
    on Aug 3, 2026
  2. abhishekmauryaKsolves commented on Aug 4, 2026

    @abhishekmauryaKsolves
    Contributor

    I'd like to work on this. Since this depends on the base_section_name() / team-scoped resolution helpers introduced in #70755, I'll wait for that PR to merge first and then submit a fix here using the same approach.

  3. added 3 commits that reference this issue on Aug 5, 2026
    94f820e
    00fc794
    1773313
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:APIAirflow's REST/HTTP APIkind:bugThis is a clearly a bugsecuritySecurity issues that must be fixed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions