CVE-2026-55485
nichePrivilege escalation via exposed session tokens in Piccolo Admin before 1.14.0
Piccolo Admin, a Python admin interface and CMS built on the Piccolo ORM, fails to keep session tokens secret in versions prior to 1.14.0 because the SessionsBase.token column is not marked secret and the admin API allows GET requests to configured user and session tables. In deployments that register the Sessions and User tables with create_admin, a non-superuser administrator can call GET /api/tables/sessions/, read another user's live session token, and replay it as the Cookie id value to impersonate a superuser. While impersonating a superuser, the attacker can permanently set the superuser flag to true on their own account row, gaining persistent privileged access to the admin interface and the data tables it manages. Only deployments that added the Sessions and User tables to create_admin are affected, and the attacker must already hold a valid low-privilege account on the system. No public proof-of-concept, CISA KEV listing, or confirmed in-the-wild exploitation is known; EPSS estimates a 0.4% probability of exploitation within 30 days.
What to do: Upgrade to Piccolo Admin 1.14.0 or later. As an interim mitigation, remove the Sessions and User tables from create_admin (or otherwise restrict GET access to those tables) for non-superusers. Administrators should also audit accounts for unexpected superuser=true flags and expire or rotate active session tokens if compromise is suspected, since an attacker's escalation persists.
| Piccolo Admin | All versions prior to 1.14.0 (fixed in 1.14.0); exploitable only in deployments that add the Sessions and User tables to create_admin |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Piccolo Admin is an admin interface and content management system for Python, built on top of Piccolo. Prior to 1.14.0, piccolo_admin/endpoints.py uses superuser_validators to block PUT, PATCH, DELETE, and POST requests by non-superusers but permits GET requests to configured user and session tables, while piccolo_api/session_auth/tables.py exposes SessionsBase.token because the token column is not secret. In deployments that add the Sessions and User tables to create_admin, a non-superuser administrator can call GET /api/tables/sessions/, obtain another user's live session token, replay it as the Cookie id value to impersonate a superuser, and permanently set superuser to true on the attacker's own row. This issue is fixed in version 1.14.0.
- Weakness
- CWE-200, CWE-269, CWE-863
- Vector
- CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.