← All posts
leaked secrets scanner cursorcursor securitysecret leak detectionAI app securitygitleaks

Leaked Secrets Scanner Cursor: How to Find Exposed Keys Fast

O

OverMCP Team

Quick answer

To check for leaked secrets in a Cursor-built app, use a leaked secrets scanner cursor tool that scans your entire codebase for exposed API keys, tokens, and credentials. Run the scan both locally (with gitleaks or trufflehog) and via a cloud service like OverMCP's free secret leak scanner to catch hardcoded secrets before they reach production.

What to check first

Before deploying any Cursor-generated code, run through this checklist to spot leaked secrets:

  • [ ] Scan `.env` files — Never commit them. Ensure .env is in .gitignore.
  • [ ] Check hardcoded API keys — Search for patterns like sk-, AIza, ghp_, AKIA, sk_live_, xoxb-.
  • [ ] Review client-side JavaScript — In Next.js, secrets in getServerSideProps or API routes may leak to the browser if improperly used.
  • [ ] Inspect Vercel environment variables — Verify no secrets are exposed in build logs or client bundles.
  • [ ] Audit Git history — Even if you removed a secret, it may still exist in an earlier commit.
  • [ ] Check third-party integrations — OpenAI, Stripe, Supabase, Firebase keys are common leaks in AI-built apps.
  • Step-by-step fix

    1. Use a local leaked secrets scanner

    Install gitleaks and run it on your project:

    # Install gitleaks (macOS)
    brew install gitleaks
    
    # Scan your repo for secrets
    gitleaks detect --source . --verbose

    This will output any lines containing potential secrets. For example:

    ○ [1] 2025-02-20T10:00:00Z    secret=sk-proj-abc123...    file=src/utils/openai.ts

    2. Automate with a pre-commit hook

    Add a pre-commit hook to prevent committing secrets in the first place. Create .git/hooks/pre-commit:

    #!/bin/sh
    gitleaks detect --source . --verbose 2>&1 | grep -q "leaks found"
    if [ $? -eq 0 ]; then
      echo "❌ Leaked secrets detected! Commit blocked."
      exit 1
    fi

    Make it executable: chmod +x .git/hooks/pre-commit.

    3. Scan your entire Git history

    Secrets from early commits are common in vibe-coded apps. Run:

    gitleaks detect --source . --verbose --log-opts="--all"

    This scans every commit. If you find a leak, rotate the key immediately and use git filter-branch or BFG Repo-Cleaner to remove it from history.

    4. Use a cloud-based leaked secrets scanner

    For a more comprehensive check, especially for client-side exposure, use OverMCP's secret leak scanner. It scans your deployed app's JavaScript for exposed secrets that gitleaks might miss (e.g., secrets in minified code).

    5. Fix a leaked OpenAI API key

    If you find an exposed OpenAI key like sk-proj-...:

  • Rotate the key immediately in the OpenAI dashboard.
  • Remove the hardcoded key and use environment variables:
  • // ❌ Bad: hardcoded
    const openai = new OpenAI({ apiKey: "sk-proj-abc123" });
    
    // ✅ Good: environment variable
    const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
  • Add .env.local to .gitignore and set the variable in your hosting platform (Vercel, Netlify, etc.).
  • 6. Monitor continuously

    After fixing, set up continuous security monitoring to alert you if new secrets leak after future commits or deployments.

    Common mistakes

    1. Committing `.env` files

    Cursor often generates .env.example files, but beginners accidentally rename or copy them to .env and commit. Always double-check your .gitignore includes .env and .env.local.

    2. Hardcoding keys in API route handlers

    A common pattern in Cursor-built Next.js apps:

    // pages/api/chat.ts
    export default async function handler(req, res) {
      const openai = new OpenAI({ apiKey: "sk-..." }); // Leaked!
      // ...
    }

    This key is server-side only, but if you accidentally import this file in a client component, the key becomes public. Always use environment variables and never import server-only code on the client.

    3. Exposing secrets in client-side bundle

    Even if you use environment variables in Next.js, prefix them with NEXT_PUBLIC_ only if they are meant to be public. Any non-prefixed variable is safe, but if you mistakenly use a secret in a useEffect or client component, it gets bundled.

    4. Ignoring Git history

    Many developers delete a secret from the latest commit but forget that it lives in an earlier commit. Attackers can clone the repo and check git log -p. Always rotate the key and purge history.

    5. Using `console.log` for debugging

    Cursor often adds temporary console.log statements that print secrets. These can end up in production logs. Search for console.log before deploying.

    Why leaked secrets are dangerous in AI-built apps

    Cursor and similar AI coding tools generate code quickly, but they don't enforce security best practices. They might hardcode a Stripe secret key or an OpenAI API key because that's the fastest way to get a working prototype. If you deploy without scanning, you risk:

  • Account takeover — Attackers use your OpenAI key to run up massive bills.
  • Data breaches — Exposed database credentials can lead to full data exfiltration.
  • Financial loss — Stripe keys allow attackers to refund or charge customers.
  • A free AI app security scanner like OverMCP can catch these leaks before they cause damage.

    FAQ

    What is the best leaked secrets scanner for Cursor?

    The best approach combines local tools like gitleaks or trufflehog with a cloud scanner like OverMCP's secret leak scanner that checks your deployed app for client-side exposure.

    Can I scan my Cursor app for free?

    Yes. OverMCP offers a free secret leak scanner that scans your public URL for exposed secrets. You can also use open-source tools like gitleaks for local scanning.

    How do I remove a leaked secret from Git history?

    Use BFG Repo-Cleaner or git filter-branch to remove the secret from all commits. Then force push to overwrite history. Example with BFG:

    java -jar bfg.jar --replace-text passwords.txt my-repo.git

    Is your app secure?

    Free scan in 30 seconds. No signup needed.

    Scan My App Free