mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 02:28:21 +00:00
ftp/main: Skip get_pending_command() for intermediate reply lines
Intermediate lines of multiline replies usually do not contain valid status codes (even if servers may opt to include them). Their content may be anything and likely unrelated to the original command. There's little reason for us trying to match them with a corresponding command. OSS-Fuzz generated a large command reply with very many intermediate lines which caused long processing times due to matching every line with all currently pending commands. This is a DoS vector against Zeek. The new ipv6-multiline-reply.trace and ipv6-retr-samba.trace files have been extracted from the external ipv6.trace.
This commit is contained in:
parent
71f487bd20
commit
1b3e8a611e
12 changed files with 128 additions and 2 deletions
|
@ -316,12 +316,22 @@ event ftp_request(c: connection, command: string, arg: string) &priority=5
|
|||
event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool) &priority=5
|
||||
{
|
||||
set_ftp_session(c);
|
||||
|
||||
# Skip matching up intermediate reply lines (that do not have a
|
||||
# valid status code) with pending commands. Because they may not
|
||||
# have a proper status code, there's little point setting whatever
|
||||
# their reply_code and reply_msg are on the command unless to ensure
|
||||
# c$ftp$reply_code is actually populated with "something".
|
||||
if ( cont_resp && code == 0 && c$ftp?$reply_code )
|
||||
return;
|
||||
|
||||
c$ftp$cmdarg = get_pending_cmd(c$ftp$pending_commands, code, msg);
|
||||
c$ftp$reply_code = code;
|
||||
c$ftp$reply_msg = msg;
|
||||
|
||||
# TODO: figure out what to do with continued FTP response (not used much)
|
||||
if ( cont_resp ) return;
|
||||
# Do not parse out information from any but the first reply line.
|
||||
if ( cont_resp )
|
||||
return;
|
||||
|
||||
# TODO: do some sort of generic clear text login processing here.
|
||||
local response_xyz = parse_ftp_reply_code(code);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue