Skip to content

fix: upload reports only to app.secfoo.com with a confirmed ingest key - #104

Merged
vsn411 merged 2 commits into
mainfrom
security/public-sync-ingest-key
Nov 14, 2026
Merged

vsn411 merged 2 commits into
mainfrom
security/public-sync-ingest-key

Conversation

@vsn411

@vsn411 vsn411 commented Nov 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Report sync stays on https://app.secfoo.com. The report is uploaded only after the portal confirms the key is an ingest key (sfc_ingest_...). A view key, a random string, or another host never receives the report.
  • Viewing a report no longer loads remote images or non-https links. The local dashboard rejects cross-site writes, and GitHub clones disable hooks, submodules, and file/ext protocols.
  • Scans, automatic CVE enrichment, GitLab and Bitbucket clones, custom skills, secfoo serve --host 0.0.0.0, and a self-hosted https memory URL behave as before.

Test plan

  • secfoo cloud login with an ingest key still saves, and secfoo cloud sync uploads the run
  • A view key or a portal URL other than https://app.secfoo.com does not upload the report
  • A local SCA scan still enriches CVEs from OSV
  • A GitLab or Bitbucket target still clones
  • secfoo serve --host 0.0.0.0 --port 8787 still starts

Made with Cursor

Satyanarayana Vuppala and others added 2 commits November 12, 2026 08:06
A configured portal URL or a view key could send the full report off the machine before the portal accepted the key. Sync now stays on https://app.secfoo.com and posts the report only after whoami confirms an ingest key. Scans, CVE enrichment, GitLab and Bitbucket clones, custom skills, and the dashboard bind address are unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
Comment thread src/secfoo/cloud.py
Comment on lines +109 to +110
f'api_key = "{_toml_escape(api_key)}"\n'
f'portal_url = "{_toml_escape(portal_url)}"\n',
Comment thread src/secfoo/memory.py
url = _memory_origin(config.url)
path.write_text(
f'api_key = "{_toml_escape(config.api_key)}"\nurl = "{_toml_escape(config.url)}"\n',
f'api_key = "{_toml_escape(config.api_key)}"\nurl = "{_toml_escape(url)}"\n',
Comment thread src/secfoo/web/app.py

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from starlette.responses import PlainTextResponse
@vsn411
vsn411 merged commit 0dfc4ef into main Nov 14, 2026
5 of 6 checks passed
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.

2 participants