Skip to the content.

potpie-ai/potpie - security scan

Repository: potpie-ai/potpie Commit scanned: 5631cd0b885d0dd3511bf860b458e588027ee8e8 Scan date: 2026-07-13 Disclosure status: public — post-only (strict-norm: commercial backing; nothing cleared the quality gate)

Summary

Severity Count
Critical 0
High 28
Medium 68
Low 0 (filtered at --min-severity medium)
Info 0

Total findings: 96 (0 real after curation)

potpie turns a codebase and its SDLC into a context graph for AI agents — a FastAPI platform that ingests repositories, runs a code-execution sandbox, and serves an API, with a hosted product at potpie.ai. That’s a wide surface (CORS/auth, a subprocess sandbox, repo ingestion), so this scan is a completeness sweep of the dangerous bits. It comes back clean: the two things a scanner did flag — subprocess execution and CORS — are both handled correctly, and the 96-finding count is dominated by a legacy/ tree and workflow lint.

Top findings

1. The subprocess-injection hits are the sandbox executor, and it quotes safely

2. CORS is secure-by-default in a dedicated hardening module

3. The count is a legacy/ tree, workflow tags, and lint

Patterns observed

The rich surface was the point, and it held. A repo-ingesting agent platform with a subprocess sandbox and a public API is exactly where you’d expect a real finding — an unquoted command, a wildcard-CORS-with-credentials, an SSRF on clone. The completeness sweep walked each one and each was already handled: argv/shlex.quote on the executor, an env-allowlist with credential-gating on CORS, operator-directed (not attacker-directed) ingestion. The tell is a file literally named _hardening.py that does what it says.

Separating legacy/ first collapses the count. This is the monorepo ownership-split move again: 7 of 28 highs and all 13 trivy misconfigs live in a legacy/ tree that isn’t the shipped product. Auto-flagging a legacy/ directory as candidate-FP (like tests/) would have moved the report’s center of gravity to the ~handful of current-code findings, which then curate to by-design.

Strict-norm, and clean anyway. potpie has a commercial hosted tier (potpie.ai), so grouped issues are off the table by policy — but there was nothing to file: the deps are clean, the code-execution and CORS surfaces are correctly built, and the residue is lint. Post-only, crediting the hardening.

Notes on the tool

Disclosure timeline

This is a post-only clean-scan write-up. The sandbox executor is argv/shlex.quote-safe with a Docker-isolated option, CORS is env-allowlisted and credential-gated by default in a dedicated hardening module, dependencies are clean, and the finding count is a legacy/ tree plus workflow lint. Nothing cleared the quality gate.

Reproduce

git clone https://github.com/potpie-ai/potpie /tmp/scan-target
python scanner/run_scan.py --repo /tmp/scan-target \
  --reports-dir ./reports/potpie-ai-potpie \
  --min-severity medium --ignore-samples