From 1775b01b58515c4e526b4a79659a6a1ca45abc80 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Fri, 19 Jan 2024 20:17:57 +0100 Subject: [PATCH] fuzzers: Add WebSocket fuzzer It immediately found an issue with &transient, but fairly stable thereafter. This is a separate fuzzer implementation as there's a custom Configure() call for the analyzer as well as disabling all other analyzers so we don't fuzz unrelated protocols. --- src/fuzzers/CMakeLists.txt | 1 + src/fuzzers/corpora/websocket-corpus.zip | Bin 0 -> 62884 bytes src/fuzzers/websocket-fuzzer.cc | 107 +++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 src/fuzzers/corpora/websocket-corpus.zip create mode 100644 src/fuzzers/websocket-fuzzer.cc diff --git a/src/fuzzers/CMakeLists.txt b/src/fuzzers/CMakeLists.txt index ef9012b9c1..41a46dc64a 100644 --- a/src/fuzzers/CMakeLists.txt +++ b/src/fuzzers/CMakeLists.txt @@ -94,6 +94,7 @@ target_link_libraries(zeek_fuzzer_shared PUBLIC ${zeek_fuzzer_shared_deps} add_fuzz_target(packet) add_fuzz_target(dns) +add_fuzz_target(websocket) add_generic_analyzer_fuzz_target(ftp) add_generic_analyzer_fuzz_target(http) diff --git a/src/fuzzers/corpora/websocket-corpus.zip b/src/fuzzers/corpora/websocket-corpus.zip new file mode 100644 index 0000000000000000000000000000000000000000..d2f3b23363dc10a97c8c9f33ebdcc986e0f5e8ba GIT binary patch literal 62884 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 literal 0 HcmV?d00001 diff --git a/src/fuzzers/websocket-fuzzer.cc b/src/fuzzers/websocket-fuzzer.cc new file mode 100644 index 0000000000..1d1b47d39e --- /dev/null +++ b/src/fuzzers/websocket-fuzzer.cc @@ -0,0 +1,107 @@ +#include + +#include "zeek/Conn.h" +#include "zeek/ID.h" +#include "zeek/RunState.h" +#include "zeek/analyzer/Analyzer.h" +#include "zeek/analyzer/Manager.h" +#include "zeek/analyzer/protocol/pia/PIA.h" +#include "zeek/analyzer/protocol/tcp/TCP.h" +#include "zeek/analyzer/protocol/websocket/WebSocket.h" +#include "zeek/fuzzers/FuzzBuffer.h" +#include "zeek/fuzzers/fuzzer-setup.h" +#include "zeek/packet_analysis/protocol/tcp/TCPSessionAdapter.h" +#include "zeek/session/Manager.h" + +static constexpr auto FUZZ_ANALYZER_NAME = "websocket"; + +static zeek::Connection* add_connection() { + static constexpr double network_time_start = 1439471031; + zeek::run_state::detail::update_network_time(network_time_start); + + zeek::Packet p; + zeek::ConnTuple conn_id; + conn_id.src_addr = zeek::IPAddr("1.2.3.4"); + conn_id.dst_addr = zeek::IPAddr("5.6.7.8"); + conn_id.src_port = htons(23132); + conn_id.dst_port = htons(80); + conn_id.is_one_way = false; + conn_id.proto = TRANSPORT_TCP; + zeek::detail::ConnKey key(conn_id); + zeek::Connection* conn = new zeek::Connection(key, network_time_start, &conn_id, 1, &p); + conn->SetTransport(TRANSPORT_TCP); + zeek::session_mgr->Insert(conn); + return conn; +} + +static std::tuple add_analyzer( + zeek::Connection* conn, const zeek::Tag& analyzer_tag) { + auto* tcp = new zeek::packet_analysis::TCP::TCPSessionAdapter(conn); + auto* pia = new zeek::analyzer::pia::PIA_TCP(conn); + auto a = zeek::analyzer_mgr->InstantiateAnalyzer(analyzer_tag, conn); + tcp->AddChildAnalyzer(a); + tcp->AddChildAnalyzer(pia->AsAnalyzer()); + conn->SetSessionAdapter(tcp, pia); + + return {a, tcp}; +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + static auto analyzer_tag = zeek::analyzer_mgr->GetComponentTag(FUZZ_ANALYZER_NAME); + if ( ! analyzer_tag ) { + std::fprintf(stderr, "Unable to find component tag for '%s'", FUZZ_ANALYZER_NAME); + abort(); + } + + // Would be nice to have that in LLVMFuzzerInitialize, oh well... + static bool one_time_setup = false; + if ( ! one_time_setup ) { + zeek::analyzer_mgr->DisableAllAnalyzers(); + zeek::analyzer_mgr->EnableAnalyzer(analyzer_tag); + const auto& pia_tcp_tag = zeek::analyzer_mgr->GetComponentTag("PIA_TCP"); + zeek::analyzer_mgr->EnableAnalyzer(pia_tcp_tag); + one_time_setup = true; + } + + zeek::detail::FuzzBuffer fb{data, size}; + + if ( ! fb.Valid() ) + return 0; + + auto conn = add_connection(); + if ( new_connection ) + conn->Event(new_connection, nullptr); + + auto [a, adapter] = add_analyzer(conn, analyzer_tag); + + // WebSocket specific initialization. May also want to fuzz + // this in the future. + static const auto& config_type = zeek::id::find_type("WebSocket::AnalyzerConfig"); + static const auto& config_rec = zeek::make_intrusive(config_type); + auto wsa = static_cast(a); + wsa->Configure(config_rec); + + for ( ;; ) { + auto chunk = fb.Next(); + + if ( ! chunk ) + break; + + try { + a->NextStream(chunk->size, chunk->data.get(), chunk->is_orig); + } catch ( const binpac::Exception& e ) { + } + + chunk = {}; // Release buffer before draining events. + zeek::event_mgr.Drain(); + + // Has the analyzer been disabled during event processing? + if ( ! adapter->HasChildAnalyzer(analyzer_tag) ) + break; + } + + zeek::event_mgr.Drain(); + zeek::detail::fuzzer_cleanup_one_input(); + + return 0; +}