Skip to content

[5.x] Fix token path traversal#14700

Merged
jasonvarga merged 10 commits into
5.xfrom
token-path-traversal
May 21, 2026
Merged

[5.x] Fix token path traversal#14700
jasonvarga merged 10 commits into
5.xfrom
token-path-traversal

Conversation

@duncanmcclean
Copy link
Copy Markdown
Member

@duncanmcclean duncanmcclean commented May 21, 2026

This PR prevents path traversal in token lookups.

duncanmcclean and others added 10 commits May 21, 2026 10:41
Avoids calling Token::find() with an empty or null token value,
which would otherwise trigger the path traversal protection and
throw an exception.
Reject any token name that isn't strictly [A-Za-z0-9_-] rather than
denylisting separators. This covers traversal, absolute paths, and
Windows drive/UNC paths in one check, regardless of OS or encoding.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fail fast at construction instead of silently regenerating, so callers
don't end up holding a token whose name differs from what they asked
for. find() still returns null for invalid names to avoid an error
oracle on attacker-supplied input.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PCRE's $ matches before a trailing newline, which let a token name
like "abc\n" pass the allowlist. \z anchors strictly to end of string.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jasonvarga jasonvarga merged commit eecc9ed into 5.x May 21, 2026
27 checks passed
@jasonvarga jasonvarga deleted the token-path-traversal branch May 21, 2026 19:20
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.

2 participants