Security: reject unsafe manifest plugin paths during site import#1379
Security: reject unsafe manifest plugin paths during site import#1379vuckro wants to merge 2 commits into
Conversation
move_and_activate_plugins() builds rename()/activate_plugin() targets from the
plugin keys of the imported site manifest (untrusted JSON inside the import
ZIP). Those keys were used without validation, so a crafted manifest could use
a path-traversal key (e.g. "../../..") to relocate files or activate a PHP file
outside WP_PLUGIN_DIR — a second-order path traversal / arbitrary-inclusion risk
when importing a site package from an untrusted source (e.g. a template
marketplace).
Validate each plugin key before use: reject non-strings, absolute paths,
NUL bytes and any parent-directory ("..") segment, and skip with a warning.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
More reviews will be available in 22 minutes and 48 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more credits in the billing tab to continue. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Stuck-merge detector: PR has been merge-eligible but unmerged past the thresholdThe pulse merge pass has classified PR #1379 as Failing checks on PR #1379
Worker guidance for the next attempt
Why you're seeing thisEvery pulse cycle (~120s) the deterministic merge pass re-evaluates open PRs. PRs that pass APPROVED + MERGEABLE but fail required checks have historically been re-evaluated silently every cycle until a human noticed. The stuck-merge detector (t3193) surfaces them after Posted automatically by aidevops.sh v3.20.57 automated scan. |
Summary
move_and_activate_plugins()buildsrename()/activate_plugin()targetsfrom the plugin keys of the imported site manifest (untrusted JSON inside the
import package). Those keys were used without validation, so a crafted manifest
could use a path-traversal key (e.g.
../../..) to relocate files or activate aPHP file outside
WP_PLUGIN_DIR— a second-order path-traversal /arbitrary-inclusion risk when a network admin imports a site package from an
untrusted source (e.g. a template marketplace).
Changes
Validate each plugin key before use: reject non-strings, absolute paths, NUL
bytes and any parent-directory (
..) segment, skipping them with a warning.The import action itself remains network-admin-gated; this hardens what a
malicious package can do once an admin chooses to import it.