-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Security Issue: Inconsistent Capability Checks
Current Status (Post-Security Fixes)
The codebase has been partially addressed with security improvements from issues #28 and #30, but capability checks remain inconsistent and don't leverage the custom capabilities that have been defined.
Description
Custom capabilities are properly registered for the tbell_pattern_block post type but are not consistently used throughout the application. Instead, the code relies on generic WordPress capabilities like edit_posts and edit_others_posts, which may be too permissive.
Current Implementation Analysis
What's Working ✅
- Custom capabilities are properly defined in
class-pattern-builder-post-type.php:115-127 - Capabilities are automatically assigned to Administrator and Editor roles during plugin initialization
- REST API has basic permission callbacks with nonce verification
Current Issues ❌
- API endpoints use generic capabilities:
edit_posts(line 71) andedit_others_posts(line 84) instead of custom capabilities - Controller has no capability checks: File operations in
Pattern_Builder_Controllerlack any permission verification - Inconsistent security model: Some operations check nonces but not capabilities, creating gaps
Risk Level
Medium - The generic capabilities may grant access to users who shouldn't have pattern modification permissions, but existing nonce verification provides some protection.
Files Requiring Updates
/includes/class-pattern-builder-api.php
- Lines 71, 84: Replace generic capabilities with custom ones
- Line 424: Additional generic capability check that should use custom capabilities
/includes/class-pattern-builder-controller.php
- Multiple file operation methods lack capability checks entirely
- Methods like
update_theme_pattern(),delete_theme_pattern(),create_tbell_pattern_block_post_for_pattern()need permission verification
Recommended Simple & Secure Approach
Replace current capability checks with custom capabilities:
// In API permission callbacks
public function read_permission_callback() {
return current_user_can( 'read_tbell_pattern_block' );
}
public function write_permission_callback( $request ) {
if ( ! current_user_can( 'edit_tbell_pattern_blocks' ) ) {
return new WP_Error(
'rest_forbidden',
__( 'You do not have permission to modify patterns.', 'pattern-builder' ),
array( 'status' => 403 )
);
}
// ... nonce verification remains
}Benefits of Custom Capabilities
- Granular control: Permissions specific to pattern operations only
- Security by default: New roles won't automatically get pattern access
- Consistency: Single capability model throughout the application
- Simplicity: No dual-capability checks needed
Implementation Checklist
- Update REST API permission callbacks to use custom capabilities
- Add capability checks to Controller file operations
- Ensure theme operations verify
edit_theme_optionscapability - Update any remaining generic capability checks
- Test that default roles (Admin/Editor) retain expected access
Priority: Medium - Addresses architectural inconsistency and improves security model