Skip to content

🐛 Anchor ALLOWED_FONT_REGEX in a4a head validation#40530

Open
madib06ops wants to merge 1 commit into
ampproject:mainfrom
madib06ops:a4a-font-regex-anchor
Open

🐛 Anchor ALLOWED_FONT_REGEX in a4a head validation#40530
madib06ops wants to merge 1 commit into
ampproject:mainfrom
madib06ops:a4a-font-regex-anchor

Conversation

@madib06ops

Copy link
Copy Markdown

handleLink gates ad-creative <link rel=stylesheet> hrefs with ALLOWED_FONT_REGEX.test(href), but the regex has no start/end anchors so test() succeeds on any href that merely contains an allowlisted provider, e.g. https://evil.example/x.css#https://fast.fonts.net/, which then survives head sanitization and gets preloaded from the host document. The validator that defines this allowlist (LINK_FONT_STYLESHEET in validator-main.protoascii) matches it with RE2::FullMatch against the whole value, so wrap the alternation in ^(?:...)$ to match that. Added a regression test for a foreign origin that embeds a provider substring.

@CLAassistant

CLAassistant commented Jul 13, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@madib06ops

Copy link
Copy Markdown
Author

any update?

@erwinmombay

Copy link
Copy Markdown
Member

@madib06ops thanks for the submission. looking this over

@erwinmombay erwinmombay self-assigned this Jul 22, 2026
@erwinmombay
erwinmombay requested review from banaag and glevitzky and removed request for powerivq July 22, 2026 23:37

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR tightens AMP A4A head sanitization by ensuring stylesheet <link> hrefs are validated as full-string matches against the font-provider allowlist, preventing malicious URLs that merely contain an allowlisted substring from being accepted and preloaded.

Changes:

  • Anchors ALLOWED_FONT_REGEX with ^(?: ... )$ to align RegExp.test() behavior with the validator’s full-match semantics.
  • Adds a regression test covering a foreign-origin URL that embeds an allowlisted provider substring via a fragment.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
extensions/amp-a4a/0.1/head-validation.js Anchors the font stylesheet allowlist regex to prevent substring-based bypasses during head sanitization.
extensions/amp-a4a/0.1/test/test-head-validation.js Adds a regression test ensuring malicious “embedded substring” stylesheet URLs are removed and not preloaded.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@erwinmombay

Copy link
Copy Markdown
Member

@banaag could you help me take a look at this.

@glevitzky heads up on this change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants