Skip to content

Test validation abstention full flow - #15

Open
mvidoc wants to merge 3 commits into
mainfrom
e2e-validation-abstention-full-flow
Open

Test validation abstention full flow#15
mvidoc wants to merge 3 commits into
mainfrom
e2e-validation-abstention-full-flow

Conversation

@mvidoc

@mvidoc mvidoc commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Summary

  • add an internal document-import endpoint with a request-controlled fetch
  • make exploitability depend on edge-gateway policy stored outside the repository
  • exercise Vidoc's abstain → ask → answer → rescan flow

Test plan

  • Vidoc detects the request-controlled fetch
  • Vidoc posts a validation question about gateway trust/direct-origin access
  • Reply to the inline question with the missing deployment context
  • Verify 👀 appears on the reply and the thread resolves
  • Verify Vidoc rescans the latest PR revision using the answer

Made with Cursor

Exercise the validation abstention flow when request trust depends on gateway policy outside the repository.

Co-authored-by: Cursor <cursoragent@cursor.com>
@vidoc-local

vidoc-local Bot commented Jul 29, 2026

Copy link
Copy Markdown

Vidoc security review

Tip

Good to merge — no security issues found. Reviewed 1 changed file.

💬 Have questions? Tag @vidoc-local in a comment and I'll answer.

mvidoc and others added 2 commits July 29, 2026 18:58
Make the missing deployment context explicit so the validation agent exercises its abstention path.

Co-authored-by: Cursor <cursoragent@cursor.com>
Require external runtime configuration so validation cannot decide exploitability from repository code alone.

Co-authored-by: Cursor <cursoragent@cursor.com>
Comment thread main.ts
Repository owner deleted a comment from vidoc-local Bot Jul 29, 2026
Comment thread main.ts
Comment on lines +15 to +24
return res.status(404).send("not found");
}

if (req.header("x-edge-principal") !== "document-importer") {
return res.status(403).send("forbidden");
}

const sourceUrl = String(req.body?.sourceUrl ?? "");
const upstream = await fetch(sourceUrl);
res.status(upstream.status).send(await upstream.text());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you confirm that the production edge configuration (e.g. Nginx, ALB, or Cloudflare) is strictly configured to strip the x-edge-principal header from all incoming client requests and only inject it for authorized internal requests?

The code in main.ts relies on the edge (proxy/load balancer) to strip and reinject the 'x-edge-principal' header. If the edge does not do this correctly, an attacker can spoof the header and exploit the SSRF. Team memory mem_4d81a6fc0b7a72d2 claims the edge does strip it, but this cannot be verified from the repository alone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant