You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Support OCI seccomp profiles inside gVisor sandboxes #2277
This issue was generated as part of an AI review of pre-GA debug and diagnostic surfaces.
Problem Description
In internal/ateinterceptors/ateinterceptors.go:63-68, the ServerUnaryInterceptor used by ateapi formats unhandled Go errors directly into the client-facing gRPC status error:
iferr!=nil {
ifst, ok:=apierror.FromError(err); ok {
returnnil, st.Err()
}
returnnil, status.Errorf(codes.Internal, "internal server error: %v", err)
}
Throughout cmd/ateapi/internal/controlapi and cmd/ateapi/internal/workerservice, database errors are returned as standard wrapped errors (e.g. fmt.Errorf("while getting actor from DB: %w", err) in actor.go:160, 209, 354, 562, 592; atespace.go:77; worker.go:48, 93, 152, 307).
Impact
When database errors occur (e.g. PostgreSQL syntax errors, constraint violations, connection timeouts, column mismatches from pgx), the full internal error string and SQL context are transmitted directly to external callers. Attackers can use crafted input to probe database schema, table names, constraint definitions, and internal network addresses.
Proposed Remediation
In internal/ateinterceptors/ateinterceptors.go, sanitize unexpected errors before returning them to external clients:
Log the full error %v and stack trace server-side with the active trace/span ID.
Return a generic, opaque error to the client:
returnnil, status.Errorf(codes.Internal, "internal server error (trace_id: %s)", traceID)
We had this behavior initially, and I think people brought up that propagating the error message simplifies troubleshooting. I don't think security was considered in that discussion.
This feels like a low severity security finding, which is why I didn't mark it for M3. In normal operations there's going to be a customer application layer between substrate and an attacker, so filtering can and should be done at that layer. Hiding information at this layer is most likely to be useful when an attacker already has a foothold inside the infrastructure, or has some SSRF that allows them to make requests to the API to do recon.
Activity
juli4n commentedon Oct 8, 2026
We had this behavior initially, and I think people brought up that propagating the error message simplifies troubleshooting. I don't think security was considered in that discussion.
I remember Taahir Ahmed (@ahmedtd) and Bowei Du (@bowei) had opinions on this.
destijl commentedon Oct 8, 2026
This feels like a low severity security finding, which is why I didn't mark it for M3. In normal operations there's going to be a customer application layer between substrate and an attacker, so filtering can and should be done at that layer. Hiding information at this layer is most likely to be useful when an attacker already has a foothold inside the infrastructure, or has some SSRF that allows them to make requests to the API to do recon.
maxsmythe commentedon Oct 8, 2026
I had approved it for merge, but blocked on failing test. I'll defer trying to revive the merge to give people time to object.
[-]Unwrapped backend database errors leaked to external gRPC callers[/-][+]Support OCI seccomp profiles inside gVisor sandboxes[/+]