Back to skill

Security audit

Auth0 Flask

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly legitimate Auth0 Flask guidance, but bundled setup and evaluation tooling includes high-impact actions that need review before installation.

Install only if you are comfortable reviewing the setup steps manually. Avoid running the automated setup script as-is; install the Auth0 CLI from a pinned, verified release or package manager path. Do not run the bundled eval runner on projects containing secrets unless .env and other credential files are excluded and you accept sending selected source content to an external model.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T03 · Remote Payload Retrieval and Execution

Error
Location
references/setup.md:44
Finding
Mutable Remote Installation Script Is Executed Directly Through a Shell<![CDATA[ ## Vulnerability Details **File Location**: `references/setup.md:44-49` **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: High ### Vulnerable Code ```bash # Install Auth0 CLI if ! command -v auth0 &> /dev/null; then [[ "$OSTYPE" == "darwin"* ]] && brew install auth0/auth0-cli/auth0 || \ curl -sSfL https://raw.githubusercontent.com/auth0/auth0-cli/main/install.sh | sh -s -- -b /usr/local/bin fi ``` ### Technical Analysis The setup guide downloads `install.sh` from the mutable `main` branch of an external GitHub repository and immediately pipes it into `sh`. The downloaded content is neither displayed for review nor verified against a pinned cryptographic checksum or signature. Although the URL belongs to the official Auth0 GitHub organization, using a mutable branch means that the effective code executed by the Skill can change after the Skill itself has been reviewed. Compromise of the upstream repository, maintainer account, release process, or delivery channel could therefore turn this installation command into arbitrary shell execution. The command also requests installation into `/usr/local/bin`, which is a system-wide executable directory. This exceeds the minimum privileges required to document or configure a Flask integration. If the setup is run by a privileged agent or inside a root container, the remote script can modify system files with the agent's full privileges. This is a supply-chain execution weakness rather than evidence that the current Auth0 script is intentionally malicious. ### Attack Path 1. An attacker compromises the upstream repository, a maintainer account, or another component capable of changing the contents returned for `main/install.sh`. 2. The attacker inserts arbitrary commands into the remote installation script. 3. A user or agent follows the automated setup instructions on a system without the `auth0` command. 4. `curl` retrieves the attacker-controlled content. 5. The conten ...[truncated 966 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not pipe remote content directly into a shell. 2. Prefer a trusted package manager or a versioned official release package. 3. Pin the installer or binary to an immutable release version or commit rather than `main`. 4. Download the artifact separately and verify a publisher-provided SHA-256 checksum or cryptographic signature before execution. 5. Present the exact command and source to the user and obtain explicit confirmation before installing software. 6. Install into a user-owned directory such as `$HOME/.local/bin` unless system-wide installation is explicitly required. 7. Avoid automatically invoking privileged installation paths from an agent-driven setup. 8. A safer pattern is: ```bash VERSION="<pinned-version>" INSTALLER="$(mktemp)" curl --proto '=https' --tlsv1.2 -fL \ "https://raw.githubusercontent.com/auth0/auth0-cli/<immutable-commit>/install.sh" \ -o "$INSTALLER" printf '%s %s\n' "<publisher-verified-sha256>" "$INSTALLER" | sha256sum -c - less "$INSTALLER" sh "$INSTALLER" -b "$HOME/.local/bin" rm -f "$INSTALLER" ``` The checksum must come from an independently authenticated, publisher-controlled release channel. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
tests/run-evals.mjs:44
Finding
Evaluation Runner Can Upload Project Files and Environment Files to an External Model<![CDATA[ ## Vulnerability Details **File Location**: `tests/run-evals.mjs:44-84`, `tests/run-evals.mjs:228-255`, and `tests/run-evals.mjs:408-428` **Vulnerability Type**: Sensitive-data exposure through overly broad file collection and external model invocation **Risk Level**: High ### Vulnerable Code The source-file allowlist explicitly includes environment files: ```javascript const SOURCE_EXTENSIONS = new Set([ ".js", ".ts", ".jsx", ".tsx", ".mjs", ".cjs", ".swift", ".kt", ".java", ".cs", ".go", ".py", ".rb", ".php", ".dart", ".vue", ".svelte", ".astro", ".gradle", ".kts", ".xml", ".plist", ".json", ".env", ".yaml", ".yml", ".toml", ".properties", ".html", ".css", ".scss", ".csproj", ".sln", ".lock", ".pbxproj", ".resolved", ".podspec", ]) function readAllSources(dir) { const files = collectSourceFiles(dir) const contents = [] for (const f of files) { try { contents.push({ path: f, content: fs.readFileSync(f, "utf-8") }) } catch { // skip unreadable files } } return contents } ``` The judge concatenates up to 20 collected files into a prompt sent through the Claude CLI: ```javascript async function gradeJudge(grader, sources, workspaceDir) { const fileSummary = sources .slice(0, 20) .map((s) => `--- ${path.relative(workspaceDir, s.path)} ---\n${s.content.slice(0, 3000)}`) .join("\n\n") let questionBlock = grader.question if (grader.examples) { questionBlock += `\n\n## Examples\n${grader.examples}` } const judgePrompt = `You are evaluating code quality. Review the following source files and answer this question: ${questionBlock} Answer with exactly "YES" or "NO" on the first line, followed by a brief explanation. ${fileSummary}` const judgeArgs = ["-p", judgePrompt, "--permission-mode", "dontAsk", "--no-session-persistence"] if (MODEL) judgeArgs.push("--model", MODEL) try { const { stdout } = await $({ timeout: 60000, })`claude ${judgeArgs}` ``` Age ...[truncated 3884 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove `.env` from `SOURCE_EXTENSIONS` and explicitly reject all secret-bearing file patterns, including: - `.env`, `.env.*`, and `*.env` - PEM, key, certificate, keystore, and credential files - `.npmrc`, `.pypirc`, cloud credential directories, and deployment secrets 2. Do not recursively copy a whole project by default. Build a minimal allowlist of source files required for the evaluation. 3. Respect `.gitignore` and add a dedicated evaluation ignore file. 4. Before any external model invocation, display which files will be uploaded and require informed user confirmation. 5. Add local secret scanning and redact high-entropy tokens, authorization headers, private keys, passwords, and known credential formats. 6. Replace `.slice(0, 20)` with an explicit, deterministic allowlist. An arbitrary count does not constitute a security boundary. 7. Run agents with the smallest tool set required. Disable `WebFetch` and unrestricted `Bash` unless a particular evaluation requires them. 8. Avoid `--permission-mode dontAsk` for network access and sensitive file reads. Require approval for outbound requests and command execution. 9. Execute evaluations in a sandbox with outbound network access denied by default and with no inherited sensitive environment variables. 10. Document clearly that model-based grading transmits selected source content to an external service. 11. Add automated tests proving that `.env`, `.env.local`, private keys, and ignored files never enter `judgePrompt`. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:212
Finding
Generated Flask Profile Route Renders Unescaped Identity Claims as HTML<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:212-224` **Vulnerability Type**: Cross-site scripting caused by unsafe HTML construction **Risk Level**: Medium ### Vulnerable Code ```python @app.route("/profile") async def profile(): user = await auth0.get_user() if user is None: return redirect("/login") return ( f"<h1>{user['name']}</h1>" f"<p>Email: {user['email']}</p>" f"<img src='{user['picture']}' alt='{user['name']}' width='100' />" f"<p><a href='/logout'>Logout</a></p>" ) ``` ### Technical Analysis The example constructs an HTML response with Python f-strings and inserts the `name`, `email`, and `picture` identity claims without contextual escaping. Flask/Jinja templates escape untrusted values by default, but directly returning an interpolated string bypasses that protection. A value containing HTML markup, quote characters, or event-handler attributes can alter the generated document. The `picture` field is particularly sensitive because it is placed inside a single-quoted HTML attribute. A value containing a single quote can terminate the `src` attribute and add a new attribute such as an event handler. The `name` value is used in both element content and an attribute, requiring different contextual escaping rules. OIDC claims should not be assumed safe merely because they originate through Auth0. They may derive from user-editable upstream identity-provider records, social profiles, migration scripts, custom claims, or administrative metadata. ### Attack Path 1. An attacker or compromised identity provider causes an identity claim to contain an HTML payload, for example a `picture` value that terminates the `src` attribute and adds an `onerror` handler. 2. The affected user authenticates through Auth0. 3. The claim is stored in the application's session and returned by `auth0.get_user()`. 4. The user opens `/profile`. 5. The route interpolates the claim directly into an ...[truncated 1107 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Use a Jinja template and rely on its default autoescaping rather than constructing HTML with f-strings: ```python from flask import render_template @app.route("/profile") async def profile(): user = await auth0.get_user() if user is None: return redirect("/login") return render_template("profile.html", user=user) ``` ```html <!-- templates/profile.html --> <h1>{{ user.name }}</h1> <p>Email: {{ user.email }}</p> <img src="{{ user.picture }}" alt="{{ user.name }}" width="100"> <p><a href="{{ url_for('logout') }}">Logout</a></p> ``` Additional hardening should include: 1. Validate `picture` as an absolute HTTPS URL with an approved scheme and, where appropriate, an approved host. 2. Never apply Jinja's `safe` filter to identity claims. 3. Add a restrictive Content Security Policy that disallows inline scripts and event handlers. 4. Avoid exposing access tokens or sensitive session data to browser-side JavaScript. 5. Add tests using claims containing `<`, `>`, `"`, `'`, and event-handler payloads, and verify they are rendered only as escaped text. 6. Apply the same escaping correction to any other route that interpolates identity claims into raw HTML strings. ]]>
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (44)

Credential Access

High
Category
Privilege Escalation
Content
| `start_interactive_login` | `await auth0.start_interactive_login()` | Returns authorization URL string — wrap in `redirect()` |
| `complete_interactive_login` | `await auth0.complete_interactive_login(str(request.url))` | Processes the callback URL, exchanges code for tokens |
| `get_user` | `await auth0.get_user()` | Returns current session user dict or `None` |
| `get_access_token` | `await auth0.get_access_token()` | Returns the access token for calling external APIs |
| `logout` | `await auth0.logout()` | Returns Auth0 logout URL string |

---
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
### get_access_token()

Retrieves the access token for calling external APIs. Handles token refresh automatically if a refresh token is available and the access token is expired.

```python
access_token = await auth0.get_access_token()
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
## Calling External APIs

### Get Access Token

```python
import httpx
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
try:
        access_token = await auth0.get_access_token()
    except Exception as e:
        return f"Access token error: {e}", 401

    async with httpx.AsyncClient() as client:
        response = await client.get(
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
try:
        access_token = await auth0.get_access_token()
    except Exception as e:
        return f"Access token error: {e}", 401

    async with httpx.AsyncClient() as client:
        response = await client.get(
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
try:
        access_token = await auth0.get_access_token()
    except Exception as e:
        return f"Access token error: {e}", 401

    async with httpx.AsyncClient() as client:
        response = await client.get(
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
Before writing credentials, check which env files exist:

```bash
test -f .env.local && echo "ENV_LOCAL_EXISTS" || echo "ENV_LOCAL_NOT_FOUND"
test -f .env && echo "ENV_EXISTS" || echo "ENV_NOT_FOUND"
```
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
Before writing credentials, check which env files exist:

```bash
test -f .env.local && echo "ENV_LOCAL_EXISTS" || echo "ENV_LOCAL_NOT_FOUND"
test -f .env && echo "ENV_EXISTS" || echo "ENV_NOT_FOUND"
```
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
Before writing credentials, check which env files exist:

```bash
test -f .env.local && echo "ENV_LOCAL_EXISTS" || echo "ENV_LOCAL_NOT_FOUND"
test -f .env && echo "ENV_EXISTS" || echo "ENV_NOT_FOUND"
```
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` exists, ask:
  - Question: "A `.env.local` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env.local" / "No, I'll update it manually"

- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` exists, ask:
  - Question: "A `.env.local` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env.local" / "No, I'll update it manually"

- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` exists, ask:
  - Question: "A `.env.local` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env.local" / "No, I'll update it manually"

- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env" / "No, I'll update it manually"

- If neither exists, ask:
  - Question: "This setup will create a `.env` file containing Auth0 credentials (AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_SECRET) and a placeholder for AUTH0_CLIENT_SECRET. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env" / "No, I'll update it manually"

- If neither exists, ask:
  - Question: "This setup will create a `.env` file containing Auth0 credentials (AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_SECRET) and a placeholder for AUTH0_CLIENT_SECRET. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env" / "No, I'll update it manually"

- If neither exists, ask:
  - Question: "This setup will create a `.env` file containing Auth0 credentials (AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_SECRET) and a placeholder for AUTH0_CLIENT_SECRET. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env" / "No, I'll update it manually"

- If neither exists, ask:
  - Question: "This setup will create a `.env` file containing Auth0 credentials (AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_SECRET) and a placeholder for AUTH0_CLIENT_SECRET. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env" / "No, I'll update it manually"

- If neither exists, ask:
  - Question: "This setup will create a `.env` file containing Auth0 credentials (AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_SECRET) and a placeholder for AUTH0_CLIENT_SECRET. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- If `.env.local` does **not** exist but `.env` exists, ask:
  - Question: "A `.env` file already exists and may contain secrets unrelated to Auth0. This setup will append Auth0 credentials to it without modifying existing content. Do you want to proceed?"
  - Options: "Yes, append to existing .env" / "No, I'll update it manually"

- If neither exists, ask:
  - Question: "This setup will create a `.env` file containing Auth0 credentials (AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_SECRET) and a placeholder for AUTH0_CLIENT_SECRET. Do you want to proceed?"
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
{"type": "matches", "pattern": "await\\s+auth0\\.logout\\(|await\\s+\\w+\\.logout\\(", "description": "Implements logout functionality"},
  {"type": "matches", "pattern": "flask\\[async\\]|flask\\[Async\\]|\"flask\\[async\\]\"", "description": "Uses flask[async] in requirements (required for async route handlers)"},

  {"type": "file_contains", "file_pattern": "**/.env*", "value": "dev-example.auth0.com", "description": "Auth0 domain written to .env config file"},
  {"type": "file_contains", "file_pattern": "**/.env*", "value": "abc123def456ghi789jkl012", "description": "Client ID written to .env config file"},

  {"type": "not_contains_any", "values": ["Authlib", "python-jose", "Flask-Login", "Flask-Dance"], "description": "Does not use wrong authentication libraries (Authlib, python-jose, Flask-Login, Flask-Dance)"},
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
{"type": "matches", "pattern": "await\\s+auth0\\.logout\\(|await\\s+\\w+\\.logout\\(", "description": "Implements logout functionality"},
  {"type": "matches", "pattern": "flask\\[async\\]|flask\\[Async\\]|\"flask\\[async\\]\"", "description": "Uses flask[async] in requirements (required for async route handlers)"},

  {"type": "file_contains", "file_pattern": "**/.env*", "value": "dev-example.auth0.com", "description": "Auth0 domain written to .env config file"},
  {"type": "file_contains", "file_pattern": "**/.env*", "value": "abc123def456ghi789jkl012", "description": "Client ID written to .env config file"},

  {"type": "not_contains_any", "values": ["Authlib", "python-jose", "Flask-Login", "Flask-Dance"], "description": "Does not use wrong authentication libraries (Authlib, python-jose, Flask-Login, Flask-Dance)"},
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
{"type": "matches", "pattern": "await\\s+auth0\\.logout\\(|await\\s+\\w+\\.logout\\(", "description": "Implements logout functionality"},
  {"type": "matches", "pattern": "flask\\[async\\]|flask\\[Async\\]|\"flask\\[async\\]\"", "description": "Uses flask[async] in requirements (required for async route handlers)"},

  {"type": "file_contains", "file_pattern": "**/.env*", "value": "dev-example.auth0.com", "description": "Auth0 domain written to .env config file"},
  {"type": "file_contains", "file_pattern": "**/.env*", "value": "abc123def456ghi789jkl012", "description": "Client ID written to .env config file"},

  {"type": "not_contains_any", "values": ["Authlib", "python-jose", "Flask-Login", "Flask-Dance"], "description": "Does not use wrong authentication libraries (Authlib, python-jose, Flask-Login, Flask-Dance)"},
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
{"type": "matches", "pattern": "await\\s+auth0\\.logout\\(|await\\s+\\w+\\.logout\\(", "description": "Implements logout functionality"},
  {"type": "matches", "pattern": "flask\\[async\\]|flask\\[Async\\]|\"flask\\[async\\]\"", "description": "Uses flask[async] in requirements (required for async route handlers)"},

  {"type": "file_contains", "file_pattern": "**/.env*", "value": "dev-example.auth0.com", "description": "Auth0 domain written to .env config file"},
  {"type": "file_contains", "file_pattern": "**/.env*", "value": "abc123def456ghi789jkl012", "description": "Client ID written to .env config file"},

  {"type": "not_contains_any", "values": ["Authlib", "python-jose", "Flask-Login", "Flask-Dance"], "description": "Does not use wrong authentication libraries (Authlib, python-jose, Flask-Login, Flask-Dance)"},
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
{"type": "matches", "pattern": "await\\s+auth0\\.logout\\(|await\\s+\\w+\\.logout\\(", "description": "Implements logout functionality"},
  {"type": "matches", "pattern": "flask\\[async\\]|flask\\[Async\\]|\"flask\\[async\\]\"", "description": "Uses flask[async] in requirements (required for async route handlers)"},

  {"type": "file_contains", "file_pattern": "**/.env*", "value": "dev-example.auth0.com", "description": "Auth0 domain written to .env config file"},
  {"type": "file_contains", "file_pattern": "**/.env*", "value": "abc123def456ghi789jkl012", "description": "Client ID written to .env config file"},

  {"type": "not_contains_any", "values": ["Authlib", "python-jose", "Flask-Login", "Flask-Dance"], "description": "Does not use wrong authentication libraries (Authlib, python-jose, Flask-Login, Flask-Dance)"},
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
{"type": "matches", "pattern": "await\\s+auth0\\.logout\\(|await\\s+\\w+\\.logout\\(", "description": "Implements logout functionality"},
  {"type": "matches", "pattern": "flask\\[async\\]|flask\\[Async\\]|\"flask\\[async\\]\"", "description": "Uses flask[async] in requirements (required for async route handlers)"},

  {"type": "file_contains", "file_pattern": "**/.env*", "value": "dev-example.auth0.com", "description": "Auth0 domain written to .env config file"},
  {"type": "file_contains", "file_pattern": "**/.env*", "value": "abc123def456ghi789jkl012", "description": "Client ID written to .env config file"},

  {"type": "not_contains_any", "values": ["Authlib", "python-jose", "Flask-Login", "Flask-Dance"], "description": "Does not use wrong authentication libraries (Authlib, python-jose, Flask-Login, Flask-Dance)"},
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
{"type": "matches", "pattern": "await\\s+auth0\\.logout\\(|await\\s+\\w+\\.logout\\(", "description": "Implements logout functionality"},
  {"type": "matches", "pattern": "flask\\[async\\]|flask\\[Async\\]|\"flask\\[async\\]\"", "description": "Uses flask[async] in requirements (required for async route handlers)"},

  {"type": "file_contains", "file_pattern": "**/.env*", "value": "dev-example.auth0.com", "description": "Auth0 domain written to .env config file"},
  {"type": "file_contains", "file_pattern": "**/.env*", "value": "abc123def456ghi789jkl012", "description": "Client ID written to .env config file"},

  {"type": "not_contains_any", "values": ["Authlib", "python-jose", "Flask-Login", "Flask-Dance"], "description": "Does not use wrong authentication libraries (Authlib, python-jose, Flask-Login, Flask-Dance)"},
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
tests/evals.json:6

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
tests/prompt.md:18