Add service-name check and regress test#953
Add service-name check and regress test#953yosuke-wolfssl wants to merge 1 commit intowolfSSL:masterfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds RFC 4252 §5 compliance by validating the service-name in SSH_MSG_USERAUTH_REQUEST and rejecting requests that do not target "ssh-connection" while keeping the connection open for retry. It also introduces a new internal test hook and a unit test intended to exercise the new validation behavior.
Changes:
- Add
service-namevalidation inDoUserAuthRequest()and sendSSH_MSG_USERAUTH_FAILUREwhen invalid. - Expose
DoUserAuthRequest()via a newwolfSSH_TestDoUserAuthRequest()internal test wrapper. - Add a new unit test to exercise service-name validation logic.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
wolfssh/internal.h |
Adds a new internal test API declaration for invoking DoUserAuthRequest() from unit tests. |
src/internal.c |
Implements the service-name check and the corresponding test wrapper. |
tests/unit.c |
Adds a unit test for service-name validation and wires it into the unit test runner. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@yosuke-wolfssl, can you please rebase to resolve conflicts? |
wolfSSL-Fenrir-bot
left a comment
There was a problem hiding this comment.
Fenrir Automated Review — PR #953
Scan targets checked: wolfssh-bugs, wolfssh-src
No new issues found in the changed files. ✅
aidangarske
left a comment
There was a problem hiding this comment.
Skoll Code Review
Scan type: review
Overall recommendation: APPROVE
Findings: 7 total — 7 posted, 0 skipped
7 finding(s) posted as inline comments (see file-level comments below)
Posted findings
- [Low] Inconsistent cast style in new NameToId call —
src/internal.c:8405-8406 - [Low] Error from SendUserAuthFailure overwrites ret, making invalid-service path return non-success —
src/internal.c:8405-8411 - [Low]
*idx = lenis written even when SendUserAuthFailure returned an error —src/internal.c:8409-8411 - [Low] Test assumes output path succeeds on a fresh session without documentation —
tests/unit.c:952-1041 - [Low] Test does not cover empty or oversize service names —
tests/unit.c:964-973 - [Info]
serviceValidcould be replaced by a guard-style early return block for readability —src/internal.c:8370,8417 - [Info]
*idx = lenset before SendUserAuthFailure result is checked —src/internal.c:8409-8410
Review generated by Skoll
wolfSSL-Fenrir-bot
left a comment
There was a problem hiding this comment.
Fenrir Automated Review — PR #953
Scan targets checked: wolfssh-bugs, wolfssh-src
No new issues found in the changed files. ✅
|
Hello @aidangarske , It's ready for review again. |
| authData.serviceName = buf + begin; | ||
| begin += authData.serviceNameSz; | ||
|
|
||
| ret = GetSize(&authData.authNameSz, buf, len, &begin); |
There was a problem hiding this comment.
The function GetStringRef() was added for cases like this. It does all the appropriate length checking and it updates the idx. I just never got around to replacing all GetSize() and adjusting the idx myself with this function.
GetStringRef will give you a pointer into buf that points at the string, and it gives you the length. You don't need to free it, and the pointer is to const.
aidangarske
left a comment
There was a problem hiding this comment.
Skoll Code Review
Scan type: review
Overall recommendation: COMMENT
Findings: 3 total — 3 posted, 0 skipped
3 finding(s) posted as inline comments (see file-level comments below)
Posted findings
- [Medium] wolfSSH_SetUsernameRaw mutates session state before the service-name check —
src/internal.c:8351-8376 - [Low] Unrelated blank-line removal between DoReceive and DoProtoId —
src/internal.c:10719 - [Low] Test couples to internal packet layout (byte-5 message-id) without abstraction —
tests/unit.c:1027-1035
Review generated by Skoll
aidangarske
left a comment
There was a problem hiding this comment.
Skoll Multi-Scan Review
Modes: audit + review-security
Overall recommendation: COMMENT
Findings: 1 total — 1 posted, 0 skipped
1 finding(s) posted as inline comments (see file-level comments below)
Posted findings
- [Low] [audit] Unknown-auth-method
begin = lenconsumption path lacks meaningful coverage —src/internal.c:8402-8408
Review generated by Skoll
|
@yosuke-wolfssl please see the feedback. |
This PR adds the service-name check to comply with RFC 4252 section 5.
If service name is not equal to "ssh-connection", SSH_MSG_USERAUTH_FAILURE would be sent to the peer.
Also, new unit test is added to exercise service-name validation.