Poweradmin maps OIDC identities into local users through oidc_user_links.oidc_subject plus provider_id. In the MySQL schema, the OIDC link table explicitly uses utf8mb4_unicode_ci, which is case-insensitive and accent-insensitive. OIDC sub is a stable external subject identifier and should be matched byte-for-byte within the issuer/provider scope.
The confirmed local PoC used two different OIDC users:
victim-loginvictím-login (í, U+00ED)MySQL reported those two subjects as equal under utf8mb4_unicode_ci. After the victim linked their OIDC account, the attacker authenticated to the same provider with the attacker's own password and Poweradmin resolved the session to the victim's local account.
targets/poweradmin git e1f9c9a8.4.10, character_set_server=utf8mb4, collation_server=utf8mb4_unicode_ciAffected Entry Point:
GET /oidc/login?provider=generic
GET /oidc/callback?code=...&state=...
Relevant request properties:
sub that collides with a victim's linked subsub stored and looked up as oidc_user_links.oidc_subjectoidc_user_links.oidc_subject uses an accent-insensitive collationThe MySQL schema defines the OIDC link table with utf8mb4_unicode_ci:
-- sql/poweradmin-mysql-db-structure.sql:341-356
CREATE TABLE `oidc_user_links` (
`user_id` INT(11) NOT NULL,
`provider_id` VARCHAR(50) NOT NULL,
`oidc_subject` VARCHAR(255) NOT NULL,
...
UNIQUE KEY `unique_subject_provider` (`oidc_subject`,...
4.2.54.3.4Exploitability
AV:NAC:LPR:LUI:NScope
S:UImpact
C:HI:HA:N8.1/CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N