Repository navigation
REST API: Reject directory traversal in themes endpoint. - #13717
SainathPoojary wants to merge 4 commits into
Conversation
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. Props Bot commandsYou can trigger Props Bot actions by commenting on this PR:
|
6bfea42 to
bde11b2
Compare
Description
When requesting a single theme through the themes REST endpoint (
/wp/v2/themes/<stylesheet>), providing astylesheetquery parameter or encoded route path with directory traversal sequences (..) could allowwp_get_theme()to read theme headers from astyle.cssfile outside thewp-content/themesdirectory.This PR updates
WP_REST_Themes_Controller::_sanitize_stylesheet_callback()to normalize path separators withwp_normalize_path()and check for..segments after URL decoding. If directory traversal is detected, aWP_Error(rest_invalid_stylesheet) is returned, causing the REST API parameter validation to reject the request with HTTP 400 (rest_invalid_param) before theme resolution or permission checks run.Unit tests have been added to verify that traversal variations are rejected while legitimate stylesheet identifiers containing dots or special characters continue to work.
Trac ticket: https://core.trac.wordpress.org/ticket/66167
Use of AI Tools
AI assistance: Yes
Tool(s): Github Copilot
Model(s): Claude Sonnet 4.6
Used for: Initial code suggestions and tests, final implementation and tests were verified and edited by me.
This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.