🇰🇷 한글 설명
MStore API 워드프레스 플러그인의 update_user_profile() 함수가 사용자 제공 meta_data를 검증 없이 처리하여, 인증된 공격자가 임의의 사용자 메타 필드를 수정 가능하다. wp_user_level 등 민감한 필드 조작으로 권한 상승 또는 XSS 공격이 가능하다.
💡 쉬운 설명
워드프레스 플러그인이 사용자 계정 정보 변경 시 충분히 검증하지 않아서, 로그인한 기본 권한 사용자가 관리자 권한이나 다른 사용자 정보를 임의로 수정할 수 있다. 이를 통해 계정 탈취나 악성 코드 삽입이 가능하다.
🇺🇸 원문 (English)
The MStore API plugin for WordPress is vulnerable to Insecure Direct Object Reference in all versions up to, and including, 4.18.3. This is due to the update_user_profile() function in controllers/flutter-user.php processing the 'meta_data' JSON parameter without any allowlist, blocklist, or validation of meta keys. The function reads raw JSON from php://input (line 1012), decodes it (line 1013), authenticates the user via cookie validation (line 1015), and then directly iterates over the user-supplied meta_data array passing arbitrary keys and values to update_user_meta() (line 1080) with no sanitization or restrictions. This makes it possible for authenticated attackers, with Subscriber-level access and above, to modify arbitrary user meta fields on their own accounts, including sensitive fields like wp_user_level (to escalate to administrator-level legacy checks), plugin-specific authorization flags (e.g., _wpuf_user_active, aiowps_account_status), and billing/profile fields with unsanitized values (potentially enabling Stored XSS in admin contexts). Note that wp_capabilities cannot be directly exploited this way because it requires a serialized array value, but wp_user_level (a simple integer) and numerous plugin-specific meta keys are exploitable.
📍 영향받는 시스템
MStore API WordPress plugin versions up to and including 4.18.3
⚔️ 공격 벡터
Authenticated subscriber-level user sends malicious JSON to update_user_profile endpoint specifying arbitrary meta keys to bypass validation
🛡️ 대응 방법
Update MStore API plugin to version 4.18.4 or later, implement whitelist validation for allowed meta keys in update_user_profile function
🔧 검증 코드
If vulnerable version number (4.18.3 or earlier) is found in output, plugin requires immediate update; if no output, plugin is either patched or not installed
grep -r 'Version:' wp-content/plugins/mstore-api/mstore-api.php 2>/dev/null | grep -oE '4\.(0-9|1[0-7]|18\.[0-3])' && echo 'Vulnerable version detected'