Skip to content

collapse leading slashes and backslashes in trailing-slash redirect - #1240

Open
nishat-06 wants to merge 1 commit into
CrowCpp:masterfrom
nishat-06:redirect-leading-backslash
Open

nishat-06 wants to merge 1 commit into
CrowCpp:masterfrom
nishat-06:redirect-leading-backslash

Conversation

@nishat-06

Copy link
Copy Markdown

The trailing-slash redirect in routing.h builds Location from req.url, and the fix for GHSA-x6vq-298x-6qgq only collapses a leading run of '/'. A request for /\attacker.example still gets Location: /\attacker.example/, which browsers resolve as //attacker.example/ so the open redirect remains, and a URL made only of slashes makes find_first_not_of return npos so the substr call throws out_of_range and the connection is left without a response. Both redirect sites now strip the leading run of '/' and '' and rebuild the target rooted at a single slash, with the existing redirect test extended to cover both inputs.

The Location header for the trailing-slash redirect is built from req.url. Only a leading run of '/' was collapsed, so /\host still produced a protocol relative target in browsers, and a URL made only of slashes made substr throw out_of_range.

@gittiver gittiver left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

the use of percent encoded / and \ needs also to be investigated.

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