+ "details": "### Summary\nGuest users can access Config Sync updater `index`, obtain signed `data`, and execute state-changing Config Sync actions (`regenerate-yaml`, `apply-yaml-changes`) without authentication.\n\n### Details\n\n`ConfigSyncController` extends `BaseUpdaterController`, and the base updater is anonymously accessible for control panel requests. `index` emits signed updater state (`data`), which can be reused by guests in subsequent requests.\n\nSensitive actions that are reachable via this method are `actionApplyYamlChanges`, `actionRegenerateYaml`, `applyExternalChanges`, and `regenerateExternalConfig`.\n\n#### Reproduction steps\n\n1. Guest POST to:\n\n http POST /admin/actions/config-sync/index\n\n 2. Extract data from returned JS state:\n\n Craft.updater = ... setState({\"data\":\"<signedData>\", ...});\n\n 3. Reuse data as a guest:\n\n```\n POST /admin/actions/config-sync/regenerate-yaml\n data=<signedData>&<csrfParam>=<csrfToken>\n```\n\n or\n\n```\n POST /admin/actions/config-sync/apply-yaml-changes\n data=<signedData>&<csrfParam>=<csrfToken>\n```\n\n 4. Observe completed response and state/file changes.\n\n### Impact\n\nUnauthenticated users can execute project configuration sync operations that should be restricted to trusted admin/deployment contexts.\n\nDepending on the pending YAML/config state, this can cause unauthorized config state transitions and a service integrity risk.\n\n### Resources\n\nhttps://github.com/craftcms/cms/commit/7f0ead833f7",
0 commit comments