Will It Vibe logoWill It Vibe?
AUTHZ-012Medium severity-8 points

Plaintext password comparison (JS/TS)

Part of Security, which counts for 30% of the overall score. When this check fires it deducts 8 points from that category, once per scan, no matter how many places it turns up.

What it detects

A password field is compared with == or === against another value, which means passwords are stored and checked in plaintext rather than verified against a hash.

Why it matters

Comparing a password with == or === means the stored password is being checked in plaintext instead of verified against a salted hash. That implies passwords are stored recoverable, so a database leak exposes every credential directly. This is a heuristic: it flags the comparison shape and cannot tell a plaintext check from a value that already holds a hash, so confirm what is being compared.

How to fix it

Store only a salted hash (bcrypt or argon2) and verify with the library's compare function (bcrypt.compare, argon2.verify), which also runs in constant time. Never compare the raw password against a stored value with ==. Migrate existing plaintext passwords by rehashing them at the next successful login.

The paid report includes a ready-to-paste prompt for your AI coding agent for every check it finds, pointed at the exact findings from your scan. See pricing

Does your repo trip this check?

Paste a GitHub URL or drop a project folder. Scans run in your browser and take seconds.

Scan your repo

Related Security checks