Skip to content

Back to the catalog

GenAI App Security Checklist
github.comrepo

GenAI App Security Checklist

A 258-item, 17-category security checklist targeting vulnerabilities that AI coding assistants (Claude, GPT, Gemini, Grok, Mistral, Copilot) commonly introduce, each item tagged with severity and a static/runtime/config detection method. Includes a companion prompt.md that turns the checklist into an automated scan runnable via Claude Code, Gemini CLI, or OpenAI Codex CLI against a local codebase, covering issues like prompt injection via user-supplied system prompts, missing auth middleware, hardcoded secrets, exposed API keys in frontend env vars, LLM-based auth decisions, unsandboxed agentic shell/filesystem access, and vector DB tenant isolation gaps.

TL;DR 258-item checklist + AI-runnable prompt for finding the security bugs AI coding assistants tend to introduce, including LLM-specific issues like prompt injection and vector DB isolation gaps.
Document

What it is

The GenAI App Security Checklist (a-leks/genai-app-security-checklist, Apache 2.0) plus its prompt.md. The summary describes the coverage; what it omits are the actual invocation commands, the exact severity/detection legend, and the report format — the things that determine whether you can run this in five minutes.

How it works

prompt.md instructs an AI model to walk all 258 items against your local codebase and emit a report with file paths, line numbers, snippets, and remediations. The CLIs read your project directory directly — no upload. Each item carries one severity and one detection method:

  • 🔴 Critical (exploitable without auth → data loss/account takeover), 🟠 High, 🟡 Medium, 🟢 Low
  • [S] static (grep/AST/review), [R] runtime (running local/staging server), [C] config/infra (env vars, deploy settings, provider dashboard)

The [R] and [C] tags matter: this is not purely static — some items need a running server or infrastructure access to check, so a single static pass leaves those unverified.

What to do

Run from inside your project directory:

claude "$(curl -s https://raw.githubusercontent.com/a-leks/genai-app-security-checklist/main/prompt.md)"
gemini "$(curl -s https://raw.githubusercontent.com/a-leks/genai-app-security-checklist/main/prompt.md)"
codex "$(curl -s https://raw.githubusercontent.com/a-leks/genai-app-security-checklist/main/prompt.md)"

Installs: claude.ai/code, npm install -g @google/gemini-cli, npm install -g @openai/codex. For large repos, attach the whole repo via Claude.ai Projects or ChatGPT Projects instead of pasting file-by-file. For CI, wrap the prompt in a script that passes changed files to the API (see CONTRIBUTING.md for a reference pattern).

The sample report output is worth knowing before you commit: a severity-count summary table plus per-finding blocks. Note it also emits Pass and N/A counts (198 and 25 in the example), so a clean-looking run still surfaces what was skipped rather than silently passing.

Caveats

  • The project explicitly states: run only against codebases you own or are authorized to audit.
  • Each of these commands pipes remote prompt.md straight into an agent via curl — you are executing an unpinned upstream prompt against your source; review it, or pin a commit, before trusting it in automation.
  • Positioning is detection-layer only: it maps to OWASP LLM Top 10, MITRE ATLAS, and NIST AI RMF but claims to add the "how to check" that those omit — it is not itself a threat taxonomy or governance framework.

Technologies named here

Techniques named here

  • Missing auth middleware on protected routes
  • Hardcoded secrets
  • Prompt Injection
  • Indirect prompt injection
  • LLM used for auth decisions
  • API key in frontend
  • User-controlled model parameter
  • Agentic shell or filesystem access without sandbox
  • Vector DB with no tenant isolation
  • Vector databases with no tenant isolation