Actions
Security #7183
closedTask #5682: tracking: smb performance issues
Optimization #5672: smb: avoid unbounded hash maps
smb: hashmap entries not removed for error responses
Affected Versions:
Label:
CVE:
Git IDs:
Severity:
MODERATE
Disclosure Date:
Description
SMB tracks multiple hashmaps:
ssnguid2vec_map - only used by dcerpc frag reassembly
guid2name_map - mapping guid to name
TODO: never freed, insert/get only. Except at EOS
ssn2vec_map - mapping ssn to guid/fid?
smb2: added by SMB2_COMMAND_CREATE command, removed by success response
smb2: added by SMB2_COMMAND_WRITE, removed by successful SMB2_COMMAND_WRITE (by response)
smb1: added by SMB1_COMMAND_NT_CREATE_ANDX, removed by success response
smb1: added by SMB1_COMMAND_CLOSE, removed by success response
smb1: added by SMB1_COMMAND_TRANS, removed by success response
TODO: freeing depends on success responses (or EOS)
ssn2vecoffset_map - store fid+offset for session
smb1: SMB1_COMMAND_READ_ANDX insert, removed on success response (but error case missing?)
smb2: SMB2_COMMAND_READ insert, only removed on SMB_NTSTATUS_END_OF_FILE|SMB_NTSTATUS_SUCCESS|SMB_NTSTATUS_BUFFER_OVERFLOW, except with errors
ssn2tree_map - stores tree name by tree key
smb1: SMB1_COMMAND_TREE_DISCONNECT removes, request/response
smb1: SMB1_COMMAND_TREE_CONNECT_ANDX inserts
smb2: SMB2_COMMAND_READ response for dcerpc can add ("fake tree for dcerpc")
smb2: SMB2_COMMAND_WRITE request for dcerpc can add ("fake tree for dcerpc")
smb2: SMB2_COMMAND_TREE_DISCONNECT request/response removes
smb2: SMB2_COMMAND_TREE_CONNECT success response inserts
Additionally, if we don't see a response (e.g. GAP), won't remove either.
Actions