Skip to content

Commit 4e3bf86

Browse files
committed
ssh: verify file handle size limit for client data
- reject handles exceeding 256 bytes (as specified for SFTP)
1 parent c388a2d commit 4e3bf86

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

lib/ssh/src/ssh_sftpd.erl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,17 @@ handle_data(Type, ChannelId, Data0, State = #state{pending = Pending}) ->
259259
handle_data(Type, ChannelId, Data, State#state{pending = <<>>})
260260
end.
261261

262+
%% From draft-ietf-secsh-filexfer-02 "The file handle strings MUST NOT be longer than 256 bytes."
263+
handle_op(Request, ReqId, <<?UINT32(HLen), _/binary>>, State = #state{xf = XF})
264+
when (Request == ?SSH_FXP_CLOSE orelse
265+
Request == ?SSH_FXP_FSETSTAT orelse
266+
Request == ?SSH_FXP_FSTAT orelse
267+
Request == ?SSH_FXP_READ orelse
268+
Request == ?SSH_FXP_READDIR orelse
269+
Request == ?SSH_FXP_WRITE),
270+
HLen > 256 ->
271+
ssh_xfer:xf_send_status(XF, ReqId, ?SSH_FX_INVALID_HANDLE, "Invalid handle"),
272+
State;
262273
handle_op(?SSH_FXP_INIT, Version, B, State) when is_binary(B) ->
263274
XF = State#state.xf,
264275
Vsn = lists:min([XF#ssh_xfer.vsn, Version]),

0 commit comments

Comments
 (0)