CVE-2026-72822
KrytyczneCVSS 9.8Streszczenie
Pakiet Composer getgrav/grav-plugin-api przed wersją 1.0.13 (dotknięte <= 1.0.12) nie egzekwuje ograniczeń zakresu kluczy API na punkcie końcowym disable2fa. W przeciwieństwie do pokrewnego punktu generate2fa, disable2fa autoryzuje ścieżkę admin (nie-self) wyłącznie przez odczyty ACL (isSuperAdmin/hasPermission) i nigdy nie wywołuje requirePermission(), więc ograniczenie api_key_scopes nie jest stosowane. W rezultacie posiadacz klucza API o wąskim zakresie na koncie super lub konto nie-super, którego ACL zawiera api.users.write, może wymusić wyłączenie dwuskładnikowego uwierzytelniania na dowolnym koncie nie-super przez POST /api/v1/users/{user}/2fa/disable bez podawania kodu TOTP, co ułatwia przejęcie konta.
Ocena ryzyka
Atakujący może wyłączyć uwierzytelnianie dwuskładnikowe na kontach użytkowników, co może prowadzić do nieautoryzowanego dostępu i przejęcia kont.
Rekomendacja
Zaktualizuj wtyczkę Grav API do wersji 1.0.13 lub nowszej. Ogranicz dostęp do punktu disable2fa i monitoruj próby wyłączenia 2FA.
Oryginalny opis (angielski, źródło NVD)
The getgrav/grav-plugin-api Composer package before 1.0.13 (affected <= 1.0.12) fails to enforce API key scope caps on the disable2fa endpoint. Unlike the sibling generate2fa endpoint, disable2fa authorizes the admin (non-self) path solely via ACL reads (isSuperAdmin/hasPermission) and never invokes requirePermission(), so the api_key_scopes cap is never applied. As a result, a holder of a narrow-scope API key on a super account, or a non-super account whose ACL includes api.users.write, can force-disable two-factor authentication on any non-super target account via POST /api/v1/users/{user}/2fa/disable without providing a TOTP code, facilitating account takeover.

