Commit Graph

15733 Commits (a9c4dbaf90e529dffb87083fff06059638ac9512)
 

Author SHA1 Message Date
Philippe Antoine a9c4dbaf90 fuzz: use lower pcre limits
to avoid timeouts

instead of forbidding pcre signatures on stream

Ticket: 4858
(cherry picked from commit 7750226e43)
2 months ago
Lukas Sismis 38840c578e dpdk: collect port stats before device stop
Some drivers (e.g. BNXT) fail to report stats after the device is
stopped. Move stats collection (DPDKDumpCounters and PrintDPDKPortXstats)
to run before rte_eth_dev_stop() in HandleShutdown.

Also change PrintDPDKPortXstats error handling from FatalError to
graceful return since stats collection failures during shutdown
should not crash the application.

The commit removes ThreadExitPrintStats callback as the function had no
useful features after the stats were moved.

Ticket: 8253
(cherry picked from commit 27f398b5f2)
2 months ago
Philippe Antoine 613f28df05 rust: fix unnecessary_unwrap warnings
warning: called `unwrap` on `rd.pipe` after checking its variant with `is_some`
   --> src/smb/smb1.rs:858:28
    |
857 |             if rd.pipe.is_some() {
    |             -------------------- help: try: `if let Some(<item>) = rd.pipe`
858 |                 let pipe = rd.pipe.unwrap();
    |                            ^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.93.0/index.html#unnecessary_unwrap
    = note: `#[warn(clippy::unnecessary_unwrap)]` on by default

(cherry picked from commit 02cb0f2ac2)
3 months ago
Philippe Antoine 6c63400d65 http1: marks tx as updated when setting an event
Ticket: 8224

We sometimes set events to the last tx, so we do not have access
to the HtpTxUserData in the caller HTPHandleError

(cherry picked from commit c333b28719)
3 months ago
Victor Julien 96f7549a18 detect/base64_data: reset buffer offset
When in a `base64_decode`-`base64_data` pair the decode was depending
on another match through the relative option, the `buffer_offset` would
be updated to the relative position of the previous match. During the
`base64_data` phase, a relative match would use that offset even though
the match happened in a new buffer.

Example::

        http.request_body; content:"|27|";                              \
                base64_decode:relative;                                 \
                base64_data; content:"|ff ff ff ff|"; within:16;

This use of the `buffer_offset` is incorrect as that value is relative
to a buffer and the `base64_data` points to a new buffer.

This patch addresses this by resetting DetectEngineThreadCtx::buffer_offset
before inspecting `base64_data`.

Bug: #7842.
(cherry picked from commit 5f92a6cac3)
3 months ago
Victor Julien 7759e529de doc/userguide: endswith can be mixed with offset/distance/within
Bug: #5030.
(cherry picked from commit 73a873ecfe)
3 months ago
Victor Julien eedf7c3964 datasets: fix compile warnings
datasets-string.c:53:20: error: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Werror,-Wshorten-64-to-32]
        return len + 2;
        ~~~~~~ ~~~~^~~
1 error generated.

(cherry picked from commit 844f6011b1)
3 months ago
Shivani Bhardwaj 308e0b6881 version: start development towards 7.0.15 3 months ago
Shivani Bhardwaj 163bd652df release: 7.0.14; update changelog 3 months ago
Jason Ish a6d950315d dnp3: bound the maximum number of objects per tx
Default to 2048, but provide a user configuration value.

Ticket: #8181
(cherry picked from commit 2c95f1ff44)
3 months ago
Jason Ish fdd79bdb14 dnp3: set a bound on the number of points per message
16384 is used as the max, but a configuration parameter has been
provided. The reason for setting an upper bound is that bit flags can
create a memory amplification as we parse them into individual data
structures.

Ticket: #8181
(cherry picked from commit 3a32bb5743)
3 months ago
Jason Ish 635af8dc8b dnp3: reduce flood threshold to 32 and make configurable
Lower the number of unreplied requests from 500 to 32 to consider a
flood. At the very least this is an anomaly given the DNP3 spec mentions
that DNP3 should only have one outstanding request at a time, with an
exception for unsolicited responses, so in practice no more than 2
should be seen.

Additionally make this value configurable by introducing the max-tx
parameter.

Ticket: #8181
(cherry picked from commit a16f087b93)
3 months ago
Jason Ish 63225d5f8e dnp3: check done state, not complete state for progress
Complete is a flag used to tell if the message was completely parsed,
as not all messages may be completely parsed if we don't know all
their objects. However, they are still "done".

In the alstate-progress callback, check the done flag, not the
complete flag.

Ticket: #8181
(cherry picked from commit d61eef9a8a)
3 months ago
Philippe Antoine c9b80e5aff dcerpc: use saturating_add to count fragments
And do not overflow if we have traffic with more than 65K fragments

(cherry picked from commit a48200b9e5)
3 months ago
Shivani Bhardwaj df389f8a43 doc: add dcerpc.max-stub-size config param
(cherry picked from commit 6702791a9c)
3 months ago
Shivani Bhardwaj f82a388d02 dcerpc: add upper limit on stub data
DCERPC parsers had no upper bounds when it came to extending the stub
data buffer. Traffic can be crafted to bypass some internal parser
conditions to create an indefinite buffering in the stub_data array that
can make Suricata crash.

Add a default limit of 1MiB and make it configurable for the user.

Security 8182

Co-authored-by: Philippe Antoine <pantoine@oisf.net>
(cherry picked from commit e412215af9)
3 months ago
Shivani Bhardwaj 5789a3d376 detect/alert: check alert queue capacity before expanding
So far, the alert queue was expanded by doubling in size w/o any
boundary checks in place. This led to situations where doubling
the alert_queue_capacity meant overflow of the very same value
stored in det_ctx.
This led to heap-use-after-free in some conditions where
det_ctx->alert_queue_capacity overflowed.

Fix this by capping the max of alert_queue_capacity by checking if its
expansion could result in an overflow.

Security 8190

(cherry picked from commit ac1eb39418)
3 months ago
Philippe Antoine 7e704a3f50 output: use tx iterator for finding alert http xff
Ticket: 8156

Allows better performance.

(cherry picked from commit ab2e128176)
3 months ago
Philippe Antoine 44d0c81f53 output: optimize loop for finding alert http xff
Ticket: 8156

In case of non-tx alerts, we try to loop over all the txs to find
the xff header. Do not start from tx_id 0, but from min_id
as AppLayerParserTransactionsCleanup to skip txs that were freed

(cherry picked from commit 3b1a6c1711)
3 months ago
Philippe Antoine 27a2180bce datasets: allocates on the heap if string base64 is long
Ticket: 8110
(cherry picked from commit d6bc718e30)
3 months ago
Philippe Antoine 32609e6896 datasets: explicitly errors on too long string
Also avoids stack allocation

Ticket: 8110
(cherry picked from commit 0eff242137)
3 months ago
Giuseppe Longo 01caba469a flow: swap MACs when flow direction is swapped
When FlowSwap() reverses the direction of a flow, the MAC address sets
stored in the flow also need to be swapped to maintain consistency with
the new direction. Previously, MAC addresses were not swapped along with
other flow properties like packet/byte counters.

Ticket #8172

(cherry picked from commit f1b9669ed5)
4 months ago
Giuseppe Longo b2f99ca37b util/macset: fix code style
Code style fixed using clang-format.

Ticket #8172

(cherry picked from commit 8050738fea)
4 months ago
Jason Ish 767ea29a21 rust: update flate2 to 1.0.35
flate2 depends on adler which is no longer maintained and triggers this
cargo audit warning:

Crate:     adler
Version:   1.0.2
Warning:   unmaintained
Title:     adler crate is unmaintained, use adler2 instead
Date:      2025-09-05
ID:        RUSTSEC-2025-0056
URL:       https://rustsec.org/advisories/RUSTSEC-2025-0056
Dependency tree:
adler 1.0.2
└── miniz_oxide 0.7.1
    └── flate2 1.0.28
        └── suricata 7.0.14-dev

Updating flate2 uses a new maintained fork of adler.

Ticket: #5994
4 months ago
Victor Julien 52f042edea affinity: harden config parsing
To fix a null ptr deref:

        Program received signal SIGSEGV, Segmentation fault.
        __strcmp_avx2_rtm () at ../sysdeps/x86_64/multiarch/strcmp-avx2.S:115
        115     ../sysdeps/x86_64/multiarch/strcmp-avx2.S: No such file or directory.
        (gdb) bt
        #0  __strcmp_avx2_rtm () at ../sysdeps/x86_64/multiarch/strcmp-avx2.S:115
        #1  0x000055555568afec in AffinitySetupLoadFromConfig () at util-affinity.c:183
        #2  0x0000555555748785 in RunModeInitializeThreadSettings () at runmodes.c:1000
        #3  0x0000555555682f51 in SuricataMain (argc=19, argv=<optimized out>) at suricata.c:2979
        #4  0x00007ffff6829d90 in __libc_start_call_main (main=main@entry=0x55555567fa20 <main>, argc=argc@entry=19, argv=argv@entry=0x7fffffffe168) at ../sysdeps/nptl/libc_start_call_main.h:58
        #5  0x00007ffff6829e40 in __libc_start_main_impl (main=0x55555567fa20 <main>, argc=19, argv=0x7fffffffe168, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe158) at ../csu/libc-start.c:392
        #6  0x000055555567f955 in _start ()
        (gdb) f 1
        #1  0x000055555568afec in AffinitySetupLoadFromConfig () at util-affinity.c:183
        183             if (strcmp(affinity->val, "decode-cpu-set") == 0 ||
        (gdb) p affinity->val
        $1 = 0x0
4 months ago
Victor Julien ac1e9592ef doc/af-packet: document disable-hwtimestamp option
Ticket: #1954.
(cherry picked from commit be2c40bde7)
4 months ago
Victor Julien c52203667a af-packet: add disable-hwtimestamp option
HW timestamping is not always reliable, so add an option to disable it.

Bug: #1954.
(cherry picked from commit 18a6a079da)
4 months ago
Victor Julien a5ae543c61 parse/size: support IEEE 1541 size units
Introduce KiB, MiB and GiB. They are case sensitive as a lower case 'b'
means bits in the IEEE 1541 scheme.

KiB = 1024
MiB = 1048576
GiB = 1073741824

Ticket: #1457.
(cherry picked from commit 342aec8f1c)

Left the error messages untouched in the backport. So this is more
quietly supporting the new units.
4 months ago
Victor Julien 24e7cf2f2c parse/size: fix unit test checks
(cherry picked from commit 0e03691fdb)
4 months ago
Jeff Lucovsky 4b103e62d0 output/null: Add the null output device
This commit adds the null output device; to use, set the filetype
to "nullsink" for each output that should discard and never persist
logs/alerts/etc.

This is implemented as an "internal eve output plugin" just like the
syslog eve output type.

(cherry picked from commit ad96382cf2)
4 months ago
Jason Ish 117cf77024 ci: disable schema validate on msrv test
The MSRV test uses Rust 1.63, but schema validation requires 1.67.
4 months ago
Jason Ish c0e46c2714 rust: fix clippy warning for unused import
While debug_validate_bug_on is still used, it does not need to be
imported directly, as that macro is marked with `macro_export`, making
it globally available to the crate.

(cherry picked from commit 50224f2ee5)
4 months ago
Juliana Fajardini 2af9ae4354 devguide: update backports policy for Suricata 7.0
Also remove mentions to `master` and `6.0x`.

Task #7937

(cherry picked from commit 6c06ab6144)
4 months ago
Philippe Antoine 46da609846 detect/ssl: properly handle negation in ssl_version keyword
Ticket: 3220

DetectSslVersionMatch did not handle properly negation.
It could never match on a signatrue with ssl_version: !tls1.3
That is because, if we had such a signature and network traffic
with tls1.1, we were looking into DetectSslVersionData field
for tls1.1, which was not set, instead of looking at field
for tls1.3 which was set with negated flag.

Previous DetectSslVersionData was holding redundant information.
It did not need to have it for each ssl version, but just globally.
Also, it did not need to hold the version as a value in the array,
as it was redundant with the index of the array.

(cherry picked from commit c93e69830a)
4 months ago
Victor Julien 8774212400 exception-policy: rename 'reject-both' to 'rejectboth'
To align it with the rule action.

(cherry picked from commit d3aa4dd85e)
4 months ago
Victor Julien d6577ff5c2 doc/userguide: document reject-both expection policy
Ticket: #5974.
(cherry picked from commit 879561859b)
4 months ago
Victor Julien 4e6f9e4a91 exception-policy: add 'reject-both' option
Allow rejecting both sides of a connection. Has the same support
as regular reject (which is essentially rejectsrc).

Ticket: #5974.
(cherry picked from commit 4905f38470)
4 months ago
Juliana Fajardini dea701b9d2 schema: add descriptions to global memcaps/memuses
For FTP and HTTP.

Related to
Task #6434
5 months ago
Juliana Fajardini c918835026 schema: add additional properties to stats.capture
The `stats.capture` object may have different properties based on the
capture method used.

This adds the ones pertaining to AF_PACKET capture.

Related to
Task #6434

(cherry-picked from commit 2855574a2c)
5 months ago
Juliana Fajardini 81f88d4fdb schema: add desc for each main stats module
Part of the schema documentation effort.

Related to
Task #6434

(cherry-picked from commit 12e0e51864)
5 months ago
Juliana Fajardini c67357f382 schema: allow stats.stream event counters
While the counters exist, they're not present in the schema, causing
validation to fail if stats.stream-events is enabled.

Task #7858

(cherry picked from commit 025ffa6135)
5 months ago
Juliana Fajardini 9307b63c8f schema/stats: flow_mgr is actually flow.mgr
The schema accounts for a stats counters group that is a subgroup of the
flows stats counters. Remove `flow_mgr`, thus.

(cherry-picked from commit 173fec81f8)
5 months ago
Juliana Fajardini 82841d614b doc: remove remaining references to pruned flows
These were removed with a5587fec2e but these mentions went under the
radar.

(cherry picked from commit 1647081b29)
5 months ago
Philippe Antoine cfb488b320 file: fix hash computation for small multipart files
Ticket: 8119

Fixes: f68e2f5537 ("files: append data on closing even with
FILE_NOSTORE")

(cherry picked from commit 8b9a779a16)
5 months ago
Victor Julien 3a54ff6653 unix-socket/hostbits: fix ipv6 address parsing
In `add-hostbit`, `remove-hostbit` and `list-hostbit` commands, the IPv6
address parsing was not using the correct variable:

                 from /usr/include/dirent.h:25,
                 from suricata-common.h:73,
                 from runmode-unix-socket.c:18:
In function ‘inet_pton’,
    inlined from ‘UnixSocketHostbitAdd’ at runmode-unix-socket.c:1316:13:
/usr/include/x86_64-linux-gnu/bits/inet-fortified.h:56:10: warning: call to ‘__inet_pton_chk_warn’ declared with attribute warning: inet_pton called with a destination buffer size too small [-Wattribute-warning]
   56 |   return __glibc_fortify (inet_pton, __sz, sizeof (char),
      |          ^~~~~~~~~~~~~~~
In function ‘inet_pton’,
    inlined from ‘UnixSocketHostbitRemove’ at runmode-unix-socket.c:1403:13:
/usr/include/x86_64-linux-gnu/bits/inet-fortified.h:56:10: warning: call to ‘__inet_pton_chk_warn’ declared with attribute warning: inet_pton called with a destination buffer size too small [-Wattribute-warning]
   56 |   return __glibc_fortify (inet_pton, __sz, sizeof (char),
      |          ^~~~~~~~~~~~~~~
In function ‘inet_pton’,
    inlined from ‘UnixSocketHostbitList’ at runmode-unix-socket.c:1476:13:
/usr/include/x86_64-linux-gnu/bits/inet-fortified.h:56:10: warning: call to ‘__inet_pton_chk_warn’ declared with attribute warning: inet_pton called with a destination buffer size too small [-Wattribute-warning]
   56 |   return __glibc_fortify (inet_pton, __sz, sizeof (char),
      |          ^~~~~~~~~~~~~~~

Bug: #8102.
(cherry picked from commit 874a0e8d3d)
5 months ago
Victor Julien 2caed317c3 thresholds: fix unittest compile warning
In file included from decode.h:33,
                 from host.h:27,
                 from util-threshold-config.c:34:
util-threshold-config.c: In function 'SCThresholdConfInitContext':
util-debug.h:260:5: warning: '%s' directive argument is null [-Wformat-overflow=]
  260 |     SCLogErr(SC_LOG_WARNING, __FILE__, __FUNCTION__, __LINE__, _sc_module, __VA_ARGS__)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
util-threshold-config.c:190:9: note: in expansion of macro 'SCLogWarning'
  190 |         SCLogWarning("Error loading threshold configuration from %s", filename);
      |         ^~~~~~~~~~~~
util-threshold-config.c:190:66: note: format string is defined here
  190 |         SCLogWarning("Error loading threshold configuration from %s", filename);
      |                                                                  ^~

(cherry picked from commit 3a0f4dde07)
5 months ago
Philippe Antoine 900ed28b39 fuzz/conf: bail out on long sequence of scalars
Ticket: 8105
(cherry picked from commit 9d164d8794)
5 months ago
Jeff Lucovsky 3e1f76ade3 nfs: Support EXCLUSIVE4_1 flag
Issue: 8006

Support the EXCLUSIVE4_1 create mode added to NFS 4.1

(cherry picked from commit e1bf5cb1f3)
5 months ago
Shivani Bhardwaj 5e9ded4a50 version: start development towards 7.0.14 5 months ago
Shivani Bhardwaj 090542709c release: 7.0.13; update changelog 6 months ago