PST-067: Gravatar refresh is an unthrottled server-side fetch any account can trigger #796
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#796
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found in the security audit of 2026-10-10 (
SECURITY-AUDIT-2026-10-10.md), run againstmainatc30851bfrom 8 to 10 October 2026, as PST-067. Severity: Informational.The text below is the audit's entry, unchanged apart from links to the other issues it names. The finding was produced by automated review and checked by a second automated pass; re-check it before acting on it.
src/postulo/accounts/views.py(368-383)Who can do it, and what they need. Any signed-in account with 'Use my Gravatar' ticked.
How it works.
POST /accounts/avatar/refresh/ repeatedly; each call makes the server request https://gravatar.com/avatar/<hash>?s=1024 through plugins.http.client() and decode the response image. There is no throttle on this view (capture, number collisions and recovery links have POSTULO_*_RATE limits; this does not).
Impact. The destination is fixed to gravatar.com so there is no SSRF; the cost is one outbound request and one image decode per POST, bounded by pictures.MAX_PIXELS. Denial of service is out of the threat model's scope, so informational only.
Verification (verdict: confirmed; severity after verification: Informational). No correction to file or lines. Remediation if wanted: spend a small per-account allowance (for example one that reuses throttle.fetch) in GravatarRefreshView and in the email_changed receiver.
Suggested remediation. Reuse core.throttle with a modest per-account rate (e.g. a few per hour) and ignore a refresh when gravatar_checked_at is very recent.
Fixed in
3f5964a87on main.