Skip to content

Clarify df.http() security scope vs SQL extension execution#216

Draft
Copilot wants to merge 2 commits into
mainfrom
copilot/fix-http-allowlist-docs
Draft

Clarify df.http() security scope vs SQL extension execution#216
Copilot wants to merge 2 commits into
mainfrom
copilot/fix-http-allowlist-docs

Conversation

Copilot AI commented Jun 9, 2026

Copy link
Copy Markdown

Current docs could be read as if pg_durable enforces database-wide outbound HTTP controls. In practice, the allowlist/blocklist and SSRF guarantees apply to the built-in df.http() activity path, not arbitrary SQL-callable extensions/functions executed by workflow SQL nodes.

  • Scope clarification in user-facing guidance (USER_GUIDE.md)

    • Reworded HTTP security section to explicitly scope enforcement to df.http().
    • Added explicit boundary statement: df.http() controls do not govern arbitrary SQL functions, UDFs, or third-party Postgres extensions.
    • Added operator responsibility note: extension install policy, function grants, and network egress remain DBA-controlled outside df.http().
  • Threat-model precision in security spec (docs/spec-security-model.md)

    • Updated SSRF mitigation wording to state “cannot be bypassed” applies to the df.http() execution path.
    • Tightened residual-risk statement to “Low for df.http()” to avoid implying database-global enforcement.
  • Resulting doc contract

    • df.http() controls are strong within pg_durable’s built-in HTTP activity.
    • They are not a substitute for database-wide extension/function privilege governance.
These `df.http()` restrictions cannot be bypassed by any database user, including superusers.
They do not restrict arbitrary SQL functions, user-defined functions, or third-party Postgres
extensions that a workflow role can execute from SQL nodes.

Co-authored-by: pinodeca <32303022+pinodeca@users.noreply.github.com>
Copilot AI changed the title [WIP] Clarify df.http() allowlist does not govern arbitrary SQL extensions Clarify df.http() security scope vs SQL extension execution Jun 9, 2026
Copilot AI requested a review from pinodeca June 9, 2026 14:39
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.

Clarify that df.http() allowlist does not govern arbitrary SQL extensions

2 participants