Bug #5868
closedfilestore: not saving files when filestore enabled by rule matching on file_data (instead saves 0 bytes)
Description
So I noticed that Suricata was occasionally creating zero sized files in the file store, despite the related JSON saying it should be larger.
All these settings should be fine as from the looks of https://suricata.readthedocs.io/en/suricata-6.0.10/file-extraction/file-extraction.html it should not be placing a upper limit on size.
I've found I can repeatedly reproduce this issue via grabbing putty. That said dropped a copy at http://vvelox.net/test.exe to make testing easier via wgetting as I could not think of where else off hand there is a executable to test with that is easily available via http and not https as well as not redirecting to https.
Example JSON in which it created a zero sized file...
{
"timestamp": "2023-02-16T20:41:58.380676+0000",
"flow_id": 1064488670622519,
"in_iface": "eth1",
"event_type": "fileinfo",
"src_ip": "98.102.84.2",
"src_port": 80,
"dest_ip": "10.112.39.45",
"dest_port": 58856,
"proto": "TCP",
"http": {
"hostname": "vvelox.net",
"url": "/test.exe",
"http_user_agent": "Wget/1.18 (linux-gnu)",
"http_content_type": "application/x-msdownload",
"http_method": "GET",
"protocol": "HTTP/1.1",
"status": 200,
"length": 1647912
},
"app_proto": "http",
"fileinfo": {
"filename": "/test.exe",
"sid": [
2018959
],
"magic": "PE32+ executable (GUI) x86-64, for MS Windows",
"gaps": false,
"state": "CLOSED",
"md5": "f838fdafd0881cf1e6040a07d78e840d",
"sha1": "2a35456b2f67bd12905378beb6eaf373f6a0d0d1",
"sha256": "fc6f9dbdf4b9f8dd1f5f3a74cb6e55119d3fe2c9db52436e10ba07842e6c3d7c",
"stored": true,
"file_id": 243,
"size": 1647912,
"tx_id": 0
}
}
Config bits for .stream...
memcap: 64mb checksum-validation: no # reject wrong csums inline: auto reassembly: memcap: 256mb depth: 0 toserver-chunk-size: 2560 toclient-chunk-size: 2560 randomize-chunk-size: yes
Config bits from .app-layer.protocols.http...
enabled: yes
libhtp:
default-config:
personality: IDS
request-body-limit: 0
response-body-limit: 0
request-body-minimal-inspect-size: 32kb
request-body-inspect-window: 4kb
response-body-minimal-inspect-size: 40kb
response-body-inspect-window: 16kb
response-body-decompress-layer-limit: 2
http-body-inline: auto
swf-decompression:
enabled: yes
type: both
compress-depth: 0
decompress-depth: 0
double-decode-path: no
double-decode-query: no
server-config:
Output section...
- file-store:
version: 2
enabled: yes
dir: /var/log/suricata/files
write-fileinfo: yes
stream-depth: 5242880
force-hash: [sha1, md5]
xff:
enabled: no
mode: extra-data
deployment: reverse
header: X-Forwarded-For
Output from suricata --build-info...
This is Suricata version 6.0.10 RELEASE
Features: PCAP_SET_BUFF AF_PACKET HAVE_PACKET_FANOUT LIBCAP_NG LIBNET1.1 HAVE_HTP_URI_NORMALIZE_HOOK PCRE_JIT HAVE_NSS HAVE_LIBJANSSON TLS TLS_C11 MAGIC RUST
SIMD support: SSE_4_2 SSE_4_1 SSE_3
Atomic intrinsics: 1 2 4 8 16 byte(s)
64-bits, Little-endian architecture
GCC version 6.3.0 20170516, C version 201112
compiled with -fstack-protector
compiled with _FORTIFY_SOURCE=2
L1 cache line size (CLS)=64
thread local storage method: _Thread_local
compiled with LibHTP v0.5.42, linked against LibHTP v0.5.42
Suricata Configuration:
AF_PACKET support: yes
eBPF support: no
XDP support: no
PF_RING support: no
NFQueue support: no
NFLOG support: no
IPFW support: no
Netmap support: no using new api: no
DAG enabled: no
Napatech enabled: no
WinDivert enabled: no
Unix socket enabled: yes
Detection enabled: yes
Libmagic support: yes
libnss support: yes
libnspr support: yes
libjansson support: yes
hiredis support: yes
hiredis async with libevent: yes
Prelude support: no
PCRE jit: yes
LUA support: no
libluajit: no
GeoIP2 support: no
Non-bundled htp: no
Hyperscan support: yes
Libnet support: yes
liblz4 support: yes
HTTP2 decompression: no
Rust support: yes
Rust strict mode: no
Rust compiler path: /usr/local/bin/rustc
Rust compiler version: rustc 1.56.1 (59eed8a2a 2021-11-01)
Cargo path: /usr/local/bin/cargo
Cargo version: cargo 1.56.0 (4ed5d137b 2021-10-04)
Cargo vendor: yes
Python support: yes
Python path: /usr/bin/python3
Install suricatactl: yes
Install suricatasc: yes
Install suricata-update: yes
Profiling enabled: no
Profiling locks enabled: no
Plugin support (experimental): yes
Development settings:
Coccinelle / spatch: no
Unit tests enabled: no
Debug output enabled: no
Debug validation enabled: no
Generic build parameters:
Installation prefix: /usr
Configuration directory: /etc/suricata/
Log directory: /var/log/suricata/
--prefix /usr
--sysconfdir /etc
--localstatedir /var
--datarootdir /usr/share
Host: x86_64-pc-linux-gnu
Compiler: gcc (exec name) / g++ (real)
GCC Protect enabled: yes
GCC march native enabled: yes
GCC Profile enabled: yes
Position Independent Executable enabled: no
CFLAGS -g -O2 -std=c11 -pg -march=native -I${srcdir}/../rust/gen -I${srcdir}/../rust/dist
PCAP_CFLAGS -I/usr/include
SECCFLAGS -fstack-protector -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security
Files