{"id":"CVE-2026-71293","aliases":["EUVD-2026-53378","GHSA-jppw-r5j3-xf7x"],"status":"published","title":"Statamic CMS Unguarded Exposure of 2FA Recovery Codes via Antlers current_user Variable","description":"Statamic CMS's user-augmentation resolver, AugmentedUser::get in src/Auth/AugmentedUser.php, contains an explicit case for the handle that returns the user's raw two-factor recovery codes with no access restriction.","severity":{"version":"3.1","score":6.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.00372,"percentile":0.31415,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-200","CWE-522"],"published":"2026-08-05T12:38:44Z","modified":"2026-11-11T02:49:05Z","affected":[{"source":"ghsa","ecosystem":"Packagist","package":"statamic/cms","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.0.0-alpha.1"},{"last_affected":"6.30.0"}]}]},{"source":"osv","ecosystem":"Packagist","package":"statamic/cms","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.0.0-alpha.1"},{"last_affected":"6.30.0"}]}],"versions":["v6.0.0","v6.0.0-alpha.1","v6.0.0-alpha.10","v6.0.0-alpha.11","v6.0.0-alpha.12","v6.0.0-alpha.13","v6.0.0-alpha.14","v6.0.0-alpha.15","v6.0.0-alpha.16","v6.0.0-alpha.17","v6.0.0-alpha.18","v6.0.0-alpha.19","v6.0.0-alpha.2","v6.0.0-alpha.20","v6.0.0-alpha.21","v6.0.0-alpha.3","v6.0.0-alpha.4","v6.0.0-alpha.5","v6.0.0-alpha.6","v6.0.0-alpha.7","v6.0.0-alpha.8","v6.0.0-alpha.9","v6.0.0-beta.1","v6.0.0-beta.2","v6.0.0-beta.3","v6.0.0-beta.4","v6.0.0-beta.5","v6.0.0-beta.6","v6.1.0","v6.10.0","v6.11.0","v6.12.0","v6.13.0","v6.14.0","v6.15.0","v6.16.0","v6.17.0","v6.18.0","v6.18.1","v6.19.0","v6.2.0","v6.2.1","v6.2.2","v6.2.3","v6.2.4","v6.2.5","v6.20.0","v6.20.1","v6.20.2","v6.20.3","v6.21.0","v6.22.0","v6.23.0","v6.24.0","v6.24.1","v6.24.2","v6.25.0","v6.26.0","v6.27.0","v6.27.1","v6.27.2","v6.28.0","v6.29.0","v6.3.0","v6.3.1","v6.3.2","v6.3.3","v6.30.0","v6.4.0","v6.4.1","v6.5.0","v6.6.0","v6.6.1","v6.6.2","v6.6.3","v6.7.0","v6.7.1","v6.7.2","v6.7.3","v6.8.0","v6.9.0"]}],"products":[{"vendor":"statamic","product":"cms"}],"references":[{"url":"https://github.com/statamic/cms","tags":["third-party-advisory","advisory","package"]},{"url":"https://github.com/statamic/cms/blob/master/src/Auth/AugmentedUser.php","tags":["third-party-advisory","advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-71293","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-jppw-r5j3-xf7x"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71293.json","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2026-71293","title":"Statamic CMS Unguarded Exposure of 2FA Recovery Codes via Antlers current_user Variable","description":"Statamic CMS's user-augmentation resolver, AugmentedUser::get in src/Auth/AugmentedUser.php, contains an explicit case for the handle that returns the user's raw two-factor recovery codes with no access restriction.","status":"published","published":"2026-08-05T12:38:44.666Z","modified":"2026-08-10T11:47:28.203Z","cvss":[{"version":"3.1","score":6.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-200"],"updated_at":"2026-11-02T14:19:49.199185Z"}],"euvd":[{"id":"EUVD-2026-53378","description":"Statamic CMS's user-augmentation resolver, AugmentedUser::get in src/Auth/AugmentedUser.php, contains an explicit case for the handle that returns the user's raw two-factor recovery codes with no access restriction.","status":"published","published":"2026-08-05T12:38:44Z","modified":"2026-08-10T11:47:28Z","cvss":[{"version":"3.1","score":6.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T18:02:05.732685Z"}],"ghsa":[{"id":"GHSA-jppw-r5j3-xf7x","title":"Statamic CMS exposes two-factor recovery codes through dynamic Antlers rendering","description":"Statamic CMS's user-augmentation resolver, AugmentedUser::get() in src/Auth/AugmentedUser.php, contains an explicit case for the `two_factor_recovery_codes` handle that returns the user's raw two-factor recovery codes with no access restriction: `if ($handle === 'two_factor_recovery_codes') { return new Value($this-\u003edata-\u003eget('two_factor_recovery_codes'), ...); }`. Unlike sensitive fields such as password/password_hash, which are excluded from AugmentedUser entirely, two_factor_recovery_codes is neither excluded from augmentation nor present in Statamic's Antlers variable guard lists (guardedVariablePatterns/guardedContentVariablePatterns in src/Providers/ViewServiceProvider.php, and the runtime GlobalRuntimeState guard paths), which by default only guard config.app.key. On any Antlers template field where raw/dynamic template rendering is enabled for a given field (an admin/developer-configured, blueprint-level field option), a template such as `{{ current_user.two_factor_recovery_codes }}{{ value }}|{{ /current_user.two_factor_recovery_codes }}` renders the viewing user's own 2FA recovery codes directly into the HTML response, allowing an attacker who can view or capture that response (e.g. via a shared/observable page, or a crafted link causing a victim to render it) to obtain the codes and bypass 2FA. Exploitation requires that dynamic Antlers rendering already be enabled on a field the target user's data flows through, which is a blueprint-configuration privilege rather than a standard content-editing permission.","status":"published","published":"2026-08-05T15:32:21Z","modified":"2026-09-01T19:56:32Z","cvss":[{"version":"3.1","score":6.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-200","CWE-522"],"updated_at":"2026-11-02T14:41:08.980668Z"}],"nvd":[{"id":"CVE-2026-71293","description":"Statamic CMS's user-augmentation resolver, AugmentedUser::get in src/Auth/AugmentedUser.php, contains an explicit case for the handle that returns the user's raw two-factor recovery codes with no access restriction.","status":"published","published":"2026-08-05T13:24:54.06Z","modified":"2026-10-23T21:10:00.157Z","cvss":[{"version":"3.1","score":6.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-200"],"updated_at":"2026-11-02T14:12:35.031043Z"}],"osv":[{"id":"CVE-2026-71293","title":"Statamic CMS Unguarded Exposure of 2FA Recovery Codes via Antlers current_user Variable","description":"Statamic CMS's user-augmentation resolver, AugmentedUser::get in src/Auth/AugmentedUser.php, contains an explicit case for the handle that returns the user's raw two-factor recovery codes with no access restriction.","status":"published","published":"2026-08-05T12:38:44.666Z","modified":"2026-11-11T02:49:05.351271078Z","cvss":[{"version":"3.1","score":6.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-200"],"updated_at":"2026-11-11T03:21:18.82478Z"},{"id":"GHSA-jppw-r5j3-xf7x","title":"Statamic CMS exposes two-factor recovery codes through dynamic Antlers rendering","description":"Statamic CMS's user-augmentation resolver, AugmentedUser::get() in src/Auth/AugmentedUser.php, contains an explicit case for the `two_factor_recovery_codes` handle that returns the user's raw two-factor recovery codes with no access restriction: `if ($handle === 'two_factor_recovery_codes') { return new Value($this-\u003edata-\u003eget('two_factor_recovery_codes'), ...); }`. Unlike sensitive fields such as password/password_hash, which are excluded from AugmentedUser entirely, two_factor_recovery_codes is neither excluded from augmentation nor present in Statamic's Antlers variable guard lists (guardedVariablePatterns/guardedContentVariablePatterns in src/Providers/ViewServiceProvider.php, and the runtime GlobalRuntimeState guard paths), which by default only guard config.app.key. On any Antlers template field where raw/dynamic template rendering is enabled for a given field (an admin/developer-configured, blueprint-level field option), a template such as `{{ current_user.two_factor_recovery_codes }}{{ value }}|{{ /current_user.two_factor_recovery_codes }}` renders the viewing user's own 2FA recovery codes directly into the HTML response, allowing an attacker who can view or capture that response (e.g. via a shared/observable page, or a crafted link causing a victim to render it) to obtain the codes and bypass 2FA. Exploitation requires that dynamic Antlers rendering already be enabled on a field the target user's data flows through, which is a blueprint-configuration privilege rather than a standard content-editing permission.","status":"published","published":"2026-08-05T15:32:21Z","modified":"2026-09-01T20:10:46.483273Z","cvss":[{"version":"3.1","score":6.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-200","CWE-522"],"updated_at":"2026-11-02T15:46:50.687609Z"}]}}
