Skip to content

feat: Security admin accounts - #495

Open
pumpi wants to merge 3 commits into
mainfrom
feat/security-admin-accounts
Open

pumpi wants to merge 3 commits into
mainfrom
feat/security-admin-accounts

Conversation

@pumpi

@pumpi pumpi commented Oct 23, 2026

Copy link
Copy Markdown

Adds GET /api/_action/frosh-tools/security/accounts behind frosh_tools_security:read, listing admin users, integrations and ACL roles so Shopmon can diff snapshots and alert on new accounts or privilege escalation.

Exposes ids and security relevant attributes only - no usernames, names, e-mail addresses or access keys. Aggregated across many shops those would form a credential stuffing list, so accounts are resolved to a person via the returned adminPath instead. Read via DBAL so no personal column is loaded in the first place.

App integrations report the ACL role attached through app.acl_role_id, which Shopware resolves with precedence over integration_role.

@pumpi
pumpi requested a review from shyim October 23, 2026 21:07
@pumpi
pumpi force-pushed the feat/security-admin-accounts branch from cbc8936 to 28c5381 Compare October 23, 2026 21:10
@greptile-apps

greptile-apps Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge based on the reviewed changes.

Summary

Adds an account inventory endpoint for external monitoring.

  • Security monitoring can fetch a snapshot of users, integrations, and roles.

No actionable new issues were established. Both earlier, unnumbered findings are addressed in the current code.

Reviews (3) · Last reviewed commit: "feat: add masked e-mail to admin account..." · Reviewed by Greptile

Comment thread tests/Controller/SecurityControllerTest.php Outdated
Comment thread tests/Components/Security/AdminAccountServiceTest.php Outdated
@shyim

shyim commented Oct 24, 2026

Copy link
Copy Markdown
Member

@schneider-felix what do you think here. For me it feels little bit like useless if we canot say which excactly admin user got created and so on 🙈

A UUID alone is useless once the row is gone: monitoring can report that an admin account disappeared, but nobody can tell which one. The star count is fixed at three per part, so the real length stays hidden - combined with the shop's publicly known mail domain it would often be enough to reconstruct the address.
@schneider-felix

Copy link
Copy Markdown
Member

I don't think the credential stuffing problem would be too bad but the concern is definitly valid.

Here's my wild idea, how we could solve it:
Create a hash of the e-mail or username (you could even "pepper" it with a value like the APP_URL). That's the value which would then be stored in shopmon. When something happens, shopmon could retrieve the real username on demand so we would never have to store it.

On the other hand: I think if shopmon get compromised, credential stuffing is the least of our concerns 😅

@schneider-felix

Copy link
Copy Markdown
Member

Or, why don't we just send a webhook to shopmon?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants