[pentest2] Password-protected pastes: unauthenticated password guessing via GET query params bypasses rate limiting #81
Notifications
Total Time Spent: 25 seconds
poslop
25 seconds
No due date set.
Dependencies
No dependencies set.
Reference: poslop/palette#81
Reference in New Issue
Block a user
Severity: High
Target: palette-dev v0.2.1 (10.0.1.47, Host: palette-dev.archfox.org)
The password check accepts the password via URL query string (
?password=) on both/api/pastes/{id}and/{id}//raw/{id}. This path performs no rate limiting at all, unlike the POST password form (rate-limited ~5 attempts/burst, keyed per paste).Repro (verified):
Full proof-of-concept: a 4-digit PIN-protected paste was cracked by exhaustive search (10k attempts, ~95 s, no throttling):
password: "4321"; brute-forced via GET query; recovered4321and read full content.Fix: rate-limit password verification per paste regardless of transport (query/form), or drop query-string password support entirely (also avoids password leaking into access logs/Referer).
Confirmed live on v0.2.1 dev: 8 consecutive wrong passwords via GET
?password=all returned 401 with zero 429s, then the correct password succeeded. The POST form path rate limits but the API GET path does not. Fix: apply the same per-IP+per-paste unlock rate limiter to ALL password checks regardless of transport (header, query, or form).Fixed and merged to main (v0.2.2 pending release).