Skip to content

Escape icon insertion in registry search results template - #71618

Merged
Lee-W merged 2 commits into
apache:mainfrom
astronomer:fix-registry-search-icon-escape
Aug 17, 2026
Merged

Escape icon insertion in registry search results template#71618
Lee-W merged 2 commits into
apache:mainfrom
astronomer:fix-registry-search-icon-escape

Conversation

@Lee-W

@Lee-W Lee-W commented Aug 14, 2026

Copy link
Copy Markdown
Member

The other interpolated fields in the search-result template (url, resultType, name, moduleType, providerName, description) were already passed through escapeHtml(); icon was the one exception. It currently only ever holds trusted build-time values ('P', 'M', or an entry from types.json), so this is a defense-in-depth fix rather than a fix for an exploitable bug — GitHub code-scanning alert #621 covering this file was already dismissed as a false positive for that reason.


Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

Generated-by: [Claude] following the guidelines


  • Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
  • For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
  • When adding dependency, check compliance with the ASF 3rd Party License Policy.
  • For significant user-facing changes create newsfragment: {pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.

GitHub code-scanning alert #621 (CodeQL js/xss-through-dom) flags
resultsContainer.innerHTML = html at this file's line 131 as a sink
for typesEl.textContent, read at line 33 and parsed into the
typeLabels/typeIcons maps. The typeLabels branch of that data was
already passed through escapeHtml() before reaching the sink; the
typeIcons branch (surfaced here as the icon variable) was not,
making icon the actual unescaped leg of the flagged flow.

potiuk dismissed the alert as a false positive because
typesEl.textContent is build-time-generated JSON, not user input, so
neither branch is exploitable today. This closes the last unescaped
leg of that flow, matching the escaping already applied to every
other interpolated field in the same template.
@Lee-W
Lee-W force-pushed the fix-registry-search-icon-escape branch from 5a73232 to 4e8abe7 Compare August 14, 2026 13:56
@Lee-W
Lee-W requested a review from potiuk August 14, 2026 13:56
@uros-b

uros-b commented Aug 15, 2026

Copy link
Copy Markdown
Member

LGTM

@Lee-W
Lee-W marked this pull request as ready for review August 16, 2026 02:49
@Lee-W
Lee-W merged commit 2c2cc5c into apache:main Aug 17, 2026
67 checks passed
@Lee-W
Lee-W deleted the fix-registry-search-icon-escape branch August 17, 2026 04:40
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Airflow Registry Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants