#alert smtp any any -> any any (msg:"SURICATA SMTP Mime encoded line len exceeded"; flow:established; app-layer-event:smtp.mime_long_enc_line; flowint:smtp.anomaly.count,+,1; classtype:protocol-command-decode; sid:2220016; rev:1;)
alert smtp any any -> any any (msg:"SURICATA SMTP Mime boundary length exceeded"; flow:established,to_server; app-layer-event:smtp.mime_long_boundary; flowint:smtp.anomaly.count,+,1; classtype:protocol-command-decode; sid:2220017; rev:1;)
-# next sid 2220018
+alert smtp any any -> any any (msg:"SURICATA SMTP duplicate fields"; flow:established,to_server; app-layer-event:smtp.duplicate_fields; flowint:smtp.anomaly.count,+,1; classtype:protocol-command-decode; sid:2220018; rev:1;)
+# next sid 2220019
{ "MIME_LONG_BOUNDARY",
SMTP_DECODER_EVENT_MIME_BOUNDARY_TOO_LONG },
+ /* Invalid behavior or content */
+ { "DUPLICATE_FIELDS",
+ SMTP_DECODER_EVENT_DUPLICATE_FIELDS },
+
{ NULL, -1 },
};
static int SMTPParseCommandHELO(SMTPState *state)
{
+ if (state->helo) {
+ SMTPSetEvent(state, SMTP_DECODER_EVENT_DUPLICATE_FIELDS);
+ return 0;
+ }
return SMTPParseCommandWithParam(state, 4, &state->helo, &state->helo_len);
}
static int SMTPParseCommandMAILFROM(SMTPState *state)
{
+ if (state->curr_tx->mail_from) {
+ SMTPSetEvent(state, SMTP_DECODER_EVENT_DUPLICATE_FIELDS);
+ return 0;
+ }
return SMTPParseCommandWithParam(state, 9,
&state->curr_tx->mail_from,
&state->curr_tx->mail_from_len);
SMTP_DECODER_EVENT_MIME_LONG_HEADER_NAME,
SMTP_DECODER_EVENT_MIME_LONG_HEADER_VALUE,
SMTP_DECODER_EVENT_MIME_BOUNDARY_TOO_LONG,
+
+ /* Invalid behavior or content */
+ SMTP_DECODER_EVENT_DUPLICATE_FIELDS,
};
typedef struct SMTPString_ {