]> git.ipfire.org Git - thirdparty/suricata.git/log
thirdparty/suricata.git
3 years agosmb2: allow limiting in-flight data size/cnt
Victor Julien [Sat, 16 Apr 2022 04:58:20 +0000 (06:58 +0200)] 
smb2: allow limiting in-flight data size/cnt

Allow limiting in-flight out or order data chunks per size or count.

Implemented for read and writes separately:

app-layer.protocols.smb.max-write-queue-size
app-layer.protocols.smb.max-write-queue-cnt
app-layer.protocols.smb.max-read-queue-size
app-layer.protocols.smb.max-read-queue-cnt

Backport note: Modified to support Rust 1.33 -- Jason Ish

(cherry picked from commit 4be8334c9e95cc520c9c6a63a98d6b160915d07f)

3 years agofiletracker: track total queued data (in_flight)
Victor Julien [Sat, 16 Apr 2022 04:57:56 +0000 (06:57 +0200)] 
filetracker: track total queued data (in_flight)

As well as expose number of chunks.

Backport note: Modified to support Rust 1.33 -- Jason Ish

(cherry picked from commit 2c5ad8858e38fce20155044a06969693fe472d4c)

3 years agosmb2: add options for max read/write size
Victor Julien [Mon, 18 Apr 2022 19:47:39 +0000 (21:47 +0200)] 
smb2: add options for max read/write size

Add options for the max read/write size accepted by the parser.

(cherry picked from commit 5bcc4162f7051194d228ba6c58a665d71c0c047c)

3 years agosmb2: track max read/write size and enforce its values
Victor Julien [Mon, 18 Apr 2022 15:49:58 +0000 (17:49 +0200)] 
smb2: track max read/write size and enforce its values

(cherry picked from commit f28888513ac3be18715f522db253c5753adb94ed)

3 years agosmb: minor function cleanup
Victor Julien [Fri, 15 Apr 2022 18:52:48 +0000 (20:52 +0200)] 
smb: minor function cleanup

Remove used argument from `filetracker_newchunk()`. We're not
using fill_bytes with smb.

(cherry picked from commit 594acec5dc88540dddc18b3ee0ad89af0948ee33)

3 years agofiletracker: make FileChunk private
Victor Julien [Fri, 15 Apr 2022 18:00:55 +0000 (20:00 +0200)] 
filetracker: make FileChunk private

(cherry picked from commit c7a474c7253233ce1117ae4af5a5c1fcc4b4e7f4)

3 years agodetect/mpm: improve transforms handling 7274/head
Victor Julien [Mon, 26 Oct 2020 20:14:43 +0000 (21:14 +0100)] 
detect/mpm: improve transforms handling

Make sure keywords with transforms get their own mpm ctx, instead of
sharing it with the 'pure' version of the keyword.

(cherry picked from commit 82d7f6463053e2180883decaef9987b6caea277d)

3 years agosmb/ntlmssp: add stricter len/offset validation 7272/head
Victor Julien [Mon, 11 Apr 2022 10:33:43 +0000 (12:33 +0200)] 
smb/ntlmssp: add stricter len/offset validation

(cherry picked from commit 053a9d2e685abe7639e23b1c7fad5ae7d68630e3)

3 years agosmb: ntlmssp domain_blob_offset underflow check
Philippe Antoine [Mon, 4 Apr 2022 20:51:01 +0000 (22:51 +0200)] 
smb: ntlmssp domain_blob_offset underflow check

Ticket: 5246
(cherry picked from commit e72036f12f577fb37b985147c2c847d147e49db2)

3 years agosmb: check on param parsing
Philippe Antoine [Mon, 4 Apr 2022 20:45:56 +0000 (22:45 +0200)] 
smb: check on param parsing

Ticket: 5246

so as not to overflow u16

(cherry picked from commit 817a5001a50a90800547e66fef067c0443eb9f72)

3 years agogithub-ci: pin checkout action plus other fixes
Jason Ish [Mon, 18 Apr 2022 17:21:22 +0000 (11:21 -0600)] 
github-ci: pin checkout action plus other fixes

Fixes to get CI to pass with updates to checkout action.

3 years agosmb: rules for messages in the wrong direction
Jason Ish [Mon, 28 Feb 2022 21:12:37 +0000 (15:12 -0600)] 
smb: rules for messages in the wrong direction

(cherry picked from commit 1e653249400ec6217af6d3f153f774ec133d5357)

3 years agosmb: handle records in the wrong direction
Jason Ish [Fri, 18 Feb 2022 04:57:30 +0000 (22:57 -0600)] 
smb: handle records in the wrong direction

If an SMB record is seen in the wrong direction, set an event on the PDU
frame and don't process the record in the state.

No error is returned, so the next record will be processed.

(cherry picked from commit 2341f47755c616f9ee3249cd28372eab45889e0d)

3 years agosmb: expose smb1 request/reply flags with a method
Jason Ish [Fri, 18 Feb 2022 17:43:17 +0000 (11:43 -0600)] 
smb: expose smb1 request/reply flags with a method

Adds `.is_request()` and `.is_reply()` to check if a SMB record flags
say the message is a request or a reply.

(cherry picked from commit 09e2d3b216218eaed471b3ddb496873223744cf8)

3 years agosmb: fix smb2 header flag parsing
Jason Ish [Mon, 18 Apr 2022 16:32:25 +0000 (10:32 -0600)] 
smb: fix smb2 header flag parsing

The bits were being parsed in the order they're displayed in Wireshark,
rather than the order they were being seen on the wire, resulting in
direction and async being 0 more often than they should be.

Instead of bits, take the 4 bytes as an le_u32 and just use bit masks to
extract what we need into a struct, I think its easier to reason about
this way when comparing to the Microsoft documentation.

(cherry picked from commit 7b659489c85eaed4921ed9c4b97ecf827560376e)

3 years agooutput: fix integer warnings
Philippe Antoine [Tue, 18 Jan 2022 09:56:48 +0000 (10:56 +0100)] 
output: fix integer warnings

Ticket: 4516
(cherry picked from commit e3180e3248e38311ad56a080233ad1a8d31a623b)

3 years agodetect-content: error on single char hex pairs
Jason Ish [Tue, 22 Mar 2022 15:46:45 +0000 (09:46 -0600)] 
detect-content: error on single char hex pairs

Fix parsing of content like "|aa b cc|" which was parsed as "|aa bc|"
without error or warning. This will now fail out, requiring all hex
values to be 2 chars.

Ticket #5201

(cherry picked from commit 8d1e4a1d0b481b289bcbae619693c4c442e937e1)

3 years agopppoe: fix protocol field length variation
Steven Ottenhoff [Thu, 13 Jan 2022 13:05:58 +0000 (13:05 +0000)] 
pppoe: fix protocol field length variation

Detect when protocol field is not a 16 bit field.
Added tests to prove logic

Ticket: 4810
(cherry picked from commit 6bf2117056e8c2e9448a02d2198384935b1d5b70)

3 years agonss: use 'atexit()' to cleanup 7214/head
Victor Julien [Thu, 7 Apr 2022 12:44:26 +0000 (14:44 +0200)] 
nss: use 'atexit()' to cleanup

This avoids ASAN to report leaks in case of fatal errors in tests.

3 years agosmtp: check if there is a transaction to close 7213/head
Philippe Antoine [Tue, 22 Feb 2022 12:10:59 +0000 (13:10 +0100)] 
smtp: check if there is a transaction to close

Ticket: 4948

When parsing the response for starttls

(cherry picked from commit 99b3443369703ba69d962019edeca8f1c7c7896e)

3 years agosmtp: check if we have a current transaction
Philippe Antoine [Tue, 25 Jan 2022 20:10:37 +0000 (21:10 +0100)] 
smtp: check if we have a current transaction

Ticket: 4948

This is not the perfect solution, but it prevents to trigger
the assert, and keep the assert.
A better solution would need to create transaction from
the reponse parsing, in case a later command was buffered and
not answered. But this would not be enough as NoNewTx prevents
the creation of a new transaction for RSET...

(cherry picked from commit 4247605d874113ef13003816007e0575219d065e)

3 years agodetect/iponly: add tests for 5168 7153/head
Victor Julien [Tue, 1 Mar 2022 11:44:01 +0000 (12:44 +0100)] 
detect/iponly: add tests for 5168

(cherry picked from commit 935ea745f5e38b49713ae77d86b57ce7260917a4)

3 years agodetect/address: minor unittest cleanup
Victor Julien [Tue, 1 Mar 2022 11:43:25 +0000 (12:43 +0100)] 
detect/address: minor unittest cleanup

(cherry picked from commit 053b2b3b5b1197064bba5d59d4731c5789ff7239)

3 years agodetect/iponly: validate netmask
Victor Julien [Tue, 1 Mar 2022 11:42:49 +0000 (12:42 +0100)] 
detect/iponly: validate netmask

Only accept netmask in dotted quad notation if they can be turned
into a CIDR.

According to rfc 4632, CIDR (compat) netmasks are all that should be
used.

Bug: #5168.
(cherry picked from commit 79b7b7a0ddfdcd7664ca328a41d24fbca75e3e54)

3 years agodetect/address: validate netmasks
Victor Julien [Tue, 1 Mar 2022 11:41:04 +0000 (12:41 +0100)] 
detect/address: validate netmasks

Only accept netmask in dotted quad notation if they can be turned
into a CIDR.

According to rfc 4632, CIDR (compat) netmasks are all that should be
used.

Bug: #5168.
(cherry picked from commit 259bd8aa92c7bc8ca8c74b3f429f321935493828)

3 years agodetect/iponly: break out range insert code
Victor Julien [Mon, 28 Feb 2022 21:31:58 +0000 (22:31 +0100)] 
detect/iponly: break out range insert code

So we can reuse it.

(cherry picked from commit 4020e2faa7ee93dfed663b4b0795644572ddfd79)

3 years agoutil/cidr: add util to convert netmask to cidr
Victor Julien [Tue, 1 Mar 2022 11:41:49 +0000 (12:41 +0100)] 
util/cidr: add util to convert netmask to cidr

(cherry picked from commit a67b97e14c08f46f50c1acd989f0dc049a8e4cba)

3 years agogeneral: Fix typo
Jeff Lucovsky [Thu, 27 Jan 2022 17:30:14 +0000 (12:30 -0500)] 
general: Fix typo

(cherry picked from commit b53fced45254ca267e75ea7e8c60afab82ea1e08)

3 years agoconfig/ref: Raise errors for ref.config parsing
Jeff Lucovsky [Wed, 26 Jan 2022 21:35:12 +0000 (16:35 -0500)] 
config/ref: Raise errors for ref.config parsing

This commit raises an error in configuration test mode if there was an
error parsing reference.config.

Issue: 4659
(cherry picked from commit be2155b4edb712913166cb5e8c10b36fb4362f2a)

3 years agosmb: check correct buffer for overflow
Jason Ish [Tue, 15 Feb 2022 21:18:49 +0000 (15:18 -0600)] 
smb: check correct buffer for overflow

Fix an error in the checking of an overflow condition.

The first overflow check is only checking the size of the new data, not
the new data + the size of the buffered data. This is due to the buffer
on the state being emptied into a local variable just before the check.

This results in overflows not being caught, but being caught a few lines
down after the copy resulting in increased CPU usage for data that is
just going to be thrown away.

Ticket #4945

3 years agonfs/rpc: update full record parsers to be more exact 7151/head
Victor Julien [Fri, 18 Mar 2022 21:33:27 +0000 (15:33 -0600)] 
nfs/rpc: update full record parsers to be more exact

Instead of 'take'ing all data for the RPC prog_data and then
letting the higher level parsers figure out which part to use
take the exact amount.

Note: Differs a bit from the original commit as this series of commits
was not backported in the same order.

(cherry picked from commit 64d8a1e16e07148a8b5839452be3f7481e4e3623)

3 years agonfs3: improve read validation; fix partial handling
Victor Julien [Fri, 18 Mar 2022 21:29:29 +0000 (15:29 -0600)] 
nfs3: improve read validation; fix partial handling

Note: Some parsers converted to a more functional style to faciliate
additonal arguments being provided -- Jason Ish

(cherry picked from commit d85b77cad064bd88c921b2f3d520fe526ad8ff82)

3 years agonfs3: fix partial write record handling
Victor Julien [Fri, 18 Mar 2022 18:02:45 +0000 (12:02 -0600)] 
nfs3: fix partial write record handling

Note: This was more of a manual cherry-pick converting some parsers from
named macros into functions in order to handle more arguments than just
the input data -- Jason Ish

(cherry picked from commit 4418fc1b02f47533439fe00789d9c850a24271b2)

3 years agonfs3: enforce more values 7140/head
Victor Julien [Sun, 20 Feb 2022 22:02:13 +0000 (23:02 +0100)] 
nfs3: enforce more values

Enforce values of a number of u32's that are used as bools or for
really low values.

(cherry picked from commit 5baf94e40ddeb3deab97a897b9da2e93ece4c654)

3 years agorpc: enforce various field values
Victor Julien [Mon, 21 Feb 2022 09:08:41 +0000 (10:08 +0100)] 
rpc: enforce various field values

Minimal frag_len. Correct msgtype and others.

(cherry picked from commit 1c57e3c18d746743bc2cbcaba35f78b5f9b15675)

3 years agonfs/rpc: enforce length field limits
Victor Julien [Sat, 19 Feb 2022 07:42:35 +0000 (08:42 +0100)] 
nfs/rpc: enforce length field limits

Limits based on the Linux kernel limits. Then multiplied a few times
to allow for other implementations to have higher limits.

(cherry picked from commit fe76ab1803bea02f47f691b5944ba319a3bc0300)

3 years agonfs4: verify bool fields
Victor Julien [Mon, 21 Feb 2022 11:20:13 +0000 (12:20 +0100)] 
nfs4: verify bool fields

(cherry picked from commit 5ecb626e50048cfa43ad67cdd80307377e90926c)

3 years agothreads: Honor per-thread stack size setting 7134/head
Jeff Lucovsky [Fri, 11 Feb 2022 14:02:39 +0000 (09:02 -0500)] 
threads: Honor per-thread stack size setting

Issue: 4550

This commit adjusts the per-thread stack size if a size has been
configured. If the setting has not been configured, the default
per-thread stack size provided by the runtime mechanisms are used.

(cherry picked from commit 6232c94235a60f2f89d444dfd5a9e20efc0a5a60)

3 years agoconfig/thread: Use config'd per-thread stack size
Jeff Lucovsky [Fri, 11 Feb 2022 13:36:28 +0000 (08:36 -0500)] 
config/thread: Use config'd per-thread stack size

Issue: 4550

This commit checks if there's a config setting for threading.stack-size
and assigns the value to a global variable for use during thread
creation.

(cherry picked from commit e4d60f451b8a226e32a3df8e232efe437b11e2e3)

3 years agosuricata.yaml: Add per-thread stack size setting
Jeff Lucovsky [Fri, 11 Feb 2022 13:35:36 +0000 (08:35 -0500)] 
suricata.yaml: Add per-thread stack size setting

Issue: 4550
(cherry picked from commit d79a317cea900e60166068c4d6703caab7218509)

3 years agoconfig/debug: Debug probe for getattr_np
Jeff Lucovsky [Tue, 15 Feb 2022 15:50:33 +0000 (10:50 -0500)] 
config/debug: Debug probe for getattr_np

This commit adds a probe for a non-portable function to be used in
diagnostic debug display of a thread's stack size.

(cherry picked from commit deb49862cd6734ccb15c1cc91e430c8ee01292aa)

3 years agodoc: Describe per-thread stack size config setting
Jeff Lucovsky [Fri, 11 Feb 2022 13:34:12 +0000 (08:34 -0500)] 
doc: Describe per-thread stack size config setting

Issue: 4550

This commit documents the new per-thread stack-size setting. Some
systems have a small default value that is not suitable for Suricata's
multi-threaded architecture and adjustment may be required.

(cherry picked from commit 117e11b0ae0c64d8c8b61d3d343957be3b9eb128)

3 years agodetect/ipproto: Use builtin protocol table
Jeff Lucovsky [Sat, 12 Feb 2022 14:46:29 +0000 (09:46 -0500)] 
detect/ipproto: Use builtin protocol table

Issue 5072

This commit causes the built-in protocol table to be used for protocol
name and number validation.

(cherry picked from commit 4f2f745bed4858c6441b1b936f66453e87b715bb)

3 years agodetect/tests: Register protoname tests
Jeff Lucovsky [Thu, 17 Feb 2022 16:06:16 +0000 (11:06 -0500)] 
detect/tests: Register protoname tests

Issue: 5072

This commit registers the proto-name unit tests.

(cherry picked from commit 3bd1d258a98c7e6f6fa45feb111f3297f1a527e7)

3 years agodetect/ipproto: Add init/release functions
Jeff Lucovsky [Thu, 17 Feb 2022 16:05:22 +0000 (11:05 -0500)] 
detect/ipproto: Add init/release functions

Issue: 5072

This commit insures that the protocol name hashtables are initialized
and released.

(cherry picked from commit b52496725771c0a4bc98e1fe5c246bca77e8da03)

3 years agoutil/proto: Protocol-name functions
Jeff Lucovsky [Sat, 12 Feb 2022 14:44:13 +0000 (09:44 -0500)] 
util/proto: Protocol-name functions

Issue: 5072

This commit adds utility functions handling protocol names.

(cherry picked from commit ff0cf89738d7b947a3d7d8d0c6c5dc7adb95e6af)

3 years agoerror/hash: Add error code for hash add failures
Jeff Lucovsky [Fri, 18 Feb 2022 12:41:13 +0000 (07:41 -0500)] 
error/hash: Add error code for hash add failures

Issue: 5072
(cherry picked from commit 1e2883602b8d95d96fa9c31e5ebbcb68ceeaa14a)

3 years agoutil: export Djb2 hash string function
Philippe Antoine [Thu, 18 Feb 2021 10:44:24 +0000 (11:44 +0100)] 
util: export Djb2 hash string function

(cherry picked from commit 5cb996efcf2248a6a04abfe2bde1dc5115bdfac2)

3 years agoproto: Remove dependency on /etc/protocols
Jeff Lucovsky [Thu, 6 May 2021 13:49:55 +0000 (09:49 -0400)] 
proto: Remove dependency on /etc/protocols

This commit eliminates the dependency on /etc/protocols and equivalent
on other platforms by using a static table of IANA assigned protocol
values (names, description).

(cherry picked from commit e77e8dbe18bdb70e42713abe4e90ec724adab5ca)

3 years agodetect/address: use common cidr code
Victor Julien [Thu, 17 Feb 2022 15:53:43 +0000 (16:53 +0100)] 
detect/address: use common cidr code

(cherry picked from commit 8a73b242e389a5dbc223de83e2e7542bc46903d8)

3 years agoradix: fix unittests after stict checks
Victor Julien [Thu, 17 Feb 2022 12:35:45 +0000 (13:35 +0100)] 
radix: fix unittests after stict checks

(cherry picked from commit 38aec1439c7fffc49144ae5ccb38da2d462c85d9)

3 years agoradix: improve address range handling
Victor Julien [Thu, 17 Feb 2022 12:32:17 +0000 (13:32 +0100)] 
radix: improve address range handling

Handle non-exact address ranges from string. This can come directly
from user input, so here it is accepted but the address is converted
to the address range start. A warning will be issued.

Debug validation checks are added to catch this.

This issue could lead to bad input from iprep (with cidr), defrag config
and htp server personalities to produce a bad radix tree.

Bug: #5084.
Bug: #5085.
Bug: #5086.
(cherry picked from commit 7fd6fe732b360d4f1de4483b539af2eda813b966)

3 years agodetect/iponly: fix netmask handling
Victor Julien [Tue, 15 Feb 2022 19:43:27 +0000 (20:43 +0100)] 
detect/iponly: fix netmask handling

If the ipaddress was not the address range start, it was not masked to turn
it into that. So 1.2.3.4/24 was not stored as address 1.2.3.0 with netmask 24,
but as 1.2.3.4 with netmask 24. This was then propagated into the radix tree,
where it was used as an exact key in exact lookups, giving unexpected results.

This patch implements the netmask handling for IPv4 and IPv6, and adds a set
of tests for it.

Bug: #5081.
Bug: #5066.
(cherry picked from commit 51d4e0dced9cac7463ee924b00bc8666c68b20c3)

3 years agoradix: fix unittest not cleaning up
Victor Julien [Tue, 15 Feb 2022 13:44:08 +0000 (14:44 +0100)] 
radix: fix unittest not cleaning up

(cherry picked from commit 311085dd34c445b8d9195c8517475b764a61eb3b)

3 years agodetect/iponly: update SigNumArray comment
Victor Julien [Sat, 12 Feb 2022 07:23:03 +0000 (08:23 +0100)] 
detect/iponly: update SigNumArray comment

(cherry picked from commit 860daceb04301850bc059e73c7344cb843248bf9)

3 years agoradix: cleanup test
Victor Julien [Fri, 11 Feb 2022 14:53:41 +0000 (15:53 +0100)] 
radix: cleanup test

(cherry picked from commit d04dface20657e781f683c30f159afcefa5ac1ea)

3 years agoradix: add tests for Bug #5066
Victor Julien [Fri, 11 Feb 2022 14:52:51 +0000 (15:52 +0100)] 
radix: add tests for Bug #5066

Bug: #5066.
(cherry picked from commit 89b7ac0a60bf83c69bbd9f4f45be128524ff3999)

3 years agoradix: fix FP/FN issue in IP-only
Victor Julien [Fri, 11 Feb 2022 14:50:01 +0000 (15:50 +0100)] 
radix: fix FP/FN issue in IP-only

A bug was reported about the IP-only rules not correctly matching. This was
traced to the rules in question not getting recorded into the IP-only radix
tree correctly.

Sequence:

- 100.117.241.0/25 inserted into the tree

- 100.117.241.0/26 inserted into the tree

Both are part of the same radix node, but recorded by their different netmasks
in the user data portion.

Then faulty insert happens:

- 100.117.241.64/26

For reference, these net blocks compute to:

- 100.117.241.0/25:  100.117.241.0  - 100.117.241.127
- 100.117.241.0/26:  100.117.241.0  - 100.117.241.63
- 100.117.241.64/26: 100.117.241.64 - 100.117.241.127

The IP-only engine first does a search to get to the user data it may need to
include. It does so for with `SCRadixFindKeyIPV4ExactMatch` for single IPs, or
using `SCRadixFindKeyIPV4Netblock` in case of a netblock. Any "match" from
either of these is considered an "exact match" by the IP-only setup code.

This exact match expectation turned out to be wrong and
`SCRadixFindKeyIPV4Netblock` behaved more like "best match" instead, which is
a non-exact match, but its the next best match if no exact match is found.

The way the look up for 100.117.241.64/26 went wrong, is that it returned
the user data for 100.117.241.0/26. This happens as follows:

- first it would do an exact find, which didn't give a result

- then it removed bits from the keystream until it found a matching node
  and explore if any of the netmasks it contained matched. Here the first
  step of the bug started:

  it considered the netmask (with user data) a match that matched the
  number of bits of the matching key, but not of the actual range netmask cidr
  value.

  So in this case the number of shared bits between `100.117.241.0/25` and
  `100.117.241.64/26` was 25, so it assumed that the user data for the
  netmask 25 was the match.

  To summarize this step, there are 2 problems with this:
  1. it returns a match on something that isn't an exact match
  2. it considered the wrong netmask value

- the radix code then took the returned node, and did the netmask check
  again. This time it did use its own netmask value, so this time
  it did find the netmask 26 (+ user data). However because of the node that
  was returned, this netmask (+user data) belongs to `100.117.241.0`, not to
  `100.117.241.64`.

- the IP-only detection code was satisfied with what it assumed to be
  "exact match" and just updated the user data to include the user data that
  should have been associated with `100.117.241.64/26` to `100.117.241.0/26`.

This patch addresses the issue as follows:

It makes `SCRadixFindKeyIPV4Netblock` also return an exact match by propagating
the netmask in the search and in the evaluation of the stored netmasks.

It does away with the secondary netmask (+user data) evaluation.
`SCRadixFindKeyIPV4Netblock` is expected to handle this correctly.

The IP-only engine will fall back to the "not found" path, which does an explicit
"best match" lookup and then insert a new entry into the radix tree based on
the user data of the "best match".

Issue was present for IPv6 as well.

Bug: #5066.
(cherry picked from commit 6aa6e3f95372e256006b78e921391d88c1010f15)

3 years agodetect/iponly: cleanups
Victor Julien [Thu, 10 Feb 2022 08:04:23 +0000 (09:04 +0100)] 
detect/iponly: cleanups

(cherry picked from commit 6381b1a643bb9cc4ea8860def42b633a70c35e3e)

3 years agodetect/iponly: minor debug 'Print' improvements
Victor Julien [Thu, 10 Feb 2022 07:50:07 +0000 (08:50 +0100)] 
detect/iponly: minor debug 'Print' improvements

(cherry picked from commit de4354abcbbce376bc3047311561d0fbf16e4569)

3 years agoradix: minor debug 'Print' improvements
Victor Julien [Thu, 10 Feb 2022 07:49:17 +0000 (08:49 +0100)] 
radix: minor debug 'Print' improvements

(cherry picked from commit 3ca3c9dfbee112cc061ee0f3f7bbd5bde92a849d)

3 years agoutil/cidr: simplify IPv4 CIDR handling; add IPv6
Victor Julien [Thu, 17 Feb 2022 09:56:53 +0000 (10:56 +0100)] 
util/cidr: simplify IPv4 CIDR handling; add IPv6

Instead of building a table at init just calculate it on demand.

Callsites are all during init, so its not performance critical.

Add similar function for IPv6.

(cherry picked from commit e04d378e587d99fa40e1b237c0ef4db5cfde1902)

3 years agooutput: fix timestamp missing usecs
Victor Julien [Fri, 18 Feb 2022 09:19:04 +0000 (10:19 +0100)] 
output: fix timestamp missing usecs

On ARM 32bit with Musl `tv_usecs` is defined as `int64_t` which lead to
CreateIsoTimeString() printing all zeros on the usecs. Work around this
by first assigning to a `int64_t` and then updating the expected format
string to accept `int64_t`.

Bug: #5094.
(cherry picked from commit a0c0471f1f51af0171ed5df1e2de0b900651bc19)

3 years agounittests: clean up packet clear logic
Jeff Lucovsky [Sun, 27 Feb 2022 18:12:10 +0000 (13:12 -0500)] 
unittests: clean up packet clear logic

Substitute for cherry-picking 629acb8141e608b3d34eee576a7e121c7555d2c3

3 years agodecode: release refs from PacketFree
Victor Julien [Wed, 23 Feb 2022 12:40:59 +0000 (13:40 +0100)] 
decode: release refs from PacketFree

Mostly helps unittests.

(cherry picked from commit f07d5b2d89ed27d075e9f9328fd678d6ea701889)

3 years agodetect/iprep: fix host locking issues
Victor Julien [Wed, 23 Feb 2022 10:08:45 +0000 (11:08 +0100)] 
detect/iprep: fix host locking issues

Separate the code paths between reusing a Packet stored host reference
and fetching a new reference from the host hash.

This addresses the issue where in some conditions use_cnt could get
desync'd.

Bug: #2802.
(cherry picked from commit 49a36bb323d44a3ef453f284c35780523c9d3bd7)

3 years agoiprep: unify free handling
Victor Julien [Wed, 23 Feb 2022 10:05:40 +0000 (11:05 +0100)] 
iprep: unify free handling

Introduce a new util function to free a Hosts iprep code. It also
handles the Host use_cnt decrement.

This change makes sure we also decrement the use_cnt when cleaning
up when shutting down the host table.

Move the BUG_ON check for use_cnt into the HostClearMemory() func
to check it in more cases.

(cherry picked from commit 172d2b28a58d923ddbc5644dd3bfb52e353b8a55)

3 years agologging: change ownership of application log if needed
Jason Ish [Thu, 20 Jan 2022 18:08:33 +0000 (12:08 -0600)] 
logging: change ownership of application log if needed

When running with privilege dropping, the application log file
is opened before privileges are dropped resulting in Suricata
failing to re-open the file for file rotation.

If needed, chown the application to the run-as user/group after
opening.

Ticker #4523

(cherry picked from commit 59ac1fe277b0dc2fc2b6c1739c10eb58a0d48cba)

3 years agostartup: initialize run as user info sooner
Jason Ish [Thu, 20 Jan 2022 17:40:24 +0000 (11:40 -0600)] 
startup: initialize run as user info sooner

Initialize the run-as user info after loading the config, but
before setting up logging (previously it was done while initializing
signal handlers). This will allow the log file to be given the
correct permissions if Suricata is configured to run as a non-root
user.

(cherry picked from commit 08518df373625eed25d03108bd24b9e389295c81)

3 years agoswf: fix coverity warnings
Victor Julien [Tue, 15 Feb 2022 06:56:57 +0000 (07:56 +0100)] 
swf: fix coverity warnings

*** CID 1499365:    (UNINIT)
/src/util-file-swf-decompression.c: 98 in FileSwfZlibDecompression()
92         infstream.avail_in = (uInt)compressed_data_len;
93         infstream.next_in = (Bytef *)compressed_data;
94         infstream.avail_out = (uInt)decompressed_data_len;
95         infstream.next_out = (Bytef *)decompressed_data;
96
97         inflateInit(&infstream);

>>>     CID 1499365:    (UNINIT)
>>>     Using uninitialized value "infstream.total_out" when calling "inflate".
98         int result = inflate(&infstream, Z_NO_FLUSH);
99         switch(result) {
100             case Z_STREAM_END:
101                 break;
102             case Z_OK:
103                 break;

/src/util-file-swf-decompression.c: 98 in FileSwfZlibDecompression()
92         infstream.avail_in = (uInt)compressed_data_len;
93         infstream.next_in = (Bytef *)compressed_data;
94         infstream.avail_out = (uInt)decompressed_data_len;
95         infstream.next_out = (Bytef *)decompressed_data;
96
97         inflateInit(&infstream);

>>>     CID 1499365:    (UNINIT)
>>>     Using uninitialized value "infstream.total_out" when calling "inflate".
98         int result = inflate(&infstream, Z_NO_FLUSH);
99         switch(result) {
100             case Z_STREAM_END:
101                 break;
102             case Z_OK:
103                 break;

*** CID 1499363:  Error handling issues  (CHECKED_RETURN)
/src/util-file-swf-decompression.c: 97 in FileSwfZlibDecompression()
91
92         infstream.avail_in = (uInt)compressed_data_len;
93         infstream.next_in = (Bytef *)compressed_data;
94         infstream.avail_out = (uInt)decompressed_data_len;
95         infstream.next_out = (Bytef *)decompressed_data;
96
>>>     CID 1499363:  Error handling issues  (CHECKED_RETURN)
>>>     Calling "inflateInit_(&infstream, "1.2.11", 112)" without checking return value. This library function may fail and return an error code.
97         inflateInit(&infstream);
98         int result = inflate(&infstream, Z_NO_FLUSH);
99         switch(result) {
100             case Z_STREAM_END:
101                 break;
102             case Z_OK:

Bug: #5079.
(cherry picked from commit e1f7c63fa8ed9ee787f89776162ca221573ef227)

3 years agogithub-ci: Replace CentOS 8 with AlmaLinux 8.4
Jeff Lucovsky [Sun, 20 Feb 2022 14:01:43 +0000 (09:01 -0500)] 
github-ci: Replace CentOS 8 with AlmaLinux 8.4

3 years agoftp: do not set alproto if one was already found 7028/head
Philippe Antoine [Mon, 29 Nov 2021 09:59:10 +0000 (10:59 +0100)] 
ftp: do not set alproto if one was already found

Ticket: 4857

If a pattern such as GET is seen ine the beginning of the
file transferred over ftp-data, this flow will get recognized
as HTTP, and a HTTP state will be created during parsing.

Thus, we cannot override directly alproto's values

This solves the segfault, but not the logical bug that the flow
should be classified as FTP-DATA instead of HTTP

(cherry picked from commit dd32238667f08c7211ae4fa27cfe43af7cffd52d)

3 years agostream-tcp-reassemble: fix reassembly direction for FIN packets
Angelo Mirabella [Thu, 20 Jan 2022 14:52:33 +0000 (14:52 +0000)] 
stream-tcp-reassemble: fix reassembly direction for FIN packets

Suricata invokes the stream reassembly logic only for the current packet
direction if the packet contains a FIN flag. However, this does not
handle the case in which the packet ACKs data from the opposing direction.
This patch forces the invocation of the stream reassembly logic
on both direction when Suricata sees a FIN packet.

(cherry picked from commit 41a139b590a059171d0517a455c562486e1a21c2)

3 years agoci: remove fedora 31 build as its eol
Victor Julien [Mon, 17 Jan 2022 11:41:04 +0000 (12:41 +0100)] 
ci: remove fedora 31 build as its eol

3 years agostream: increase memcap on memory errors 6795/head
Eric Leblond [Thu, 19 Aug 2021 09:22:06 +0000 (11:22 +0200)] 
stream: increase memcap on memory errors

(cherry picked from commit c1bffa9545b8aa9d0fc64ac6511edd34919135d7)

3 years agoutil/streaming: improve error handling
Eric Leblond [Thu, 19 Aug 2021 09:21:21 +0000 (11:21 +0200)] 
util/streaming: improve error handling

It differentiates memory error than regular ones.

(cherry picked from commit 0e70958e67398f599b77ba991dc631e025cae5f4)

3 years agopacketpool: reset PacketRelease on return to pool
Victor Julien [Fri, 5 Nov 2021 19:05:43 +0000 (20:05 +0100)] 
packetpool: reset PacketRelease on return to pool

Reset PacketRelease callback to make sure its not set to a capture
specific callback.

As an example:

  0x000055e00af09d35 in AFPReleaseDataFromRing (p=0x7f1d884cb830) at source-af-packet.c:653
  0x000055e00af09dd0 in AFPReleasePacket (p=0x7f1d884cb830) at source-af-packet.c:678
  0x000055e00ab53d7e in TmqhOutputPacketpool (t=0x55e00fb79250, p=0x7f1d884cb830) at tmqh-packetpool.c:465
  0x000055e00af08dec in TmThreadsSlotProcessPkt (tv=0x55e00fb79250, s=0x55e012134790, p=0x7f1d884cb830) at tm-threads.h:201
  0x000055e00af08e70 in TmThreadsCaptureInjectPacket (tv=0x55e00fb79250, p=0x7f1d884cb830) at tm-threads.h:221
  0x000055e00af08f2e in TmThreadsCaptureHandleTimeout (tv=0x55e00fb79250, p=0x0) at tm-threads.h:245
  0x000055e00af0ba76 in ReceiveAFPLoop (tv=0x55e00fb79250, data=0x7f1d884ccb60, slot=0x55e01198e4b0) at source-af-packet.c:1321
  0x000055e00ab55257 in TmThreadsSlotPktAcqLoop (td=0x55e00fb79250) at tm-threads.c:312
  0x00007f1dca9d5609 in start_thread (arg=<optimized out>) at pthread_create.c:477
  0x00007f1dca7c6293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Here the packet was a pseudo packet to handle a timeout condition. But
the ReleasePacket callback was still set to AFPReleasePacket from a
previous use of the Packet.

Bug: #4807.
(cherry picked from commit 07ce871da4b385f6f1d86310f5dcdf00e6c79692)

3 years agodatasets: initialize after dropping privileges
Jason Ish [Thu, 9 Dec 2021 22:59:04 +0000 (16:59 -0600)] 
datasets: initialize after dropping privileges

Move initialization of datasets to a point after privileges
have been dropped.

Ticket 4239

(cherry picked from commit 92eb14c5adc985433dd44bdcac18fa6e67440043)

3 years agoaf-packet: use configured cluster-id when checking for fanout
Jason Ish [Fri, 16 Oct 2020 15:43:29 +0000 (09:43 -0600)] 
af-packet: use configured cluster-id when checking for fanout

When testing for fanout support a cluster-id of 1 was always being
used instead of the configured cluster-id. This limited fanout
support to only one Suricata instance.

Instead of hardcoding an ID of 1, use the configured cluster-id.

Also make cluster_id a uint16_t instead of an int in AFPThreadVars.

Redmine issue:
https://redmine.openinfosecfoundation.org/issues/3419

(cherry picked from commit df0ed6fda47fc80a397710316ae78cc3967e29bb)

3 years agostream: fix stream pruning being too aggressive
Victor Julien [Thu, 13 Jan 2022 11:13:43 +0000 (12:13 +0100)] 
stream: fix stream pruning being too aggressive

Pruning of StreamBufferBlocks could remove blocks that fell entirely
after the target offset due to a logic error. This could lead to data
being evicted that was still meant to be processed in theapp-layer
parsers.

Bug: #4953.
(cherry picked from commit 78f5e082f5188204606ab9ceb5044447e49aaca2)

3 years agostream: unify ack'd right edge handling
Victor Julien [Sat, 11 Dec 2021 07:12:31 +0000 (08:12 +0100)] 
stream: unify ack'd right edge handling

Use util function in all code needing the ack'd data.

(cherry picked from commit 258415b23f455e3aaee6d97a0e485e5690959011)

3 years agosuricatasc: Handle incomplete/empty recv values
Jeff Lucovsky [Tue, 11 Jan 2022 19:16:24 +0000 (14:16 -0500)] 
suricatasc: Handle incomplete/empty recv values

Issue: 4947

Improve handling of values returned by recv. Sometimes, recv returns an
empty string if suricata terminates asynchronously.

(cherry picked from commit fc6fdef07006e5382839ef88873e90754b30e6e0)

3 years agodoc/eve-json-format/dns: Describing Z-bit
Odin Jenseg [Tue, 8 Jun 2021 19:56:41 +0000 (21:56 +0200)] 
doc/eve-json-format/dns: Describing Z-bit

(cherry picked from commit 2a5d79e42609bd5ae0d0456cd5c458e20670160e)

3 years agodns: add dns flag to dns request logging
Jason Ish [Tue, 21 Dec 2021 22:49:21 +0000 (16:49 -0600)] 
dns: add dns flag to dns request logging

Ticket #4515

(cherry picked from commit 0861b66e152c6d2a0517a4a043ef56bdb1be4d76)

3 years agodns: Logging of Z-bit
Odin Jenseg [Tue, 8 Jun 2021 19:55:36 +0000 (21:55 +0200)] 
dns: Logging of Z-bit

[Edit by Jason Ish: fix flag bit value]

Ticket #4515

(cherry picked from commit dfb6f105e8b104bf27cce24b650d047d0925c145)

3 years agodns: create transaction even if z-bit was set
Jason Ish [Tue, 21 Dec 2021 22:34:05 +0000 (16:34 -0600)] 
dns: create transaction even if z-bit was set

It appears that DNS servers will still process a DNS request even if the
z-bit is set, our parser will fail the transaction. So create the
transaction, but still set the event.

Ticket #4924

(cherry picked from commit fcbdc304265aaba724b245a5c3f02e00c8059a1a)

3 years agodetect/file_data: Reject invalid protocols
Jeff Lucovsky [Thu, 13 Jan 2022 15:39:12 +0000 (10:39 -0500)] 
detect/file_data: Reject invalid protocols

Issue: #4895

This commit causes Suricata to reject signatures that combine TCP-based
alerts using file_data with NFS keywords.

file_data doesn't support the NFS protocol.

3 years agoconf: avoid quadratic complexity
Philippe Antoine [Mon, 8 Nov 2021 13:18:30 +0000 (14:18 +0100)] 
conf: avoid quadratic complexity

Ticket: 4812

When adding many sequence nodes

(cherry picked from commit 15649424a76d01eb332d85620ffc4956d4f3d9be)

3 years agoprofiling: fix profiling with sample rate
Eric Leblond [Wed, 17 Nov 2021 15:43:23 +0000 (16:43 +0100)] 
profiling: fix profiling with sample rate

Rules profiling was returning invalid results when used with sample
rate. The problem was that the sample condition was run twice in the
packet flow. As a result, the second pass was not initializing the
variable storing the initial CPU ticks and the resulting performance
counters were reporting invalid values.

Bug: #4836.
(cherry picked from commit 6d5f59696dda77e1e7b2c45f51413b76690da4e9)

3 years agosmtp: log transaction even if no email present
Jason Ish [Wed, 10 Nov 2021 22:38:35 +0000 (16:38 -0600)] 
smtp: log transaction even if no email present

The SMTP transaction logger was not writing the log if the email
portion of the logger failed, such as in the case of STARTTLS
where this is no email decoded.

Ticket #4817

(cherry picked from commit 52b9c12f41d890cda340fe3b1c7e7e3e9d673d73)

3 years agoci: add fedora 35 to builds
Corey Thomas [Wed, 10 Nov 2021 13:21:38 +0000 (08:21 -0500)] 
ci: add fedora 35 to builds

(cherry picked from commit 7be793f7b479d66977ff68ea1ca3c832c744b3d2)

3 years agooutput/json: Eliminate dangling XFF reference 6727/head
Jeff Lucovsky [Sun, 19 Dec 2021 18:08:59 +0000 (13:08 -0500)] 
output/json: Eliminate dangling XFF reference

This commit eliminates a dangling reference caused by the use of
json_object_set. This function adds a reference to the final parameter
-- in this case the object returned by json_string() whereas
json_object_set_new doesn't add the additional reference to the
final parameter.

3 years agodatasets: free old data when reusing a hash container
Victor Julien [Mon, 7 Sep 2020 08:25:37 +0000 (10:25 +0200)] 
datasets: free old data when reusing a hash container

(cherry picked from commit 017c038bcba9ebe279e470cc48e1f440dfa0ef7d)

3 years agorust/dns: Ensure JSON object doesn't get leaked
Jeff Lucovsky [Thu, 16 Dec 2021 14:32:52 +0000 (09:32 -0500)] 
rust/dns: Ensure JSON object doesn't get leaked

Ensure js_answers isn't leaked when detailed logging is not in use. This
commit changes how js_answers allocation is performed. Previously, it
was allocated regardless of whether detailed logging was enabled. Now,
it's only allocated if detailed logging is enabled.

Ticket: #4901

3 years agomingw: add bcrypt to LDADD for rust compilation
Victor Julien [Tue, 7 Dec 2021 08:56:51 +0000 (09:56 +0100)] 
mingw: add bcrypt to LDADD for rust compilation

(cherry picked from commit e93dc24383443398d6a2e888931d7000b392c09a)

3 years agorust: fix urls in comments 6644/head
Jason Ish [Wed, 17 Nov 2021 01:34:11 +0000 (19:34 -0600)] 
rust: fix urls in comments

rustdoc was complaining about the format of the URL in a comment
while trying to generate documentation. Convert the comment to a
non-rustdoc comment for now to satisfy rustdoc.

3 years agoci: update Ubuntu 16.04 test to 20.04 with MSRV
Jason Ish [Mon, 22 Nov 2021 21:05:19 +0000 (15:05 -0600)] 
ci: update Ubuntu 16.04 test to 20.04 with MSRV

Update the Ubuntu 16.04 test to Ubuntu 20.04 and make it clear
that it is also testing the minimum supported Rust version for 6.0.

Note: Ubuntu 16.04 is now EOL.

3 years agoversion: branch is going towards 5.0.9
Victor Julien [Thu, 18 Nov 2021 08:56:15 +0000 (09:56 +0100)] 
version: branch is going towards 5.0.9

3 years agorelease: 5.0.8; update changelog; require htp 0.5.39 suricata-5.0.8
Victor Julien [Tue, 16 Nov 2021 12:04:45 +0000 (13:04 +0100)] 
release: 5.0.8; update changelog; require htp 0.5.39

3 years agodetect: suppress scan-build warning
Victor Julien [Mon, 15 Nov 2021 15:03:02 +0000 (16:03 +0100)] 
detect: suppress scan-build warning