Suppress SignalR bearer tokens from hosting logs - #2420
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a385c20440
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Review finding: HIGH, merge-blocking The current provider-agnostic Hosting.Diagnostics rule can be bypassed by a provider-specific logging override. .NET gives provider-specific rules precedence. With a provider-specific Information override for the test recording provider, the real SignalR request regression failed and captured both request-start and request-finish records containing the valid synthetic JWT query. This directly contradicts the claimed fixed floor. The value was scrubbed from review output. Bounded fix round:
No other CRITICAL/HIGH finding was reported by the security lens. This head must not merge. |
|
Review fix pushed at The simple provider-agnostic filter is replaced by a post-configuration guard over Scoped fix verification:
The pushed head matches the remote and remains based on current main |
|
Final exact-head review receipt Head: No CRITICAL/HIGH findings. The prior provider-specific bypass is fixed and the hostile Trace regression passes. Tracked on umbrella #2351, not fixed in a third round:
The statements that stricter generic thresholds remain effective are therefore not proven and are included in the #2351 residual. Per the two-round ceiling, these non-blocking findings do not start another fix cascade. |
|
Current-base refresh pushed at
Affected proof at the new head:
Hosted CI and the three-minute aging window restarted. A fresh read-only interaction review is checking only the base movement; the prior final review disposition and tracked non-blocking #2351 residuals are unchanged. |
|
Current-base interaction review at The merge preserves byte-equivalent patch sets on both parents. The PR diff remains the four SignalR logging files; the landed #2413 side remains six frontend review-queue files and does not touch authentication, SignalR transport, logging, API contracts, or persistence. The prior final-review disposition and tracked MEDIUM/LOW #2351 residuals remain unchanged. Merge now waits only for exact-head CI. |
Summary
Microsoft.AspNetCore.Hosting.Diagnosticsrequest-target logs below WarningThis is a bounded security slice of #2351. It does not close the umbrella; persisted agent/CLI errors, MCP/CLI inventory, provider health, and future-flow guards remain.
Threat boundary
Supported SignalR browser clients send bearer credentials through the
access_tokenquery parameter. Hosting.Diagnostics renders the full request target at Information before Taskdeck middleware can redact it. A replayable JWT can therefore enter console, CI, or hosted log sinks. The exact category is now fixed at Warning while other framework categories retain configured levels.Verification
/hubs/boards?...&access_token=<synthetic JWT>request produced both request-start and request-finish Information entries containing the full marker before the fixdotnet test backend/tests/Taskdeck.Api.Tests/Taskdeck.Api.Tests.csproj -c Release -m:1 --filter FullyQualifiedName~LoggingProviderConfigurationTests|FullyQualifiedName~OAuthTokenLifecycleTests.SignalR_QueryStringAuth: 6 passeddotnet test backend/tests/Taskdeck.Api.Tests/Taskdeck.Api.Tests.csproj -c Release -m:1: 2,765 passed, 4 declared skips, 1 unrelated untouched warmed-query-shape probe failureBatchExecuteProposalsApiTestsclass rerun: 18 passednode scripts/check-docs-governance.mjs: passednode scripts/check-golden-principles.mjs: passedgit diff --check origin/main...HEAD: passedNot verified