{"id":"GHSA-rgmp-4873-r683","summary":"Pterodactyl TOTPs can be reused during validity window","details":"### Summary\nWhen a user signs into an account with 2FA enabled they are prompted to enter a token. When that token is used, it is not sufficiently marked as used in the system allowing an attacker that intercepts that token to then use it in addition to a known username/password during the token validity window.\n\nThis vulnerability requires that an attacker already be in possession of a valid username and password combination, and intercept a valid 2FA token (for example, during a screen share). The token must then be provided in addition to the username and password during the limited token validity window. The validity window is ~60 seconds as the Panel allows at most one additional window to the current one, each window being 30 seconds.","aliases":["CVE-2025-69197"],"modified":"2026-02-03T03:13:41.574395Z","published":"2026-01-06T17:20:57Z","database_specific":{"github_reviewed":true,"github_reviewed_at":"2026-01-06T17:20:57Z","nvd_published_at":"2026-01-06T01:16:01Z","cwe_ids":["CWE-287"],"severity":"MODERATE"},"references":[{"type":"WEB","url":"https://github.com/pterodactyl/panel/security/advisories/GHSA-rgmp-4873-r683"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2025-69197"},{"type":"WEB","url":"https://github.com/pterodactyl/panel/commit/032bf076d92bb2f929fa69c1bac1b89f26b8badf"},{"type":"PACKAGE","url":"https://github.com/pterodactyl/panel"},{"type":"WEB","url":"https://github.com/pterodactyl/panel/releases/tag/v1.12.0"}],"affected":[{"package":{"name":"pterodactyl/panel","ecosystem":"Packagist","purl":"pkg:composer/pterodactyl/panel"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.12.0"}]}],"versions":["v0.1.0-beta","v0.1.1-beta","v0.1.2-beta","v0.2.0-beta","v0.3.0-beta","v0.4.0-beta","v0.4.1-beta","v0.5.0","v0.5.0-rc.1","v0.5.0-rc.2","v0.5.1","v0.5.2","v0.5.3","v0.5.4","v0.5.5","v0.5.6","v0.5.7","v0.6.0","v0.6.0-beta.1","v0.6.0-beta.2","v0.6.0-beta.2.1","v0.6.0-rc.1","v0.6.1","v0.6.2","v0.6.3","v0.6.4","v0.7.0","v0.7.0-beta.1","v0.7.0-beta.2","v0.7.0-beta.3","v0.7.0-beta.4","v0.7.0-rc.1","v0.7.0-rc.2","v0.7.1","v0.7.10","v0.7.11","v0.7.12","v0.7.13","v0.7.14","v0.7.15","v0.7.16","v0.7.17","v0.7.18","v0.7.19","v0.7.2","v0.7.3","v0.7.4","v0.7.5","v0.7.6","v0.7.7","v0.7.8","v0.7.9","v0.8.0-alpha.1","v0.8.0-alpha.2","v1.0.0","v1.0.0-beta.1","v1.0.0-beta.2","v1.0.0-beta.3","v1.0.0-beta.4","v1.0.0-beta.5","v1.0.0-beta.6","v1.0.0-beta.7","v1.0.0-rc.1","v1.0.0-rc.2","v1.0.0-rc.3","v1.0.0-rc.4","v1.0.0-rc.5","v1.0.0-rc.6","v1.0.0-rc.7","v1.0.1","v1.0.2","v1.0.3","v1.1.0","v1.1.1","v1.1.2","v1.1.3","v1.10.0","v1.10.1","v1.10.2","v1.10.3","v1.10.4","v1.11.0","v1.11.0-rc.1","v1.11.0-rc.2","v1.11.1","v1.11.10","v1.11.11","v1.11.2","v1.11.3","v1.11.4","v1.11.5","v1.11.6","v1.11.7","v1.11.8","v1.11.9","v1.2.0","v1.2.1","v1.2.2","v1.3.0","v1.3.1","v1.3.2","v1.4.0","v1.4.1","v1.4.2","v1.5.0","v1.5.1","v1.6.0","v1.6.1","v1.6.2","v1.6.3","v1.6.5","v1.6.6","v1.7.0","v1.8.0","v1.8.1","v1.9.0","v1.9.1","v1.9.2"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/01/GHSA-rgmp-4873-r683/GHSA-rgmp-4873-r683.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N"}]}