Improve SOCKS auth: enforce per-user ACL on socks channels#591
Merged
Conversation
- socks channels are now authorized against the per-user --authfile ACL, consistent with TCP/UDP forwards. - Remote.UserAddr() returns "socks" for forward socks remotes, so a user is granted socks via a ^socks$ entry — the token the per-channel check uses. - Add socks channel allow/deny regression tests plus an end-to-end forward-socks test. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Authorize SOCKS channels against the per-user
--authfileACL, the same way TCP/UDP forwards already are.Changes
handleSSHChannelnow applies the per-user ACL to socks channels (previously socks channels skipped the check).Remote.UserAddr()returns"socks"for forward socks remotes, so an operator grants socks with a^socks$entry — the same token the per-channel check uses. The config-time and channel-level checks now agree.acl_channel_test.go, plus an end-to-end forward-socks test (real client → server → SOCKS5 proxy → endpoint) for a^socks$-only user.Compatibility
Only ever restricts socks; never grants more. Unaffected: no-auth servers,
--authsingle-user, authfile[""]/["*"](full access), and destination-restricted users. A user previously granted broad access via a colon-style pattern that does not matchsocksshould add^socks$(or*).Verification
go build,go vet,go test ./..., andgo test -raceontunnel/e2e/settingsall pass.🤖 Generated with Claude Code