Skip to content

Commit

Permalink
http2: app-layer event for userinfo in uri
Browse files Browse the repository at this point in the history
Ticket: OISF#6426

as per RFC 9113
":authority" MUST NOT include the deprecated userinfo subcomponent
for "http" or "https" schemed URIs.

(cherry picked from commit e3cd0d0)
  • Loading branch information
catenacyber committed Nov 17, 2023
1 parent 6bb882c commit b6e889b
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 0 deletions.
1 change: 1 addition & 0 deletions rules/http2-events.rules
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ alert http2 any any -> any any (msg:"SURICATA HTTP2 invalid range header"; flow:
alert http2 any any -> any any (msg:"SURICATA HTTP2 variable-length integer overflow"; flow:established; app-layer-event:http2.header_integer_overflow; classtype:protocol-command-decode; sid:2290011; rev:1;)
alert http2 any any -> any any (msg:"SURICATA HTTP2 too many streams"; flow:established; app-layer-event:http2.too_many_streams; classtype:protocol-command-decode; sid:2290012; rev:1;)
alert http2 any any -> any any (msg:"SURICATA HTTP2 authority host mismatch"; flow:established,to_server; app-layer-event:http2.authority_host_mismatch; classtype:protocol-command-decode; sid:2290013; rev:1;)
alert http2 any any -> any any (msg:"SURICATA HTTP2 user info in uri"; flow:established,to_server; app-layer-event:http2.userinfo_in_uri; classtype:protocol-command-decode; sid:2290014; rev:1;)
6 changes: 6 additions & 0 deletions rust/src/http2/http2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,11 @@ impl HTTP2Transaction {
self.decoder.http2_encoding_fromvec(&block.value, dir);
} else if block.name.eq_ignore_ascii_case(b":authority") {
authority = Some(&block.value);
if block.value.iter().any(|&x| x == b'@') {
// it is forbidden by RFC 9113 to have userinfo in this field
// when in HTTP1 we can have user:password@domain.com
self.set_event(HTTP2Event::UserinfoInUri);
}
} else if block.name.eq_ignore_ascii_case(b"host") {
host = Some(&block.value);
}
Expand Down Expand Up @@ -400,6 +405,7 @@ pub enum HTTP2Event {
HeaderIntegerOverflow,
TooManyStreams,
AuthorityHostMismatch,
UserinfoInUri,
}

pub struct HTTP2DynTable {
Expand Down

0 comments on commit b6e889b

Please sign in to comment.