]> git.ipfire.org Git - thirdparty/suricata.git/log
thirdparty/suricata.git
10 years agoFix make distcheck on CentOS 5.11 1344/head
Victor Julien [Thu, 19 Feb 2015 10:45:09 +0000 (11:45 +0100)] 
Fix make distcheck on CentOS 5.11

datarootdir was undefined. Define it.

10 years agoCentOS 5.11 pkg-config fix
Victor Julien [Thu, 19 Feb 2015 09:29:14 +0000 (10:29 +0100)] 
CentOS 5.11 pkg-config fix

Check for the minimal pkg-config 0.21 version. Without it, CentOS'
pkg-config will fail with the warning:

configure: error: The pkg-config script could not be found or is too old.

10 years agosmtp: fix compiler warning
Victor Julien [Wed, 25 Feb 2015 07:00:18 +0000 (08:00 +0100)] 
smtp: fix compiler warning

cc1: warnings being treated as errors
app-layer-smtp.c: In function â€˜SMTPParseCommandBDAT’:
app-layer-smtp.c:639: warning: dereferencing type-punned pointer will break strict-aliasing rules
make[3]: *** [app-layer-smtp.o] Error 1

10 years agoutil-magic: make unittests less specific
Victor Julien [Wed, 25 Feb 2015 06:37:54 +0000 (07:37 +0100)] 
util-magic: make unittests less specific

So they pass on CentOS 5.11 as well.

10 years agosuricatasc: fix dump-counters command
Eric Leblond [Fri, 20 Feb 2015 21:28:59 +0000 (22:28 +0100)] 
suricatasc: fix dump-counters command

As the exit of dump-counters command is really long and takes time
to get it can take more 5 iterations to get the complete message.
Increasing to 20 seems to fix the issue (10 was ok too).

10 years agoutil-running-mode: setup config file
Eric Leblond [Tue, 27 Jan 2015 20:22:29 +0000 (21:22 +0100)] 
util-running-mode: setup config file

Without that we get warning message.

10 years agolist keywords: fix regression on app layer name
Eric Leblond [Fri, 16 Jan 2015 13:37:41 +0000 (14:37 +0100)] 
list keywords: fix regression on app layer name

It was not anymore displayed.

10 years agolist keywords: restore 1.4 similar output
Eric Leblond [Fri, 16 Jan 2015 09:12:55 +0000 (10:12 +0100)] 
list keywords: restore 1.4 similar output

Unset was previously displayed if the application layer was not
set. Code before this patch was displaying '(null)' which is not
user friendly.

10 years agostream-tcp: init config before spawning threads
Victor Julien [Wed, 25 Feb 2015 06:09:51 +0000 (07:09 +0100)] 
stream-tcp: init config before spawning threads

Bug 1318.

10 years agopcap-file: add missing atomic init 1336/head
Eric Leblond [Thu, 12 Feb 2015 21:27:07 +0000 (22:27 +0100)] 
pcap-file: add missing atomic init

It is mandatory to init all atomic to avoid problem on system
without atomic support.

10 years agorunmode-pcap-file: suppress useless include
Eric Leblond [Thu, 12 Feb 2015 21:18:23 +0000 (22:18 +0100)] 
runmode-pcap-file: suppress useless include

10 years agotcp midstream: fix window scaling 1332/head
Victor Julien [Tue, 10 Feb 2015 11:03:42 +0000 (12:03 +0100)] 
tcp midstream: fix window scaling

If stream is picked by ACK, we can't know the wscale, so we assume it's
set to max. Howver, we didn't apply this to the initial window size we
set.

10 years agofile: register filedata log before file log 1313/head
Victor Julien [Fri, 23 Jan 2015 09:22:55 +0000 (10:22 +0100)] 
file: register filedata log before file log

This way the file log can log the 'stored' info that the filedata
log sets.

10 years agofile: improve file pruning
Victor Julien [Fri, 23 Jan 2015 09:22:01 +0000 (10:22 +0100)] 
file: improve file pruning

Check if file has been logged/stored before considering it 'done'.

10 years agorunmodes: add funcs to check if file loggers enabled
Victor Julien [Fri, 23 Jan 2015 09:20:37 +0000 (10:20 +0100)] 
runmodes: add funcs to check if file loggers enabled

Add functions to check if file/filedata loggers are enabled.

10 years agofile: optimize file pruning
Victor Julien [Thu, 22 Jan 2015 18:24:35 +0000 (19:24 +0100)] 
file: optimize file pruning

FilePrune would clear the files, but not free them and remove them
from the list. This lead to ever growing lists in some cases.
Especially in HTTP sessions with many transactions, this could slow
us down.

10 years agoUpdate Changelog for 2.0.6 release suricata-2.0.6
Victor Julien [Thu, 15 Jan 2015 09:08:25 +0000 (10:08 +0100)] 
Update Changelog for 2.0.6 release

10 years agoFix OS X 10.10 unittest failure
Victor Julien [Wed, 14 Jan 2015 22:49:54 +0000 (23:49 +0100)] 
Fix OS X 10.10 unittest failure

Work around OS X 10.10 Yosemite returning EDEADLK on a rwlock wrlocked
then tested by wrtrylock. All other OS' (and versions of OS X that I
tested) seem to return EBUSY instead.

10 years agoAdd test for memcmp issue.
Victor Julien [Tue, 16 Dec 2014 18:41:32 +0000 (19:41 +0100)] 
Add test for memcmp issue.

10 years agomemcmp: fix lowercase compare issue
Victor Julien [Tue, 16 Dec 2014 18:12:20 +0000 (19:12 +0100)] 
memcmp: fix lowercase compare issue

MemcmpLowercase would not compare the first byte of both input buffers
leading to two non-identical buffers to be considered the same.

Tile version is not affected.

10 years agoFix a fix: defrag OOM condition
Victor Julien [Fri, 12 Dec 2014 17:20:24 +0000 (18:20 +0100)] 
Fix a fix: defrag OOM condition

** CID 1257764:  Dereference after null check  (FORWARD_NULL)
/src/defrag.c: 291 in Defrag4Reassemble()

** CID 1257763:  Dereference after null check  (FORWARD_NULL)
/src/defrag.c: 409 in Defrag6Reassemble()

In the error case 'rp' can be both NULL or non-NULL.

10 years agoFix compilation on OS X Yosemite 1292/head
Victor Julien [Wed, 14 Jan 2015 08:48:39 +0000 (09:48 +0100)] 
Fix compilation on OS X Yosemite

Due to our unconditional declaration of the strlcat and strlcpy
functions, compilation failed on OS X Yosemite.

Bug #1192

10 years agoUpdate reference.config 1290/head
Travis Green [Tue, 23 Dec 2014 22:10:21 +0000 (15:10 -0700)] 
Update reference.config

Updated reference.config to match ET Open reference.config found here:
https://rules.emergingthreats.net/open/suricata/reference.config

Due to startup error shown here:
root@xxxxxxx01:/etc/suricata/rules# /usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid --af-packet
23/12/2014 -- 22:07:56 - <Error> - [ERRCODE: SC_ERR_REFERENCE_UNKNOWN(150)] - unknown reference key "osvdb". Supported keys are defined in reference.config file.  Please have a look at the conf param "reference-config-file"
<...>
Killed

10 years agostream: improve inline mode GAP handling 1273/head
Victor Julien [Tue, 9 Dec 2014 12:37:54 +0000 (13:37 +0100)] 
stream: improve inline mode GAP handling

Don't conclude a GAP is 'final' until the missing data is ack'd.

Further, cleanup and unify more with the non-inline code.

10 years agostream: move utility functions
Victor Julien [Tue, 9 Dec 2014 11:55:19 +0000 (12:55 +0100)] 
stream: move utility functions

This way they can be used by the *Inline* functions as well.

10 years agooutput-json: fix duplicate logging 1266/head
Eric Leblond [Mon, 15 Dec 2014 23:14:59 +0000 (00:14 +0100)] 
output-json: fix duplicate logging

This patches is fixing a issue in the OutputJSONBuffer function. It
was writing to file the content of the buffer starting from the start
to the final offset. But as the writing is done for each JSON string
we are duplicating the previous events if we are reusing the same
buffer.

Duplication was for example triggered when we have multiple alerts
attached to a packet. In the case of two alerts, the first one was
logged twice more as the second one.

This si almost the same code as the one of master but it fixes a
conflict during cherry picking in:
src/output-json-alert.c

10 years agoUpdate Changelog for 2.0.5 suricata-2.0.5
Victor Julien [Fri, 12 Dec 2014 10:34:21 +0000 (11:34 +0100)] 
Update Changelog for 2.0.5

10 years agoMake bad copy-mode be an error in runmode-tile. 1249/head
Ken Steele [Wed, 5 Nov 2014 16:43:40 +0000 (11:43 -0500)] 
Make bad copy-mode be an error in runmode-tile.

10 years agoBug 1329: error out on invalid rule protocol
Victor Julien [Fri, 5 Dec 2014 13:32:56 +0000 (14:32 +0100)] 
Bug 1329: error out on invalid rule protocol

Due to a logic error in AppLayerProtoDetectGetProtoByName invalid
protocols would not be detected as such. Instead of ALPROTO_UNKNOWN
ALPROTO_MAX was returned.

Bug #1329

10 years agounix-manager: fix cppcheck errors
Eric Leblond [Mon, 8 Dec 2014 13:49:16 +0000 (14:49 +0100)] 
unix-manager: fix cppcheck errors

This patch fixes the following errors:
 [src/unix-manager.c:306]: (error) Memory pointed to by 'client' is freed twice.
 [src/unix-manager.c:313]: (error) Memory pointed to by 'client' is freed twice.
 [src/unix-manager.c:323]: (error) Memory pointed to by 'client' is freed twice.
 [src/unix-manager.c:334]: (error) Memory pointed to by 'client' is freed twice.

Unix manager was treating the packet after closing the socket if message was
too long.

10 years agostream: don't send EOF to AppLayer too soon 1248/head
Victor Julien [Wed, 10 Dec 2014 16:31:57 +0000 (17:31 +0100)] 
stream: don't send EOF to AppLayer too soon

Sending EOF too soon results in the AppLayer cleaning up prematurely.

10 years agoCorrect flow memory usage bookkeeping error
Ken Steele [Wed, 19 Nov 2014 18:48:41 +0000 (13:48 -0500)] 
Correct flow memory usage bookkeeping error

Fix bug 1321 where flow_memuse was incremented more on allocation than
free.

10 years agohttp: don't crash when normalizing uri on low memory
Victor Julien [Wed, 3 Dec 2014 15:08:19 +0000 (16:08 +0100)] 
http: don't crash when normalizing uri on low memory

10 years agodefrag: don't crash when out of memory
Victor Julien [Wed, 3 Dec 2014 15:07:00 +0000 (16:07 +0100)] 
defrag: don't crash when out of memory

Handle memory allocation errors in defrag better. Could lead to
crashes if malloc errors happened.

10 years agopcre: fix var capture for non relative matches 1230/head
Victor Julien [Mon, 1 Dec 2014 09:36:52 +0000 (10:36 +0100)] 
pcre: fix var capture for non relative matches

Var capture setup depended on the match being relative due to a logic
error.

11 years agoFix to output a JSON buffer to an Unix domain socket.
Christophe M [Tue, 29 Jul 2014 14:20:34 +0000 (16:20 +0200)] 
Fix to output a JSON buffer to an Unix domain socket.

Create the JSON buffer and write to it like regular file.

Upper function SCConfLogOpenGeneric already handle it properly.

Closes issue #1246.

11 years agoMake suricata_ctl_flags be volatile
Ken Steele [Wed, 29 Oct 2014 19:43:42 +0000 (15:43 -0400)] 
Make suricata_ctl_flags be volatile

The global variable suricata_ctl_flags needs to volatile, otherwise the
compiler might not cause the variable to be read every time because it
doesn't know other threads might write the variable.

This was causing Suricata to not exit under some conditions.

11 years agostream/async: improve handling of syn/ack pickup
Victor Julien [Thu, 30 Oct 2014 10:07:38 +0000 (11:07 +0100)] 
stream/async: improve handling of syn/ack pickup

If we picked up the ssn with a syn/ack, we don't need to make more
assumptions about sack and wscale after that.

11 years agostream/async: fix session setup issues
Victor Julien [Thu, 30 Oct 2014 09:16:40 +0000 (10:16 +0100)] 
stream/async: fix session setup issues

For these 2 cases:

1. Missing SYN:
-> syn <= missing
<- syn/ack
-> ack
-> data

2. Missing SYN and 3whs ACK:
-> syn <= missing
<- syn/ack
-> ack <= missing
-> data

Fix session pickup. The next_win settings weren't correctly set, so that
packets were rejected.

Bug 1190.

11 years agoprscript: use master-2.0.x in master-2.0.x branch
Victor Julien [Wed, 29 Oct 2014 16:43:54 +0000 (17:43 +0100)] 
prscript: use master-2.0.x in master-2.0.x branch

11 years agostream: improve tracking with pkt loss in async 1192/head
Victor Julien [Sun, 26 Oct 2014 09:07:15 +0000 (10:07 +0100)] 
stream: improve tracking with pkt loss in async

If 3whs SYN/ACK and ACK are missing we can still pick up the session if
in async-oneside mode.

-> syn
<- syn/ack <= missing
-> ack     <= missing
-> data

Bug 1190.

11 years agoSuppress ARM valgrind warning 1185/head
Victor Julien [Sat, 18 Oct 2014 19:47:52 +0000 (21:47 +0200)] 
Suppress ARM valgrind warning

Not Suricata related, so suppress.

11 years agostream: improve bad window update detection
Victor Julien [Thu, 23 Oct 2014 10:54:13 +0000 (12:54 +0200)] 
stream: improve bad window update detection

Ignore more valid ACKs in FIN shutdown phase.

Improve heuristic for window shrinking in case of packet loss.

11 years agostream: fix 'bad window update' false positive
Victor Julien [Thu, 16 Oct 2014 16:38:19 +0000 (18:38 +0200)] 
stream: fix 'bad window update' false positive

ACK packets completing a valid FIN shutdown could be flagged as
'bad window update' if they would shrink the window.

This patch detects this case before doing the bad window update
check.

11 years agosanity check tcp SACK edges prior to recording. Attempt to avoid Cisco ASA
Tom DeCanio [Fri, 10 Oct 2014 16:40:37 +0000 (09:40 -0700)] 
sanity check tcp SACK edges prior to recording. Attempt to avoid Cisco ASA
tcp randomization issue with it not properly writing sequence numbers in SACK.

11 years agostream: improve handling of 3whs packet loss
Victor Julien [Thu, 16 Oct 2014 12:59:38 +0000 (14:59 +0200)] 
stream: improve handling of 3whs packet loss

If the 3whs ACK and some data after this is lost, we would get stuck
in the 'SYN_RECV' state, where from there each packet might be
considered invalid.

This patch improves the handling of this case.

11 years agostream: fix ssh/ssl logging on tcp session reuse
Victor Julien [Thu, 16 Oct 2014 12:54:22 +0000 (14:54 +0200)] 
stream: fix ssh/ssl logging on tcp session reuse

TCP session reuse wouldn't unset FLOW_NO_APPLAYER_INSPECTION.

11 years agossh.softwareversion: allow more characters
Victor Julien [Thu, 16 Oct 2014 12:41:59 +0000 (14:41 +0200)] 
ssh.softwareversion: allow more characters

The keyword would not allow matching on "OpenSSH_5.5p1 Debian-6+squeeze5"
as the + and space characters were not allowed.

This patch adds support for them.

11 years agoBug 1230: Check all SigMatch lists for a named byte_extract variable.
Jason Ish [Mon, 29 Sep 2014 16:00:06 +0000 (10:00 -0600)] 
Bug 1230: Check all SigMatch lists for a named byte_extract variable.

11 years agoBug 1230: Simple test case demonstrating failure.
Jason Ish [Mon, 29 Sep 2014 15:37:03 +0000 (09:37 -0600)] 
Bug 1230: Simple test case demonstrating failure.

11 years agoFix compiler warning about uninitialized variable in mpipe. 1159/head
Ken Steele [Tue, 12 Aug 2014 23:57:41 +0000 (19:57 -0400)] 
Fix compiler warning about uninitialized variable in mpipe.

11 years agotile: silence harmless cc warnings
Victor Julien [Wed, 8 Oct 2014 10:59:39 +0000 (12:59 +0200)] 
tile: silence harmless cc warnings

11 years agolua: improve configure checks
Victor Julien [Mon, 11 Aug 2014 12:14:59 +0000 (14:14 +0200)] 
lua: improve configure checks

The base 'lua' library has different names on different OS' and even
Linux distro's. Instead of selecting the proper one, we now just try
all. This way no OS/distro specific knowledge about the name is needed.

11 years agotcp session reuse: reset detect state
Victor Julien [Tue, 7 Oct 2014 09:27:54 +0000 (11:27 +0200)] 
tcp session reuse: reset detect state

Reset the detect state on TCP session reuse. We reset the app layer,
so we need to reset the stateful detection as well.

11 years agodetect state: always lock de_state_m
Victor Julien [Tue, 7 Oct 2014 09:25:25 +0000 (11:25 +0200)] 
detect state: always lock de_state_m

Always lock the de_state_m on access, also at flow recycle or
cleanup.

11 years agofilestore: fix parsing bug 1149/head 1150/head
Victor Julien [Tue, 30 Sep 2014 07:56:41 +0000 (09:56 +0200)] 
filestore: fix parsing bug

Filestore keyword can have options or no options, and the parser
was enforcing the NOOPT flag too strictly.

Bug #1288

11 years agoUpdate changelog for 2.0.4 suricata-2.0.4
Victor Julien [Tue, 23 Sep 2014 10:16:15 +0000 (12:16 +0200)] 
Update changelog for 2.0.4

11 years agossh: convert error message to debug statement
Victor Julien [Thu, 18 Sep 2014 08:13:18 +0000 (10:13 +0200)] 
ssh: convert error message to debug statement

Don't print errors based on traffic issues.

11 years agoapp-layer-ssh: fix banner parser
Eric Leblond [Fri, 12 Sep 2014 08:02:12 +0000 (10:02 +0200)] 
app-layer-ssh: fix banner parser

Carefully crafted SSH banner could result in parser error.

CVE 2014-6603

Signed-off-by: Eric Leblond <eric@regit.org>
Reported-By: Steffen Bauch
11 years agoipv6: RH extension header parsing issue
Victor Julien [Wed, 17 Sep 2014 12:26:27 +0000 (14:26 +0200)] 
ipv6: RH extension header parsing issue

A logic error in the IPv6 Routing header parsing caused accidental
updating of the original packet buffer. The calculated extension
header lenght was set to the length field of the routing header,
causing it to be wrong.

This has 2 consequences:

1. defrag failure. As the now modified payload was used in defrag,
the decoding of the reassembled packet now contained a broken length
field for the routing header. This would lead to decoding failure.

The potential here is evasion, although it would trigger:
[1:2200014:1] SURICATA IPv6 truncated extension header

2. in IPS mode, especially the AF_PACKET mode, the modified and now
broken packet would be transmitted on the wire. It's likely that
end hosts and/or routers would reject this packet.

NFQ based IPS mode would be less affected, as it 'verdicts' based on
the packet handle. In case of replacing the packet (replace keyword
or stream normalization) it could broadcast the bad packet.

Additionally, the RH Type 0 address parsing was also broken. It too
would modify the original packet. As the result of this code was not
used anywhere else in the engine, this code is now disabled.

Reported-By: Rafael Schaefer <rschaefer@ernw.de>
11 years agoaf-packet: check pointers before use
Victor Julien [Mon, 22 Sep 2014 15:33:40 +0000 (17:33 +0200)] 
af-packet: check pointers before use

11 years agoaf-packet: force suricata in IPS mode when needed
Eric Leblond [Fri, 19 Sep 2014 14:54:00 +0000 (16:54 +0200)] 
af-packet: force suricata in IPS mode when needed

AF_PACKET is not setting the engine mode to IPS when some
interfaces are peered and use IPS mode. This is due to the
fact, it is possible to peer 2 interfaces and run an IPS on
them and have a third one that is running in normal IDS mode.

In fact this choice is the bad one as unwanted side effect is
that there is no drop log and that stream inline is not used.

To fix that, this patch puts suricata in IPS mode as soon as
there is two interfaces in IPS mode. And it displays a error
message to warn user that the accuracy of detection on IDS only
interfaces will be low.

11 years agorule parser: set flag for optionless keywords 1129/head
Victor Julien [Fri, 19 Sep 2014 11:39:37 +0000 (13:39 +0200)] 
rule parser: set flag for optionless keywords

If a keyword doesn't have an argument, it should set the SIGMATCH_NOOPT
flag so the parser knows.

11 years agorule parser: fix crashing on malformed options
Victor Julien [Fri, 19 Sep 2014 11:38:47 +0000 (13:38 +0200)] 
rule parser: fix crashing on malformed options

Fix crashing on malformed rule options like 'rev;1;'.

Bug 1254.

11 years agolua: fix http.request_line 1127/head
Victor Julien [Thu, 18 Sep 2014 15:02:47 +0000 (17:02 +0200)] 
lua: fix http.request_line

The request line scripts were added to the AMATCH list. However, there
is not AppLayerMatch function defined for lua scripts. So scripts
would not run.

This patch adds the request line scripts to the normal 'MATCH' list.

Bug #1273.

11 years agotls: fix a tls.fingerprint issue in debug mode
Victor Julien [Fri, 19 Sep 2014 08:40:20 +0000 (10:40 +0200)] 
tls: fix a tls.fingerprint issue in debug mode

Print proper variable so we don't NULL-deref.

Bug #1279.

11 years agosource-nfq: fix display of next queue
Eric Leblond [Tue, 2 Sep 2014 13:33:34 +0000 (15:33 +0200)] 
source-nfq: fix display of next queue

Suricata was displaying an invalid queue number as the value is
shift at the moment of its assignement.

11 years agoBug fix: IPv6 addresses in negated range and IPv6 string into radix tree.
bmeeks8 [Fri, 5 Sep 2014 13:22:11 +0000 (09:22 -0400)] 
Bug fix: IPv6 addresses in negated range and IPv6 string into radix tree.

I found three somewhat serious IPv6 address bugs within the Suricata 2.0.x source code. Two are in the source module "detect-engine-address.c", and the third is in "util-radix-tree.c".

The first bug occurs within the function DetectAddressParse2(). When parsing an address string and a negated block is encountered (such as when parsing !$HOME_NET, for example), any corresponding IPv6 addresses were not getting added to the Group Heads in the DetectAddressList. Only IPv4 addresses were being added.

I discovered another bug related to IPv6 address ranges in the Signature Match Address Array comparison code for IPv6 addresses. The function DetectAddressMatchIPv6() walks a signature's source or destination match address list comparing each to the current packet's corresponding address value. The match address list consists of value pairs representing a lower and upper IP address range. If the packet's address is within that range (including equal to either the lower or upper bound), then a signature match flag is returned.

The original test of each signature match address to the packet was performed using a set of four compounded AND comparisons looking at each of the four 32-bit blocks that comprise an IPv6 address. The problem with the old comparison is that if ANY of the four 32-bit blocks failed the test, then a "no-match" was returned. This is incorrect. If one or more of the more significant 32-bit blocks met the condition, then it is a match no matter if some of the less significant 32-bit blocks did not meet the condition. Consider this example where Packet represents the packet address being checked, and Target represents the upper bound of a match address pair. We are testing if Packet is less than Target.

Packet -- 2001:0470 : 1f07:00e2 : 1988:01f1 : d468:27ab
Target -- 2001:0470 : 1f07:00e2 : a48c:2e52 : d121:101e

In this example the Packet's address is less than the target and it should give a match. However, the old code would compare each 32-bit block (shown spaced out above for clarity) and logically AND the result with the next least significant block comparison. If any of the four blocks failed the comparison, that kicked out the whole address. The flaw is illustrated above. The first two blocks are 2001:0470 and 1f07:00e2 and yield TRUE; the next less significant block is 1988:01f1 and a48c:2e52, and also yields TRUE (that is, Packet is less than Target); but the last block compare is FALSE (d468:27ab is not less than d121:101e). That last block is the least significant block, though, so its FALSE determination should not invalidate a TRUE from any of the more significant blocks. However, in the previous code using the compound logical AND block, that last least significant block would invalidate the tests done with the more significant blocks.

The other bug I found for IPv6 occurs when trying to parse and insert an IPv6 address into a Radix Tree using the function SCRadixAddKeyIPV6String(). The test for min and max values for an IPv6 CIDR mask incorrectly tests the upper limit as 32 when it should be 128 for an IPv6 address. I think this perhaps is an old copy-paste error if the IPv6 version of this function was initially copied from the corresponding IPv4 version directly above it in the code. Without this patch, the function will return null when you attempt to add an IPv6 network whose CIDR mask is larger than 32 (for example, the popular /64 mask will cause the function to return the NULL error condition).

(amended by Victor Julien)

11 years agoUpdate Changelog for 2.0.3 suricata-2.0.3
Victor Julien [Fri, 8 Aug 2014 07:49:18 +0000 (09:49 +0200)] 
Update Changelog for 2.0.3

11 years agostream: detect and filter out bad window updates 1093/head
Victor Julien [Wed, 16 Jul 2014 22:23:50 +0000 (00:23 +0200)] 
stream: detect and filter out bad window updates

Reported in bug 1238 is an issue where stream reassembly can be
disrupted.

A packet that was in-window, but otherwise unexpected set the
window to a really low value, causing the next *expected* packet
to be considered out of window. This lead to missing data in the
stream reassembly.

The packet was unexpected in various ways:
- it would ack unseen traffic
- it's sequence number would not match the expected next_seq
- set a really low window, while not being a proper window update

Detection however, it greatly hampered by the fact that in case of
packet loss, quite similar packets come in. Alerting in this case
is unwanted. Ignoring/skipping packets in this case as well.

The logic used in this patch is as follows. If:

- the packet is not a window update AND
- packet seq > next_seq AND
- packet acq > next_seq (packet acks unseen data) AND
- packet shrinks window more than it's own data size
THEN set event and skip the packet in the stream engine.

So in case of a segment with no data, any window shrinking is rejected.

Bug #1238.

11 years agoipv6: fix dst/hop header option parsing
Victor Julien [Thu, 7 Aug 2014 13:02:56 +0000 (15:02 +0200)] 
ipv6: fix dst/hop header option parsing

The extension header option parsing used a uint8_t internally. However
much bigger option sizes are valid.

11 years agodefrag: use 'struct timeval' for timeout tracking 1089/head
Victor Julien [Tue, 5 Aug 2014 15:28:17 +0000 (17:28 +0200)] 
defrag: use 'struct timeval' for timeout tracking

Until now the time out handling in defrag was done using a single
uint32_t that tracked seconds. This lead to corner cases, where
defrag trackers could be timed out a little too early.

11 years agoipv6: set event on unsupported nh
Victor Julien [Mon, 28 Jul 2014 12:41:15 +0000 (14:41 +0200)] 
ipv6: set event on unsupported nh

If a next header / protocol is encountered that we can't handle (yet)
set an event. Disabled the rule by default.

    decode-event:ipv6.unknown_next_header;

11 years agoipv6: more robust ipv6 exthdr handling
Victor Julien [Mon, 28 Jul 2014 11:59:44 +0000 (13:59 +0200)] 
ipv6: more robust ipv6 exthdr handling

Skip past Shim6, HIP and Mobility header.

Detect data after 'none' header.
    decode-event:ipv6.data_after_none_header;

11 years agoipv6: detect frag header reserved field non-zero
Victor Julien [Mon, 28 Jul 2014 10:07:13 +0000 (12:07 +0200)] 
ipv6: detect frag header reserved field non-zero

Frag Header length field is reserved, and should be set to 0.

    decode-event:ipv6.fh_non_zero_reserved_field;

11 years agoipv6: make exthdr parsing more robust
Victor Julien [Thu, 24 Jul 2014 14:50:34 +0000 (16:50 +0200)] 
ipv6: make exthdr parsing more robust

Improve data length checks. Detect PadN option with 0 length.

11 years agoipv6: set flag on type 0 routing header
Victor Julien [Thu, 17 Jul 2014 13:57:16 +0000 (15:57 +0200)] 
ipv6: set flag on type 0 routing header

Type 0 Routing headers are deprecated per RFC 5095.

This patch sets an decode event flag that can be matched on through:
    decode-event:ipv6.rh_type_0;

11 years agoipv6 defrag: fix unfragmentable exthdr handling
Victor Julien [Thu, 24 Jul 2014 11:39:10 +0000 (13:39 +0200)] 
ipv6 defrag: fix unfragmentable exthdr handling

Fix or rather implement handling of unfragmentable exthdrs in ipv6.
The exthdr(s) appearing before the frag header were copied into the
reassembled packet correctly, however the stripping of the frag header
did not work correctly.

Example:
The common case is a frag header directly after the ipv6 header:

[ipv6 header]->[frag header]->[icmpv6 (part1)]
[ipv6 header]->[frag header]->[icmpv6 (part2)]

This would result in:
[ipv6 header]->[icmpv6]

The ipv6 headers 'next header' setting would be updated to point to
whatever the frag header was pointing to.

This would also happen when is this case:

[ipv6 header]->[hop header]->[frag header]->[icmpv6 (part1)]
[ipv6 header]->[hop header]->[frag header]->[icmpv6 (part2)]

The result would be:
[ipv6 header]->[hop header]->[icmpv6]

However, here too the ipv6 header would have been updated to point
to what the frag header pointed at. So it would consider the hop header
as if it was an ICMPv6 header, or whatever the frag header pointed at.

The result is that packets would not be correctly parsed, and thus this
issue can lead to evasion.

This patch implements handling of the unfragmentable part. In the first
segment that is stored in the list for reassembly, this patch detects
unfragmentable headers and updates it to have the last unfragmentable
header point to the layer after the frag header.

Also, the ipv6 headers 'next hdr' is only updated if no unfragmentable
headers are used. If they are used, the original value is correct.

Reported-By: Rafael Schaefer <rschaefer@ernw.de>
Bug #1244.

11 years agoprscript: update URL
Eric Leblond [Thu, 31 Jul 2014 09:48:41 +0000 (11:48 +0200)] 
prscript: update URL

Buildbot server has been moved to another box.

11 years agomagic: disable tests depending on magic version
Victor Julien [Thu, 31 Jul 2014 13:49:11 +0000 (15:49 +0200)] 
magic: disable tests depending on magic version

Some tests depend on specific results by specific magic versions.
Disable these.

11 years agoUpdate app-layer-htp.c
sxhlinux [Thu, 24 Jul 2014 02:00:40 +0000 (10:00 +0800)] 
Update app-layer-htp.c

When keyword "boundary=" doesn't exist in the http_header, the value of r is 0 and this condition shouldn't return 0 instead 1;

11 years agotravis-ci: use make check
Eric Leblond [Fri, 4 Jul 2014 15:00:55 +0000 (17:00 +0200)] 
travis-ci: use make check

This patch replaces unittest run by make check. It also install
coccinelle so we should have more test.

11 years agococcinelle: fix problem with coccinelle 1.0rc21
Eric Leblond [Tue, 1 Jul 2014 17:27:34 +0000 (19:27 +0200)] 
coccinelle: fix problem with coccinelle 1.0rc21

coccinelle 1.0rc21 has a problem with regular expression handling.
This result in a Fatal Error when test system detects an coding
error.

This patch fixes the problem by using a simple blob inside
semantic patch instead of using a regular expression to define
the function.

It also fixes add an optimization on matching suppressing a
useless <.. ..> construction.

Fixes have been suggested by Julia Lawall.

11 years agoProfiling: fix compilation on CentOS5 1034/head
Victor Julien [Mon, 14 Jul 2014 13:25:50 +0000 (15:25 +0200)] 
Profiling: fix compilation on CentOS5

Bug #1207

11 years agohtp: init memuse atomics
Victor Julien [Mon, 14 Jul 2014 12:46:07 +0000 (14:46 +0200)] 
htp: init memuse atomics

In case of the spinlocked fallback code the lock was uninitialized.

11 years agoethtool: add missing include necessary for CentOS5
Victor Julien [Mon, 14 Jul 2014 12:42:54 +0000 (14:42 +0200)] 
ethtool: add missing include necessary for CentOS5

11 years agoFix compile-time error on old kernels and ethtool.h
Alexander Gozman [Fri, 13 Jun 2014 16:36:54 +0000 (20:36 +0400)] 
Fix compile-time error on old kernels and ethtool.h

11 years agoUpdate log-file.c 1024/head
sxhlinux [Thu, 10 Jul 2014 14:09:13 +0000 (22:09 +0800)] 
Update log-file.c

test whether tx_ud is NULL

11 years agoAdd initial travis-ci integration. 1016/head
Victor Julien [Fri, 4 Jul 2014 11:25:21 +0000 (13:25 +0200)] 
Add initial travis-ci integration.

11 years agoFix __thread configure check on Clang
Victor Julien [Wed, 2 Jul 2014 14:35:41 +0000 (16:35 +0200)] 
Fix __thread configure check on Clang

AC_TRY_COMPILE puts the code in a function already, and Clang didn't like
the function within the function declaration. This lead to test failure.

Clang now properly detects __thread support.

11 years agovalgrind/magic: add suppression for known issue
Victor Julien [Tue, 1 Jul 2014 09:11:08 +0000 (11:11 +0200)] 
valgrind/magic: add suppression for known issue

Add suppression for Ubuntu 14.04 64bit.

11 years agoFix lowercase table initialization (bug 1221)
Ken Steele [Tue, 24 Jun 2014 18:43:58 +0000 (14:43 -0400)] 
Fix lowercase table initialization (bug 1221)

The for loop needed to check for < 256, not < 255.

11 years agoUpdate Changelog for 2.0.2 release suricata-2.0.2
Victor Julien [Wed, 25 Jun 2014 13:29:18 +0000 (15:29 +0200)] 
Update Changelog for 2.0.2 release

11 years agolua: fix liblua use on OS X with macports
Victor Julien [Wed, 25 Jun 2014 08:44:30 +0000 (10:44 +0200)] 
lua: fix liblua use on OS X with macports

Set the correct lua pkg-config name used by macports.

11 years agodefrag: fix timeout setting when config is missing
Victor Julien [Mon, 16 Jun 2014 12:21:11 +0000 (14:21 +0200)] 
defrag: fix timeout setting when config is missing

When the config is missing, DefragPolicyGetHostTimeout will default
to returning -1. This will effectively set no timeout at all, leading
to defrag trackers being freed too early.

11 years agodefrag: fix reconstruction
Eric Leblond [Tue, 17 Jun 2014 09:19:05 +0000 (11:19 +0200)] 
defrag: fix reconstruction

This patch is fixing an issue in defragmentation code. The
insertion of a fragment in the list of fragments is done with
respect to the offset of the fragment. But the code was using
the original offset of the fragment and not the one of the
new reconstructed fragment (which can be different in the
case of overlapping segment where the left part is trimmed).

This case could lead to some evasion techniques by causing
Suricata to analyse a different payload.

11 years agounix socket: fix valgrind issue
Eric Leblond [Fri, 20 Jun 2014 16:11:29 +0000 (18:11 +0200)] 
unix socket: fix valgrind issue

This patch fixes the following issue reported by valgrind:
 31 errors in context 1 of 1:
 Conditional jump or move depends on uninitialised value(s)
    at 0x8AB2F8: UnixSocketPcapFilesCheck (runmode-unix-socket.c:279)
    by 0x97725D: UnixCommandBackgroundTasks (unix-manager.c:368)
    by 0x97BC52: UnixManagerThread (unix-manager.c:884)
    by 0x6155F6D: start_thread (pthread_create.c:311)
    by 0x6E3A9CC: clone (clone.S:113)

The running field in PcapCommand was not initialized.

11 years agounix-manager: fix crash when client disconnect
Eric Leblond [Fri, 20 Jun 2014 15:46:47 +0000 (17:46 +0200)] 
unix-manager: fix crash when client disconnect

This patch fixes an issue in unix socket handling. It is possible
that a socket did disconnect when analysing a command and because
the data treatment is done in a loop on clients this was leading
to a update of the list of clients during the loop. So we need
in fact to use TAILQ_FOREACH_SAFE instead of TAILQ_FOREACH.

Reported-by: Luigi Sandon <luigi.sandon@gmail.com>
Fix-suggested-by: Luigi Sandon <luigi.sandon@gmail.com>
11 years agoRework Tile CPU affinity setting to handle non-contiguous sets of CPUs.
Ken Steele [Fri, 20 Jun 2014 18:53:16 +0000 (14:53 -0400)] 
Rework Tile CPU affinity setting to handle non-contiguous sets of CPUs.

It is possible to have a non-contiguous CPU set, which was not being
handled correctly on the TILE architecture.

Added a "rank" field in the ThreadVar to store the worker's rank separately
from the cpu for this case.

11 years agoFix bug #1206 999/head
Mats Klepsland [Mon, 23 Jun 2014 07:14:16 +0000 (09:14 +0200)] 
Fix bug #1206

PF_RING ZC uses clusters in the same way as PF_RING DNA. Therefore,
this bug can be fixed as it was fixed for DNA (bug #598).