Skip to content

Restrict webhook destinations and isolate eval file operations - #315

Merged
Exzentttt merged 1 commit into
mainfrom
fix/314-webhook-eval-security
Nov 6, 2026
Merged

Exzentttt merged 1 commit into
mainfrom
fix/314-webhook-eval-security

Conversation

@Exzentttt

@Exzentttt Exzentttt commented Nov 6, 2026 •

Copy link
Copy Markdown
Member

Agent webhook registration previously accepted localhost URLs, and delivery could connect to private destinations. The local multi-agent eval also executed model-supplied shell commands and accessed host files.

This change requires public HTTPS webhook destinations, validates every resolved address, and connects to a validated numeric address while retaining the original Host header and TLS hostname verification. Delivery does not follow redirects or use environment proxies, and failure diagnostics omit response bodies and destination URLs. Registration retains the existing URL/secret response and null-to-clear behavior through service/repository layers.

The eval tools now use a bounded in-memory workspace. They preserve simulated file and publication workflows but do not execute generated commands or access host files. The eval change is local test tooling, not a production runtime replacement.

Validation: 74 focused tests passed, including the actual HTTPcore TCP/TLS boundary; two DNS/pinning mutations failed as expected and six restored tests passed. Python 3.12 address-policy checks passed. Changed-code static/type gates passed. All five required CI checks passed, including the full backend PostgreSQL/container-backed tier (12m27s). Independent source review completed without material findings.

No dependency, database migration or frontend change. Production rollout switched only the backend image and verified preservation of schema 113, worker, frontend, Caddy, mounts and networks. Existing private/localhost webhook destinations will be rejected; operators must use a public HTTPS receiver.

Refs #314. Installed and post-verified on 2026-11-07 (Asia/Makassar).

Production source: a715e40c19d327bcba040153a5056ef6754a9003. Native AMD64 image: sha256:e332dd06e1884dfdf13e5e46ce93116e76bc2952386e5e4dca4d325722ee553b. The exact image passed a network-disabled synthetic security probe; its test container was removed and absence independently verified. Native postchecks verified all six changed application file hashes, health, unchanged schema 113/all 110 migration-history rows, and preservation of all other 20 containers and protected resources. Public .com health returned healthy/database ok/Redis ok.

Application-only rollback retains schema 113 and restores prior image sha256:1fcf7c67ae1e5d85785df07fd2492a57e39262cbaf94e0cd8f2160b144a85dda. No rollback or migration ran. Source skill.md contains additional webhook guidance, but existing live skill binds and their contents were preserved; publication of that addition is not claimed. Actual external receivers, reward transfers and anonymous public .ru pages were not tested.

@Exzentttt
Exzentttt marked this pull request as ready for review November 6, 2026 18:10
@Exzentttt
Exzentttt merged commit a715e40 into main Nov 6, 2026
5 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.

1 participant