From soundcheck
Detects missing security controls like rate limiting, uniform auth errors, re-authentication, and server-controlled workflows in auth and sensitive operations.
npx claudepluginhub thejefflarson/soundcheck --plugin soundcheckThis skill uses the workspace's default tool permissions.
Catches security controls that were never designed in. Missing rate limiting,
Detects OWASP A04:2021 Insecure Design vulnerabilities in PHP code: missing rate limiting, account lockout, CAPTCHA, TOCTOU races, business logic flaws, threat modeling gaps.
Provides OWASP Top 10 guidelines, secure Python/Flask coding patterns, prevention strategies, and remediation for access control and cryptographic vulnerabilities.
Audits and hardens authentication code against security best practices. Covers credential storage, error handling, sessions, input validation, OAuth/OIDC, MFA/passkeys, rate limiting, CSRF, and HTTP headers.
Share bugs, ideas, or general feedback.
Catches security controls that were never designed in. Missing rate limiting, skippable workflow steps, and unenforced re-authentication enable account takeover, fraud, and privilege escalation.
def login(user, pw): ... — no rate limiting or lockoutif step == "confirm_payment": process() — client-supplied step skips validationif user_exists: "Invalid password" else: "User not found" — reveals account existenceFlag the vulnerable code and explain the risk. Then suggest a fix that establishes these properties:
?step=confirm. The server owns the progression.Anchor — shape, not implementation:
endpoint login(user, pw, ip):
require(rate_limiter.allow("login:" + ip)) # every cred endpoint
require(not is_locked(user))
valid = constant_time_compare(hash(pw), stored_or_dummy)
if not valid: record_failure(user); respond_uniform_error()
...
endpoint change_email(new_email, current_pw):
require(reauth(session.user, current_pw)) # step up, not just session
...
Confirm these properties hold for every endpoint present (language-agnostic; criteria apply only to patterns actually present):