From ad04b8d0638aed0bbfaab98c466d24583507ce41 Mon Sep 17 00:00:00 2001 From: noam Date: Tue, 17 Jan 2023 11:34:09 +0200 Subject: [PATCH] Jun 16th update --- .../core/include/common_is/kdebug_flags.h | 1 + .../attachment_registrator.cc | 7 +- .../nginx_attachment/cidrs_data.cc | 2 +- .../nginx_attachment/nginx_attachment.cc | 5 - .../nginx_attachment_opaque.cc | 18 +- .../nginx_attachment_opaque.h | 10 +- .../nginx_attachment/nginx_parser.cc | 27 +- .../evaluators/http_transaction_data_eval.cc | 5 - components/http_manager/http_manager.cc | 7 +- .../http_manager/http_manager_opaque.cc | 5 - .../http_transaction_data.cc | 5 - components/include/i_downloader.h | 2 +- components/include/i_local_policy_mgmt_gen.h | 1 - components/include/i_orchestration_tools.h | 3 +- components/include/i_service_controller.h | 3 +- .../orchestrator/rest_api/get_resource_file.h | 25 +- .../rest_api/orchestration_check_update.h | 80 +- components/include/waap.h | 1 + .../checkpoint_product_handlers.h | 84 +- .../details_resolver_impl.h | 59 +- .../details_resolving_handler.cc | 2 +- .../orchestration/downloader/curl_client.cc | 4 - .../orchestration/downloader/curl_client.h | 4 - .../orchestration/downloader/downloader.cc | 33 +- .../downloader/downloader_ut/downloader_ut.cc | 42 +- .../orchestration/downloader/http_client.cc | 5 - .../orchestration/downloader/https_client.cc | 5 - .../include/mock/mock_downloader.h | 5 +- .../include/mock/mock_orchestration_tools.h | 4 +- .../include/mock/mock_service_controller.h | 5 +- .../include/appsec_practice_section.h | 41 +- .../include/triggers_section.h | 1 - .../include/trusted_sources_section.h | 4 +- .../local_policy_mgmt_gen.cc | 29 +- .../manifest_controller.cc | 5 - .../manifest_diff_calculator.cc | 5 - .../manifest_controller/manifest_handler.cc | 5 - .../orchestration/modules/data.cc | 6 - .../modules/orchestration_policy.cc | 6 - .../modules/orchestration_status.cc | 5 - .../orchestration/modules/package.cc | 6 - .../orchestration/modules/url_parser.cc | 5 - .../orchestration/orchestration_comp.cc | 80 +- .../orchestration_tools.cc | 22 +- .../orchestration_tools_ut.cc | 4 +- .../orchestration_multitenant_ut.cc | 88 +- .../orchestration_ut/orchestration_ut.cc | 32 +- .../package_handler/package_handler.cc | 5 - .../service_controller/service_controller.cc | 74 +- .../service_controller_ut.cc | 170 +- .../update_communication/fog_authenticator.cc | 7 +- .../update_communication/fog_communication.cc | 5 - .../hybrid_communication.cc | 9 +- .../local_communication.cc | 5 - .../update_communication.cc | 5 - .../security_apps/waap/include/i_serialize.h | 2 - .../waap/include/i_waap_asset_state.h | 4 +- .../security_apps/waap/resources/waap.data | 59902 ++++++++++++++++ .../security_apps/waap/waap_clib/CidrMatch.cc | 2 +- .../waap/waap_clib/ConfidenceCalculator.cc | 6 +- .../security_apps/waap/waap_clib/CsrfPolicy.h | 4 + .../waap/waap_clib/DecisionFactory.cc | 1 + .../waap/waap_clib/DeepParser.cc | 66 +- .../security_apps/waap/waap_clib/DeepParser.h | 6 +- .../waap_clib/IndicatorsFiltersManager.cc | 8 +- .../waap/waap_clib/KeywordTypeValidator.cc | 35 +- .../waap/waap_clib/KeywordTypeValidator.h | 31 +- .../waap/waap_clib/ParserJson.cc | 5 +- .../security_apps/waap/waap_clib/ParserXML.cc | 11 + .../waap/waap_clib/ScoreBuilder.cc | 85 +- .../waap/waap_clib/ScoreBuilder.h | 40 +- .../waap/waap_clib/Serializator.cc | 12 +- .../waap/waap_clib/Signatures.cc | 14 +- .../security_apps/waap/waap_clib/Signatures.h | 2 +- .../waap/waap_clib/TypeIndicatorsFilter.cc | 4 +- .../waap/waap_clib/WaapAssetState.cc | 163 +- .../waap/waap_clib/WaapAssetState.h | 14 +- .../waap/waap_clib/WaapAssetStatesManager.cc | 16 +- .../waap/waap_clib/WaapAssetStatesManager.h | 6 +- .../waap/waap_clib/WaapConfigApi.cc | 5 +- .../waap/waap_clib/WaapConfigApi.h | 2 + .../waap/waap_clib/WaapConfigBase.cc | 4 + .../waap/waap_clib/WaapDecision.cc | 1 + .../waap/waap_clib/WaapDecision.h | 1 + .../waap_clib/WaapErrorDisclosurePolicy.h | 4 + .../waap/waap_clib/WaapOpenRedirectPolicy.h | 4 + .../waap/waap_clib/WaapOverrideFunctor.cc | 3 + .../waap/waap_clib/WaapScanner.cc | 32 +- .../waap/waap_clib/WaapScanner.h | 4 +- .../waap/waap_clib/WaapScores.cc | 8 +- .../waap/waap_clib/Waf2Engine.cc | 81 +- .../security_apps/waap/waap_clib/Waf2Engine.h | 4 +- .../waap/waap_clib/Waf2EngineGetters.cc | 2 + .../security_apps/waap/waap_clib/Waf2Util.cc | 28 +- .../security_apps/waap/waap_clib/Waf2Util.h | 12 +- .../security_apps/waap/waap_component.cc | 1 - .../security_apps/waap/waap_component_impl.cc | 24 +- .../security_apps/waap/waap_component_impl.h | 4 +- components/signal_handler/signal_handler.cc | 18 +- components/utils/pm/debugpm.cc | 3 - components/utils/pm/general_adaptor.cc | 3 - components/utils/pm/kiss_hash.cc | 3 - components/utils/pm/kiss_patterns.cc | 3 - components/utils/pm/kiss_pm_stats.cc | 3 - components/utils/pm/kiss_thin_nfa.cc | 3 - components/utils/pm/kiss_thin_nfa_analyze.cc | 3 - components/utils/pm/kiss_thin_nfa_build.cc | 3 - components/utils/pm/kiss_thin_nfa_compile.cc | 3 - components/utils/pm/pm_adaptor.cc | 3 - components/utils/pm/pm_hook.cc | 3 - core/agent_details/agent_details.cc | 5 - core/buffers/buffer.cc | 2 +- core/config/config.cc | 102 +- core/config/config_globals.cc | 4 +- core/connkey/connkey.cc | 6 +- core/cptest/cptest.cc | 2 +- core/debug_is/debug_streams.cc | 10 +- core/encryptor/encryptor.cc | 4 + core/encryptor/encryptor_ut/encryptor_ut.cc | 1 + core/environment/environment.cc | 12 +- core/include/attachments/attachment_types.h | 1 + .../general/c_common/networking_headers.h | 15 +- core/include/general/debug.h | 7 - core/include/general/tenant_profile_pair.h | 103 + .../services_sdk/interfaces/i_encryptor.h | 1 + .../services_sdk/interfaces/i_environment.h | 4 +- .../interfaces/i_intelligence_is_v2.h | 40 +- .../services_sdk/interfaces/i_messaging.h | 3 +- .../interfaces/i_tenant_manager.h | 22 +- .../intelligence_is_v2/asset_source_v2_impl.h | 4 +- .../bulk_query_response_v2.h | 94 + .../intelligence_query_v2.h | 25 +- .../intelligence_query_v2_impl.h | 91 +- .../intelligence_is_v2/query_request_v2.h | 18 + .../intelligence_is_v2/query_response_v2.h | 6 + .../query_response_v2_impl.h | 32 + .../interfaces/mock/mock_encryptor.h | 5 - .../interfaces/mock/mock_environment.h | 39 +- .../interfaces/mock/mock_tenant_manager.h | 28 +- core/include/services_sdk/resources/config.h | 6 +- .../services_sdk/resources/config/i_config.h | 6 +- .../services_sdk/resources/debug_flags.h | 25 +- .../services_sdk/resources/log_generator.h | 9 +- .../services_sdk/resources/report/report.h | 24 - .../resources/report/report_enums.h | 6 +- .../intelligence_comp_v2_ut.cc | 177 + core/intelligence_is_v2/query_request_v2.cc | 35 + core/logging/log_generator.cc | 14 +- core/logging/logging.cc | 2 +- core/logging/logging_ut/logging_ut.cc | 55 + core/mainloop/mainloop.cc | 7 +- core/message/http_core.cc | 6 - core/message/http_decoder.cc | 6 - core/message/http_encoder.cc | 5 - core/message/message.cc | 6 +- core/metric/generic_metric.cc | 5 +- core/report/tag_and_enum_management.cc | 11 +- core/rest/rest_conn.cc | 15 +- core/rest/rest_server.cc | 5 - core/shmem_ipc/shared_ipc_debug.h | 2 +- core/shmem_ipc/shared_ring_queue.c | 42 +- core/shmem_ipc/shmem_ipc.c | 3 +- .../shmem_ipc_ut/shared_ring_queue_ut.cc | 30 +- core/tenant_manager/tenant_manager.cc | 259 +- .../install-http-transaction-handler.sh | 4 +- nodes/orchestration/package/CMakeLists.txt | 3 + .../package/cpnano_debug/cpnano_debug.cc | 51 +- .../orchestration/package/open-appsec-ctl.sh | 1664 + 168 files changed, 64034 insertions(+), 932 deletions(-) create mode 100644 components/security_apps/waap/resources/waap.data create mode 100644 core/include/general/tenant_profile_pair.h create mode 100644 core/include/services_sdk/interfaces/intelligence_is_v2/bulk_query_response_v2.h create mode 100644 nodes/orchestration/package/open-appsec-ctl.sh diff --git a/attachments/kernel_modules/core/include/common_is/kdebug_flags.h b/attachments/kernel_modules/core/include/common_is/kdebug_flags.h index cabeffb..ba8d61c 100755 --- a/attachments/kernel_modules/core/include/common_is/kdebug_flags.h +++ b/attachments/kernel_modules/core/include/common_is/kdebug_flags.h @@ -30,5 +30,6 @@ DEFINE_KDEBUG_FLAG(assetResolver) DEFINE_KDEBUG_FLAG(statefulValidation) DEFINE_KDEBUG_FLAG(statelessValidation) DEFINE_KDEBUG_FLAG(kernelMetric) +DEFINE_KDEBUG_FLAG(tproxy) #endif // DEFINE_KDEBUG_FLAG diff --git a/components/attachment-intakers/attachment_registrator/attachment_registrator.cc b/components/attachment-intakers/attachment_registrator/attachment_registrator.cc index 6ecb5d2..bd5abca 100755 --- a/components/attachment-intakers/attachment_registrator/attachment_registrator.cc +++ b/components/attachment-intakers/attachment_registrator/attachment_registrator.cc @@ -154,6 +154,10 @@ private: stringstream handler_path; handler_path << handler_path_format; switch(type) { + case (AttachmentType::SQUID_ATT_ID): { + handler_path << "squid-http-transaction-handler-"; + break; + } case (AttachmentType::NGINX_ATT_ID): { handler_path << "http-transaction-handler-"; break; @@ -177,7 +181,8 @@ private: stringstream registration_command; registration_command<< registration_format; switch(type) { - case (AttachmentType::NGINX_ATT_ID): { + case (AttachmentType::SQUID_ATT_ID): + case (AttachmentType::NGINX_ATT_ID):{ registration_command << "/etc/cp/HttpTransactionHandler/cp-nano-http-transaction-handler"; break; } diff --git a/components/attachment-intakers/nginx_attachment/cidrs_data.cc b/components/attachment-intakers/nginx_attachment/cidrs_data.cc index 484ba28..eb5b84e 100755 --- a/components/attachment-intakers/nginx_attachment/cidrs_data.cc +++ b/components/attachment-intakers/nginx_attachment/cidrs_data.cc @@ -54,7 +54,7 @@ CIDRSData::CIDRSData(const string &str_cidr) string str_prefix = pos != string::npos ? str_cidr.substr(0, pos) : str_cidr; // get subnet mask from targetCidr or calculate it based on ipv4 / ipv6 string str_suffix; - if (pos != string::npos) { + if (pos != string::npos && (pos + 1) <= str_cidr.size()) { str_suffix = str_cidr.substr(pos + 1); } else if (str_cidr.find(':') == string::npos) { str_suffix = "32"; diff --git a/components/attachment-intakers/nginx_attachment/nginx_attachment.cc b/components/attachment-intakers/nginx_attachment/nginx_attachment.cc index 87a1415..d007437 100755 --- a/components/attachment-intakers/nginx_attachment/nginx_attachment.cc +++ b/components/attachment-intakers/nginx_attachment/nginx_attachment.cc @@ -44,7 +44,6 @@ #include "buffer.h" #include "enum_array.h" #include "shmem_ipc.h" -#include "sasal.h" #include "i_http_manager.h" #include "http_transaction_common.h" #include "nginx_attachment_common.h" @@ -68,8 +67,6 @@ #endif // FAILURE_TEST -SASAL_START // HTTP Manager main - USE_DEBUG_FLAG(D_NGINX_ATTACHMENT); USE_DEBUG_FLAG(D_COMPRESSION); USE_DEBUG_FLAG(D_METRICS_NGINX_ATTACHMENT); @@ -1781,5 +1778,3 @@ NginxAttachment::preload() BasicRuleConfig::preload(); WebTriggerConf::preload(); } - -SASAL_END diff --git a/components/attachment-intakers/nginx_attachment/nginx_attachment_opaque.cc b/components/attachment-intakers/nginx_attachment/nginx_attachment_opaque.cc index a9029be..2e5d22f 100755 --- a/components/attachment-intakers/nginx_attachment/nginx_attachment_opaque.cc +++ b/components/attachment-intakers/nginx_attachment/nginx_attachment_opaque.cc @@ -18,11 +18,8 @@ #include "boost/uuid/uuid_io.hpp" #include "config.h" -#include "sasal.h" #include "virtual_modifiers.h" -SASAL_START // HTTP Manager - Transaction data - using namespace std; using namespace boost::uuids; @@ -34,6 +31,7 @@ NginxAttachmentOpaque::NginxAttachmentOpaque(HttpTransactionData _transaction_da transaction_data(move(_transaction_data)), ctx(), session_tenant(), + session_profile(), uuid() { try { @@ -65,10 +63,10 @@ NginxAttachmentOpaque::NginxAttachmentOpaque(HttpTransactionData _transaction_da auto decoder = makeVirtualContainer>(transaction_data.getURI()); string decoded_url(decoder.begin(), decoder.end()); auto question_mark_location = decoded_url.find('?'); - if (question_mark_location != string::npos) { + if (question_mark_location != string::npos && (question_mark_location + 1) <= decoded_url.size()) { ctx.registerValue(HttpTransactionData::uri_query_decoded, decoded_url.substr(question_mark_location + 1)); } - ctx.registerValue(HttpTransactionData::uri_path_decoded, decoded_url.substr(0, question_mark_location)); + ctx.registerValue(HttpTransactionData::uri_path_decoded, decoded_url); } NginxAttachmentOpaque::~NginxAttachmentOpaque() @@ -85,10 +83,14 @@ NginxAttachmentOpaque::prototype() // LCOV_EXCL_STOP void -NginxAttachmentOpaque::setSessionTenant(const string &tenant) +NginxAttachmentOpaque::setSessionTenantAndProfile(const string &tenant, const string &profile) { session_tenant = tenant; - Singleton::Consume::by()->setActiveTenant(session_tenant); + session_profile = profile; + Singleton::Consume::by()->setActiveTenantAndProfile( + session_tenant, + session_profile + ); } void @@ -117,5 +119,3 @@ NginxAttachmentOpaque::setSavedData(const string &name, const string &data, EnvK saved_data[name] = data; ctx.registerValue(name, data, log_ctx); } - -SASAL_END diff --git a/components/attachment-intakers/nginx_attachment/nginx_attachment_opaque.h b/components/attachment-intakers/nginx_attachment/nginx_attachment_opaque.h index 70052d0..19262ca 100755 --- a/components/attachment-intakers/nginx_attachment/nginx_attachment_opaque.h +++ b/components/attachment-intakers/nginx_attachment/nginx_attachment_opaque.h @@ -38,7 +38,10 @@ public: ctx.activate(); gen_ctx.activate(); if (session_tenant != "") { - Singleton::Consume::by()->setActiveTenant(session_tenant); + Singleton::Consume::by()->setActiveTenantAndProfile( + session_tenant, + session_profile + ); } } @@ -47,7 +50,7 @@ public: deactivateContext() { if (session_tenant != "") { - Singleton::Consume::by()->unsetActiveTenant(); + Singleton::Consume::by()->unsetActiveTenantAndProfile(); } gen_ctx.deactivate(); ctx.deactivate(); @@ -66,7 +69,7 @@ public: static uint minVer() { return 0; } const std::string & getSessionTenant() const { return session_tenant; } - void setSessionTenant(const std::string &tenant); + void setSessionTenantAndProfile(const std::string &tenant, const std::string &profile); void setSourceIdentifier(const std::string &header_key, const std::string &source_identifier); const std::string & getSourceIdentifiersType() const; @@ -85,6 +88,7 @@ private: GenericRulebaseContext gen_ctx; Context ctx; std::string session_tenant; + std::string session_profile; std::string uuid; std::string source_identifier; std::string identifier_type; diff --git a/components/attachment-intakers/nginx_attachment/nginx_parser.cc b/components/attachment-intakers/nginx_attachment/nginx_parser.cc index 0e29449..d0f3984 100755 --- a/components/attachment-intakers/nginx_attachment/nginx_parser.cc +++ b/components/attachment-intakers/nginx_attachment/nginx_parser.cc @@ -153,6 +153,29 @@ genHeaders(const Buffer &raw_data) return headers; } +static vector +getActivetenantAndProfile(const string &str, const string &deli = ",") +{ + vector elems; + elems.reserve(2); + + int start = 0; + int end = str.find(deli); + while (end != -1) { + elems.push_back(str.substr(start, end - start)); + start = end + deli.size(); + end = str.find(deli, start); + } + + elems.push_back(str.substr(start, end - start)); + + if (elems.size() == 1) { + elems.push_back(""); + } + + return elems; +} + Maybe> NginxParser::parseRequestHeaders(const Buffer &data) { @@ -182,8 +205,8 @@ NginxParser::parseRequestHeaders(const Buffer &data) << ", Value: " << dumpHex(header.getValue()); - string active_tenant(static_cast(header.getValue())); - opaque.setSessionTenant(active_tenant); + auto active_tenant_and_profile = getActivetenantAndProfile(header.getValue()); + opaque.setSessionTenantAndProfile(active_tenant_and_profile[0], active_tenant_and_profile[1]); } else if (proxy_ip_header_key == header.getKey()) { source_identifiers.setXFFValuesToOpaqueCtx(header, UsersAllIdentifiersConfig::ExtractType::PROXYIP); } diff --git a/components/generic_rulebase/evaluators/http_transaction_data_eval.cc b/components/generic_rulebase/evaluators/http_transaction_data_eval.cc index 3706d68..fa90b6a 100755 --- a/components/generic_rulebase/evaluators/http_transaction_data_eval.cc +++ b/components/generic_rulebase/evaluators/http_transaction_data_eval.cc @@ -20,9 +20,6 @@ #include "environment/evaluator_templates.h" #include "i_environment.h" #include "singleton.h" -#include "sasal.h" - -SASAL_START // HTTP Manager - Transaction data using namespace std; using namespace EnvironmentHelper; @@ -121,5 +118,3 @@ BeginWithUri::evalVariable() const return lower_uri_ctx.find(lower_uri_prefix) == 0; } - -SASAL_END diff --git a/components/http_manager/http_manager.cc b/components/http_manager/http_manager.cc index 5c380a2..331fc90 100755 --- a/components/http_manager/http_manager.cc +++ b/components/http_manager/http_manager.cc @@ -27,11 +27,8 @@ #include "table_opaque.h" #include "http_manager_opaque.h" #include "log_generator.h" -#include "sasal.h" #include "http_inspection_events.h" -SASAL_START // HTTP Manager - USE_DEBUG_FLAG(D_HTTP_MANAGER); using namespace std; @@ -208,7 +205,7 @@ public: LogGen( "Web AppSec Policy Loaded Successfully", ReportIS::Audience::SECURITY, - ReportIS::Severity::LOW, + ReportIS::Severity::INFO, ReportIS::Priority::LOW, ReportIS::Tags::THREAT_PREVENTION ); @@ -375,5 +372,3 @@ HttpManager::preload() registerExpectedConfiguration("HTTP manager", "Response Size Limit Verdict"); registerConfigLoadCb([this] () { pimpl->sendPolicyLog(); }); } - -SASAL_END diff --git a/components/http_manager/http_manager_opaque.cc b/components/http_manager/http_manager_opaque.cc index 9549b18..ed1f312 100644 --- a/components/http_manager/http_manager_opaque.cc +++ b/components/http_manager/http_manager_opaque.cc @@ -14,9 +14,6 @@ #include "http_manager_opaque.h" #include "config.h" -#include "sasal.h" - -SASAL_START // HTTP Manager - Transaction data using namespace std; @@ -99,5 +96,3 @@ HttpManagerOpaque::updatePayloadSize(const uint curr_payload_size) { aggregated_payload_size += curr_payload_size; } - -SASAL_END diff --git a/components/http_transaction_data/http_transaction_data.cc b/components/http_transaction_data/http_transaction_data.cc index 6c73ddc..ff4ace4 100644 --- a/components/http_transaction_data/http_transaction_data.cc +++ b/components/http_transaction_data/http_transaction_data.cc @@ -18,12 +18,9 @@ #include #include "enum_array.h" -#include "sasal.h" #include "buffer.h" #include "nginx_attachment_common.h" -SASAL_START // HTTP Manager - Transaction data - using namespace std; USE_DEBUG_FLAG(D_NGINX_ATTACHMENT); @@ -261,5 +258,3 @@ HttpTransactionData::print(ostream &out_stream) const << ")" << endl; } - -SASAL_END diff --git a/components/include/i_downloader.h b/components/include/i_downloader.h index 37f55e2..f39262a 100755 --- a/components/include/i_downloader.h +++ b/components/include/i_downloader.h @@ -28,7 +28,7 @@ public: const GetResourceFile &resourse_file ) const = 0; - virtual Maybe>downloadVirtualFileFromFog( + virtual Maybe, std::string>>downloadVirtualFileFromFog( const GetResourceFile &resourse_file, Package::ChecksumTypes checksum_type ) const = 0; diff --git a/components/include/i_local_policy_mgmt_gen.h b/components/include/i_local_policy_mgmt_gen.h index fced987..01c9c97 100755 --- a/components/include/i_local_policy_mgmt_gen.h +++ b/components/include/i_local_policy_mgmt_gen.h @@ -19,7 +19,6 @@ class I_LocalPolicyMgmtGen public: enum class LocalPolicyEnv { LINUX, K8S, COUNT }; - virtual std::string parsePolicy(const std::string &policy_version) = 0; virtual const std::string & getPolicyPath(void) const = 0; virtual LocalPolicyEnv getEnvType() const = 0; diff --git a/components/include/i_orchestration_tools.h b/components/include/i_orchestration_tools.h index 6e43b0c..8b7813d 100755 --- a/components/include/i_orchestration_tools.h +++ b/components/include/i_orchestration_tools.h @@ -102,7 +102,8 @@ public: virtual Maybe> jsonObjectSplitter( const std::string &json, - const std::string &tenant_id = "") const = 0; + const std::string &tenant_id = "", + const std::string &profile_id = "") const = 0; virtual bool isNonEmptyFile(const std::string &path) const = 0; virtual Maybe readFile(const std::string &path) const = 0; diff --git a/components/include/i_service_controller.h b/components/include/i_service_controller.h index af2a5f6..1dae9b6 100755 --- a/components/include/i_service_controller.h +++ b/components/include/i_service_controller.h @@ -41,7 +41,8 @@ public: const std::string &new_policy_path, const std::string &new_settings_path, const std::vector &new_data_files = {}, - const std::string &tenant_id = "" + const std::string &tenant_id = "", + const std::string &profile_id = "" ) = 0; virtual bool isServiceInstalled(const std::string &service_name) = 0; diff --git a/components/include/orchestrator/rest_api/get_resource_file.h b/components/include/orchestrator/rest_api/get_resource_file.h index 4d0632d..90349db 100644 --- a/components/include/orchestrator/rest_api/get_resource_file.h +++ b/components/include/orchestrator/rest_api/get_resource_file.h @@ -24,24 +24,39 @@ class GetResourceFile : public ClientRest class TenantResource : public ClientRest { public: - TenantResource(const std::string &_tenant_id, const std::string &_version, const std::string &_checksum) + TenantResource( + const std::string &_tenant_id, + const std::string &_profile_id, + const std::string &_version, + const std::string &_checksum) : tenant_id(_tenant_id), + profile_id(_profile_id), version(_version), checksum(_checksum) { } + TenantResource(const TenantResource &other) + { + tenant_id = other.tenant_id; + profile_id = other.profile_id; + version = other.version; + checksum = other.checksum; + } + bool operator==(const TenantResource &other) const { return tenant_id.get() == other.tenant_id.get() && + profile_id.get() == other.profile_id.get() && version.get() == other.version.get() && checksum.get() == other.checksum.get(); } C2S_LABEL_PARAM(std::string, tenant_id, "tenantId"); + C2S_LABEL_PARAM(std::string, profile_id, "profileId"); C2S_LABEL_PARAM(std::string, version, "version"); C2S_LABEL_PARAM(std::string, checksum, "checksum"); }; @@ -76,12 +91,16 @@ public: } void - addTenant(const std::string &tenant_id, const std::string &version, const std::string &checksum) + addTenant( + const std::string &tenant_id, + const std::string &profile_id, + const std::string &version, + const std::string &checksum) { if (!isVirtual()) return; if (!tenants.isActive()) tenants = std::vector(); - tenants.get().emplace_back(tenant_id, version, checksum); + tenants.get().emplace_back(tenant_id, profile_id, version, checksum); } std::string diff --git a/components/include/orchestrator/rest_api/orchestration_check_update.h b/components/include/orchestrator/rest_api/orchestration_check_update.h index e06aaa0..1306d07 100644 --- a/components/include/orchestrator/rest_api/orchestration_check_update.h +++ b/components/include/orchestrator/rest_api/orchestration_check_update.h @@ -17,8 +17,40 @@ #include #include "rest.h" +#include "debug.h" #include "maybe_res.h" +USE_DEBUG_FLAG(D_ORCHESTRATOR); + +class TenantError : public ClientRest +{ +public: + TenantError() = default; + + bool + operator==(const TenantError &other) const + { + return + messageId.get() == other.messageId.get() && + message.get() == other.message.get() && + referenceId.get() == other.referenceId.get() && + severity.get() == other.severity.get(); + } + + const std::string & getMessageID() const { return messageId.get(); } + const std::string & getMessage() const { return message.get(); } +// LCOV_EXCL_START Reason: Will be covered in INXT-33277 + const std::string & getReferenceID() const { return referenceId.get(); } +// LCOV_EXCL_STOP + const std::string & getSeverity() const { return severity.get(); } + +private: + BOTH_LABEL_PARAM(std::string, messageId, "messageId"); + BOTH_LABEL_PARAM(std::string, message, "message"); + BOTH_LABEL_PARAM(std::string, referenceId, "referenceId"); + BOTH_LABEL_PARAM(std::string, severity, "severity"); +}; + class CheckUpdateRequest : public ClientRest { public: @@ -30,13 +62,20 @@ public: Tenants(const Tenants &other) { tenant_id = other.tenant_id; + profile_id = other.profile_id; checksum = other.checksum; version = other.version; + error = other.error; } - Tenants(const std::string &_tenant_id, const std::string &_checksum, const std::string &_version) + Tenants( + const std::string &_tenant_id, + const std::string &_profile_id, + const std::string &_checksum, + const std::string &_version) : tenant_id(_tenant_id), + profile_id(_profile_id), checksum(_checksum), version(_version) { @@ -47,18 +86,24 @@ public: { return tenant_id.get() == other.tenant_id.get() && + profile_id.get() == other.profile_id.get() && checksum.get() == other.checksum.get() && - version.get() == other.version.get(); + version.get() == other.version.get() && + error.get() == other.error.get(); } const std::string & getTenantID() const { return tenant_id.get(); } - const std::string & getChecksum() const { return checksum.get(); } - const std::string & getVersion() const { return version.get(); } + const std::string & getProfileID() const { return profile_id.get(); } + const std::string & getChecksum() const { return checksum.get(); } + const std::string & getVersion() const { return version.get(); } + const TenantError & getError() const { return error.get(); } private: - BOTH_LABEL_PARAM(std::string, tenant_id, "tenantId"); - BOTH_LABEL_PARAM(std::string, checksum, "checksum"); - BOTH_LABEL_PARAM(std::string, version, "version"); + BOTH_LABEL_OPTIONAL_PARAM(std::string, tenant_id, "tenantId"); + BOTH_LABEL_OPTIONAL_PARAM(std::string, profile_id, "profileId"); + BOTH_LABEL_OPTIONAL_PARAM(std::string, checksum, "checksum"); + BOTH_LABEL_OPTIONAL_PARAM(std::string, version, "version"); + BOTH_LABEL_OPTIONAL_PARAM(TenantError, error, "error"); }; CheckUpdateRequest( @@ -157,7 +202,26 @@ private: tenants.get().emplace_back(std::forward(args)...); } - const std::vector & getTenants() const { return tenants.get(); } + const std::vector + getTenants() const + { + std::vector tenants_to_return; + for (const auto &tenant : tenants.get()) { + if (tenant.getError().getMessage().empty()) { + tenants_to_return.push_back(tenant); + continue; + } + + dbgError(D_ORCHESTRATOR) + << "Error getting the tenant information. Tenant ID: " + << tenant.getTenantID() + << ", Error message: " + << tenant.getError().getMessage() + << ", Reference ID: " + << tenant.getError().getReferenceID(); + } + return tenants_to_return; + } private: BOTH_LABEL_PARAM(std::vector, tenants, "tenants"); diff --git a/components/include/waap.h b/components/include/waap.h index 7ea2b38..e4be504 100755 --- a/components/include/waap.h +++ b/components/include/waap.h @@ -29,6 +29,7 @@ class I_Telemetry; class I_DeepAnalyzer; class I_WaapAssetStatesManager; + class I_Messaging; class I_AgentDetails; class I_Encryptor; diff --git a/components/security_apps/orchestration/details_resolver/details_resolver_handlers/checkpoint_product_handlers.h b/components/security_apps/orchestration/details_resolver/details_resolver_handlers/checkpoint_product_handlers.h index d66055c..532b8af 100755 --- a/components/security_apps/orchestration/details_resolver/details_resolver_handlers/checkpoint_product_handlers.h +++ b/components/security_apps/orchestration/details_resolver/details_resolver_handlers/checkpoint_product_handlers.h @@ -17,7 +17,51 @@ #include #include +#if defined(gaia) + +Maybe +checkHasSupportedBlade(const string &command_output) +{ + string supportedBlades[3] = {"identityServer", "vpn", "cvpn"}; + for(const string &blade : supportedBlades) { + if (command_output.find(blade) != string::npos) { + return string("true"); + } + } + + return genError("Current host does not have IDA capability"); +} + +Maybe +checkSamlPortal(const string &command_output) +{ + if (command_output.find("Portal is running") != string::npos) { + return string("true"); + } + + return genError("Current host does not have SAML Portal configured"); +} + +Maybe +checkIDP(shared_ptr file_stream) +{ + string line; + while (getline(*file_stream, line)) { + if (line.find("") != string::npos) { + return string("false"); + } + if (line.find("identity_provider") != string::npos) { + return string("true"); + } + } + + return genError("Identity Provider was not found"); +} + +#endif // gaia + #if defined(gaia) || defined(smb) + Maybe checkHasSDWan(const string &command_output) { @@ -72,6 +116,23 @@ getMgmtObjName(shared_ptr file_stream) return getMgmtObjAttr(file_stream, "name "); } +Maybe +getSmbObjectName(const string &command_output) +{ + static const char centrally_managed_comd_output = '0'; + + if (command_output.empty() || command_output[0] != centrally_managed_comd_output) { + return genError("Object name was not found"); + } + + static const string obj_path = (getenv("FWDIR") ? string(getenv("FWDIR")) : "") + "/database/myown.C"; + auto ifs = std::make_shared(obj_path); + if (!ifs->is_open()) { + return genError("Failed to open the object file"); + } + return getMgmtObjAttr(ifs, "name "); +} + Maybe getMgmtParentObjAttr(shared_ptr file_stream, const string &parent_obj, const string &attr) { @@ -89,7 +150,9 @@ getMgmtParentObjAttr(shared_ptr file_stream, const string &parent_obj, } return genError("Parent object attribute was not found. Attr: " + attr); } +#endif // gaia || smb +#if defined(gaia) Maybe getMgmtParentObjUid(shared_ptr file_stream) { @@ -117,7 +180,26 @@ getMgmtParentObjName(shared_ptr file_stream) const string &unparsed_name = maybe_unparsed_name.unpack(); return chopHeadAndTail(unparsed_name, "(", ")"); } -#endif // gaia || smb + +#elif defined(smb) +Maybe +getMgmtParentObjUid(const string &command_output) +{ + if (!command_output.empty()) { + return command_output; + } + return genError("Parent object uuid was not found."); +} + +Maybe +getMgmtParentObjName(const string &command_output) +{ + if (!command_output.empty()) { + return command_output; + } + return genError("Parent object name was not found."); +} +#endif // end if gaia/smb Maybe getOsRelease(shared_ptr file_stream) diff --git a/components/security_apps/orchestration/details_resolver/details_resolver_handlers/details_resolver_impl.h b/components/security_apps/orchestration/details_resolver/details_resolver_handlers/details_resolver_impl.h index 97df217..591528b 100755 --- a/components/security_apps/orchestration/details_resolver/details_resolver_handlers/details_resolver_impl.h +++ b/components/security_apps/orchestration/details_resolver/details_resolver_handlers/details_resolver_impl.h @@ -19,12 +19,33 @@ // to return a string value for an attribute key based on a logic executed in a handler that receives // shell command execution output as its input #ifdef SHELL_CMD_HANDLER - #if defined(gaia) || defined(smb) SHELL_CMD_HANDLER("cpProductIntegrationMgmtObjectType", "cpprod_util CPPROD_IsMgmtMachine", getMgmtObjType) SHELL_CMD_HANDLER("hasSDWan", "[ -f $FWDIR/bin/sdwan_steering ] && echo '1' || echo '0'", checkHasSDWan) +#endif //gaia || smb + +#if defined(gaia) +SHELL_CMD_HANDLER("hasSupportedBlade", "enabled_blades", checkHasSupportedBlade) +SHELL_CMD_HANDLER("hasSamlPortal", "mpclient status saml-vpn", checkSamlPortal) #endif //gaia +#if defined(smb) +SHELL_CMD_HANDLER( + "cpProductIntegrationMgmtParentObjectName", + "cpsdwan get_data | jq -r .cluster_name", + getMgmtParentObjName +) +SHELL_CMD_HANDLER( + "cpProductIntegrationMgmtParentObjectUid", + "cpsdwan get_data | jq -r .cluster_uuid", + getMgmtParentObjUid +) +SHELL_CMD_HANDLER( + "cpProductIntegrationMgmtObjectName", + "cpprod_util FwIsLocalMgmt", + getSmbObjectName +) +#endif//smb #endif // SHELL_CMD_HANDLER @@ -40,21 +61,10 @@ SHELL_CMD_OUTPUT("helloWorld", "cat /tmp/agentHelloWorld 2>/dev/null") // to return a string value for an attribute key based on a logic executed in a handler that receives file as input #ifdef FILE_CONTENT_HANDLER -#if defined(alpine) -FILE_CONTENT_HANDLER("alpine_tag", "/usr/share/build/cp-alpine-tag", getCPAlpineTag) -#endif // alpine -#if defined(gaia) || defined(smb) -FILE_CONTENT_HANDLER("os_release", "/etc/cp-release", getOsRelease) -FILE_CONTENT_HANDLER( - "cpProductIntegrationMgmtObjectUid", - (getenv("FWDIR") ? string(getenv("FWDIR")) : "") + "/database/myown.C", - getMgmtObjUid -) -FILE_CONTENT_HANDLER( - "cpProductIntegrationMgmtObjectName", - (getenv("FWDIR") ? string(getenv("FWDIR")) : "") + "/database/myown.C", - getMgmtObjName -) +#if defined(gaia) + +FILE_CONTENT_HANDLER("hasIdpConfigured", "/opt/CPSamlPortal/phpincs/spPortal/idpPolicy.xml", checkIDP) + FILE_CONTENT_HANDLER( "cpProductIntegrationMgmtParentObjectUid", (getenv("FWDIR") ? string(getenv("FWDIR")) : "") + "/database/myself_objects.C", @@ -65,6 +75,23 @@ FILE_CONTENT_HANDLER( (getenv("FWDIR") ? string(getenv("FWDIR")) : "") + "/database/myself_objects.C", getMgmtParentObjName ) +FILE_CONTENT_HANDLER( + "cpProductIntegrationMgmtObjectName", + (getenv("FWDIR") ? string(getenv("FWDIR")) : "") + "/database/myown.C", + getMgmtObjName +) +#endif //gaia + +#if defined(alpine) +FILE_CONTENT_HANDLER("alpine_tag", "/usr/share/build/cp-alpine-tag", getCPAlpineTag) +#endif // alpine +#if defined(gaia) || defined(smb) +FILE_CONTENT_HANDLER("os_release", "/etc/cp-release", getOsRelease) +FILE_CONTENT_HANDLER( + "cpProductIntegrationMgmtObjectUid", + (getenv("FWDIR") ? string(getenv("FWDIR")) : "") + "/database/myown.C", + getMgmtObjUid +) #else // !(gaia || smb) FILE_CONTENT_HANDLER("os_release", "/etc/os-release", getOsRelease) #endif // gaia || smb diff --git a/components/security_apps/orchestration/details_resolver/details_resolving_handler.cc b/components/security_apps/orchestration/details_resolver/details_resolving_handler.cc index f525f15..b8e0cbf 100755 --- a/components/security_apps/orchestration/details_resolver/details_resolving_handler.cc +++ b/components/security_apps/orchestration/details_resolver/details_resolving_handler.cc @@ -92,7 +92,7 @@ DetailsResolvingHanlder::Impl::getResolvedDetails() const } I_AgentDetailsReporter *reporter = Singleton::Consume::by(); - reporter->addAttr(resolved_details); + reporter->addAttr(resolved_details, true); return resolved_details; } diff --git a/components/security_apps/orchestration/downloader/curl_client.cc b/components/security_apps/orchestration/downloader/curl_client.cc index 270e5ca..2c9fb41 100755 --- a/components/security_apps/orchestration/downloader/curl_client.cc +++ b/components/security_apps/orchestration/downloader/curl_client.cc @@ -33,14 +33,12 @@ #include "config.h" #include "url_parser.h" #include "debug.h" -#include "sasal.h" #include "scope_exit.h" USE_DEBUG_FLAG(D_HTTP_REQUEST); using namespace std; -SASAL_START // Orchestration - Communication // LCOV_EXCL_START Reason: Depends on real download server. class CurlGlobalInit @@ -434,5 +432,3 @@ TraceIdGenerator::generateTraceId() string part5 = generateRandomString(12); return string(part1 + "-" + part2 + "-" + part3 + "-" + part4 + "-" + part5); } - -SASAL_END diff --git a/components/security_apps/orchestration/downloader/curl_client.h b/components/security_apps/orchestration/downloader/curl_client.h index 14b78cb..9104f29 100755 --- a/components/security_apps/orchestration/downloader/curl_client.h +++ b/components/security_apps/orchestration/downloader/curl_client.h @@ -28,11 +28,9 @@ #include "i_encryptor.h" #include "scope_exit.h" #include "url_parser.h" -#include "sasal.h" USE_DEBUG_FLAG(D_HTTP_REQUEST); -SASAL_START // Orchestration - Communication // LCOV_EXCL_START Reason: Depends on real download server. enum class HTTP_VERSION @@ -111,5 +109,3 @@ public: private: std::string ca_path; }; - -SASAL_END diff --git a/components/security_apps/orchestration/downloader/downloader.cc b/components/security_apps/orchestration/downloader/downloader.cc index 3c8e551..3d2701c 100755 --- a/components/security_apps/orchestration/downloader/downloader.cc +++ b/components/security_apps/orchestration/downloader/downloader.cc @@ -19,7 +19,6 @@ #include "debug.h" #include "config.h" #include "rest.h" -#include "sasal.h" #include "cereal/external/rapidjson/document.h" #include @@ -27,8 +26,6 @@ using namespace std; using namespace rapidjson; -SASAL_START // Orchestration - Communication - USE_DEBUG_FLAG(D_ORCHESTRATOR); class Downloader::Impl : Singleton::Provide::From @@ -42,7 +39,7 @@ public: const GetResourceFile &resourse_file ) const override; - Maybe> downloadVirtualFileFromFog( + Maybe, string>> downloadVirtualFileFromFog( const GetResourceFile &resourse_file, Package::ChecksumTypes checksum_type ) const override; @@ -114,18 +111,19 @@ Downloader::Impl::downloadFileFromFog( return file_path; } -Maybe> +Maybe, string>> Downloader::Impl::downloadVirtualFileFromFog( const GetResourceFile &resourse_file, Package::ChecksumTypes) const { - static const string tenand_id_key = "tenantId"; - static const string policy_key = "policy"; - static const string settings_key = "settings"; - static const string tenants_key = "tenants"; - static const string error_text = "error"; + static const string tenand_id_key = "tenantId"; + static const string profile_id_key = "profileId"; + static const string policy_key = "policy"; + static const string settings_key = "settings"; + static const string tenants_key = "tenants"; + static const string error_text = "error"; - map res; + map, string> res; I_UpdateCommunication *update_communication = Singleton::Consume::by(); auto downloaded_data = update_communication->downloadAttributeFile(resourse_file); if (!downloaded_data.ok()) return downloaded_data.passErr(); @@ -146,7 +144,14 @@ Downloader::Impl::downloadVirtualFileFromFog( if (artifact_data == itr->MemberEnd()) artifact_data = itr->FindMember(settings_key.c_str()); if (artifact_data != itr->MemberEnd()) { - string file_path = dir_path + "/" + resourse_file.getFileName() + "_" + tenant_id + ".download"; + auto profile_id_obj = itr->FindMember(profile_id_key.c_str()); + if (profile_id_obj == itr->MemberEnd()) continue; + + string profile_id = profile_id_obj->value.GetString(); + + string file_path = + dir_path + "/" + resourse_file.getFileName() + "_" + + tenant_id + "_profile_" + profile_id + ".download"; rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); @@ -154,7 +159,7 @@ Downloader::Impl::downloadVirtualFileFromFog( I_OrchestrationTools *orchestration_tools = Singleton::Consume::by(); if (orchestration_tools->writeFile(buffer.GetString(), file_path)) { - res.insert({tenant_id, file_path}); + res.insert({{tenant_id, profile_id}, file_path}); } continue; } @@ -383,5 +388,3 @@ Downloader::preload() registerExpectedConfiguration("orchestration", "Self signed certificates acceptable"); registerExpectedConfiguration("orchestration", "Add tenant suffix"); } - -SASAL_END diff --git a/components/security_apps/orchestration/downloader/downloader_ut/downloader_ut.cc b/components/security_apps/orchestration/downloader/downloader_ut/downloader_ut.cc index de1fc42..2c59a25 100755 --- a/components/security_apps/orchestration/downloader/downloader_ut/downloader_ut.cc +++ b/components/security_apps/orchestration/downloader/downloader_ut/downloader_ut.cc @@ -295,8 +295,8 @@ TEST_F(DownloaderTest, download_virtual_policy) { GetResourceFile resourse_file(GetResourceFile::ResourceFileType::VIRTUAL_POLICY); - resourse_file.addTenant("0000", "1", "checksum0000"); - resourse_file.addTenant("1111", "2", "checksum1111"); + resourse_file.addTenant("0000", "1234", "1", "checksum0000"); + resourse_file.addTenant("1111", "1235", "2", "checksum1111"); string tenant_0000_file = "{" @@ -319,6 +319,7 @@ TEST_F(DownloaderTest, download_virtual_policy) " \"tenants\": [\n" " {\n" " \"tenantId\": \"0000\",\n" + " \"profileId\": \"1234\",\n" " \"policy\": {\n" " \"waap\": \"108-005\",\n" " \"accessControl\": \"Internal error, check logs\",\n" @@ -328,6 +329,7 @@ TEST_F(DownloaderTest, download_virtual_policy) " },\n" " {\n" " \"tenantId\": \"1111\",\n" + " \"profileId\": \"1235\",\n" " \"policy\": {\n" " \"messageId\": \"108-005\",\n" " \"message\": \"Internal error, check logs\",\n" @@ -340,16 +342,16 @@ TEST_F(DownloaderTest, download_virtual_policy) EXPECT_CALL(mock_communication, downloadAttributeFile(resourse_file)).WillOnce(Return(fog_response)); - EXPECT_CALL(mock_orchestration_tools, writeFile(tenant_0000_file, "/tmp/virtualPolicy_0000.download")) + EXPECT_CALL(mock_orchestration_tools, writeFile(tenant_0000_file, "/tmp/virtualPolicy_0000_profile_1234.download")) .WillOnce(Return(true)); - EXPECT_CALL(mock_orchestration_tools, writeFile(tenant_1111_file, "/tmp/virtualPolicy_1111.download")) + EXPECT_CALL(mock_orchestration_tools, writeFile(tenant_1111_file, "/tmp/virtualPolicy_1111_profile_1235.download")) .WillOnce(Return(true)); - map expected_downloaded_files = + map, string> expected_downloaded_files = { - { "0000", "/tmp/virtualPolicy_0000.download" }, - { "1111", "/tmp/virtualPolicy_1111.download" } + { {"0000", "1234" }, "/tmp/virtualPolicy_0000_profile_1234.download" }, + { {"1111", "1235" }, "/tmp/virtualPolicy_1111_profile_1235.download" } }; EXPECT_EQ( @@ -365,7 +367,12 @@ TEST_F(DownloaderTest, download_virtual_settings) { GetResourceFile resourse_file(GetResourceFile::ResourceFileType::VIRTUAL_SETTINGS); - resourse_file.addTenant("4c721b40-85df-4364-be3d-303a10ee9789", "1", "checksum0000"); + resourse_file.addTenant( + "4c721b40-85df-4364-be3d-303a10ee9789", + "4c721b40-85df-4364-be3d-303a10ee9780", + "1", + "checksum0000" + ); string tenant_0000_file = "{" @@ -389,6 +396,7 @@ TEST_F(DownloaderTest, download_virtual_settings) " \"tenants\": [\n" " {\n" " \"tenantId\": \"4c721b40-85df-4364-be3d-303a10ee9789\",\n" + " \"profileId\": \"4c721b40-85df-4364-be3d-303a10ee9780\",\n" " \"settings\": {\n" " \"agentSettings\": [\n" " {\n" @@ -410,14 +418,24 @@ TEST_F(DownloaderTest, download_virtual_settings) EXPECT_CALL(mock_communication, downloadAttributeFile(resourse_file)).WillOnce(Return(fog_response)); + stringstream tenant_0000_path; + tenant_0000_path << "/tmp/virtualSettings_4c721b40-85df-4364-be3d-303a10ee9789" + "_profile_4c721b40-85df-4364-be3d-303a10ee9780.download"; EXPECT_CALL( mock_orchestration_tools, - writeFile(tenant_0000_file, "/tmp/virtualSettings_4c721b40-85df-4364-be3d-303a10ee9789.download") + writeFile( + tenant_0000_file, + tenant_0000_path.str() + ) ).WillOnce(Return(true)); - map expected_downloaded_files = { - { "4c721b40-85df-4364-be3d-303a10ee9789", - "/tmp/virtualSettings_4c721b40-85df-4364-be3d-303a10ee9789.download" + stringstream file_path; + file_path << "/tmp/virtualSettings_4c721b40-85df-4364-be3d-303a10ee9789" + "_profile_4c721b40-85df-4364-be3d-303a10ee9780.download"; + + map, string> expected_downloaded_files = { + { {"4c721b40-85df-4364-be3d-303a10ee9789", "4c721b40-85df-4364-be3d-303a10ee9780"}, + file_path.str() } }; diff --git a/components/security_apps/orchestration/downloader/http_client.cc b/components/security_apps/orchestration/downloader/http_client.cc index 594470d..eb25ffd 100755 --- a/components/security_apps/orchestration/downloader/http_client.cc +++ b/components/security_apps/orchestration/downloader/http_client.cc @@ -18,7 +18,6 @@ #include "debug.h" #include "i_encryptor.h" #include "url_parser.h" -#include "sasal.h" #include "config.h" #include "i_environment.h" #include "orchestration_comp.h" @@ -32,8 +31,6 @@ using boost::asio::ip::tcp; using namespace std; -SASAL_START // Orchestration - Communication - USE_DEBUG_FLAG(D_ORCHESTRATOR); USE_DEBUG_FLAG(D_HTTP_REQUEST); @@ -272,5 +269,3 @@ HTTPClient::getFileHttp(const URLParser &url, ofstream &out_file, const string & return Maybe(); } // LCOV_EXCL_STOP - -SASAL_END diff --git a/components/security_apps/orchestration/downloader/https_client.cc b/components/security_apps/orchestration/downloader/https_client.cc index fe59ee7..d892a73 100755 --- a/components/security_apps/orchestration/downloader/https_client.cc +++ b/components/security_apps/orchestration/downloader/https_client.cc @@ -19,7 +19,6 @@ #include "i_encryptor.h" #include "downloader.h" #include "config.h" -#include "sasal.h" #include "boost/uuid/uuid.hpp" #include "boost/uuid/uuid_generators.hpp" #include @@ -39,8 +38,6 @@ using namespace boost::placeholders; using boost::asio::ip::tcp; using namespace std; -SASAL_START // Orchestration - Communication - USE_DEBUG_FLAG(D_COMMUNICATION); USE_DEBUG_FLAG(D_HTTP_REQUEST); USE_DEBUG_FLAG(D_ORCHESTRATOR); @@ -615,5 +612,3 @@ HTTPClient::curlGetFileOverSSL(const URLParser &url, ofstream &out_file, const s } // LCOV_EXCL_STOP - -SASAL_END diff --git a/components/security_apps/orchestration/include/mock/mock_downloader.h b/components/security_apps/orchestration/include/mock/mock_downloader.h index 8e7479b..ac2160b 100755 --- a/components/security_apps/orchestration/include/mock/mock_downloader.h +++ b/components/security_apps/orchestration/include/mock/mock_downloader.h @@ -30,7 +30,10 @@ public: MOCK_CONST_METHOD2( downloadVirtualFileFromFog, - Maybe>(const GetResourceFile &, Package::ChecksumTypes) + Maybe, std::string>>( + const GetResourceFile &, + Package::ChecksumTypes + ) ); MOCK_CONST_METHOD4( diff --git a/components/security_apps/orchestration/include/mock/mock_orchestration_tools.h b/components/security_apps/orchestration/include/mock/mock_orchestration_tools.h index 3738aae..be317f7 100755 --- a/components/security_apps/orchestration/include/mock/mock_orchestration_tools.h +++ b/components/security_apps/orchestration/include/mock/mock_orchestration_tools.h @@ -44,9 +44,9 @@ public: MOCK_CONST_METHOD1(removeFile, bool(const std::string &)); MOCK_CONST_METHOD2(copyFile, bool(const std::string &, const std::string &)); MOCK_CONST_METHOD2(calculateChecksum, Maybe(Package::ChecksumTypes, const std::string &)); - MOCK_CONST_METHOD2( + MOCK_CONST_METHOD3( jsonObjectSplitter, - Maybe>(const std::string &, const std::string &) + Maybe>(const std::string &, const std::string &, const std::string &) ); MOCK_CONST_METHOD1(doesFileExist, bool(const std::string &)); MOCK_CONST_METHOD1(createDirectory, bool(const std::string &)); diff --git a/components/security_apps/orchestration/include/mock/mock_service_controller.h b/components/security_apps/orchestration/include/mock/mock_service_controller.h index d67e384..01e31b5 100755 --- a/components/security_apps/orchestration/include/mock/mock_service_controller.h +++ b/components/security_apps/orchestration/include/mock/mock_service_controller.h @@ -28,13 +28,14 @@ public: MOCK_CONST_METHOD0(getUpdatePolicyVersion, const std::string &()); - MOCK_METHOD4( + MOCK_METHOD5( updateServiceConfiguration, bool( const std::string &new_policy_path, const std::string &new_settings_path, const std::vector &new_data_files, - const std::string &tenant_id + const std::string &tenant_id, + const std::string &profile_id ) ); diff --git a/components/security_apps/orchestration/local_policy_mgmt_gen/include/appsec_practice_section.h b/components/security_apps/orchestration/local_policy_mgmt_gen/include/appsec_practice_section.h index c9020f1..980fdce 100644 --- a/components/security_apps/orchestration/local_policy_mgmt_gen/include/appsec_practice_section.h +++ b/components/security_apps/orchestration/local_policy_mgmt_gen/include/appsec_practice_section.h @@ -14,10 +14,7 @@ #ifndef __APPSEC_PRACTICE_SECTION_H__ #define __APPSEC_PRACTICE_SECTION_H__ -#include - #include -#include #include #include #include @@ -119,9 +116,9 @@ public: load(cereal::JSONInputArchive &archive_in) { dbgTrace(D_K8S_POLICY) << "Loading AppSec Web Attack Protections"; - parseAppsecJSONKey("csrf-enabled", csrf_protection, archive_in, "inactive"); - parseAppsecJSONKey("error-disclosure-enabled", error_disclosure, archive_in, "inactive"); - parseAppsecJSONKey("open-redirect-enabled", open_redirect, archive_in, "inactive"); + parseAppsecJSONKey("csrf-protection", csrf_protection, archive_in, "Inactive"); + parseAppsecJSONKey("error-disclosure", error_disclosure, archive_in, "Inactive"); + parseAppsecJSONKey("open-redirect", open_redirect, archive_in, "Inactive"); parseAppsecJSONKey("non-valid-http-methods", non_valid_http_methods, archive_in, false); } @@ -185,12 +182,8 @@ public: { dbgTrace(D_K8S_POLICY) << "Loading AppSec practice spec"; parseAppsecJSONKey("protections", protections, archive_in); + parseAppsecJSONKey("minimum-confidence", minimum_confidence, archive_in, "critical"); parseAppsecJSONKey("override-mode", mode, archive_in, "Unset"); - if (getMode() == "Prevent") { - parseAppsecJSONKey("minimum-confidence", minimum_confidence, archive_in, "critical"); - } else { - minimum_confidence = "Transparent"; - } parseAppsecJSONKey("max-body-size-kb", max_body_size_kb, archive_in, 1000000); parseAppsecJSONKey("max-header-size-bytes", max_header_size_bytes, archive_in, 102400); parseAppsecJSONKey("max-object-depth", max_object_depth, archive_in, 40); @@ -219,8 +212,8 @@ private: int max_header_size_bytes; int max_object_depth; int max_url_size_bytes; - std::string minimum_confidence; std::string mode; + std::string minimum_confidence; AppSecWebAttackProtections protections; }; @@ -253,7 +246,7 @@ public: { dbgTrace(D_K8S_POLICY) << "Loading AppSec Snort Signatures practice"; parseAppsecJSONKey("override-mode", override_mode, archive_in, "Inactive"); - parseAppsecJSONKey>("files", config_map, archive_in); + parseAppsecJSONKey>("configmap", config_map, archive_in); } const std::string & getOverrideMode() const { return override_mode; } @@ -285,7 +278,7 @@ public: { dbgTrace(D_K8S_POLICY) << "Loading AppSecPracticeOpenSchemaAPI practice"; parseAppsecJSONKey("override-mode", override_mode, archive_in, "Inactive"); - parseAppsecJSONKey>("files", config_map, archive_in); + parseAppsecJSONKey>("configmap", config_map, archive_in); } const std::string & getOverrideMode() const { return override_mode; } @@ -700,9 +693,7 @@ public: const std::string & getMode() const { return mode; } - void setHost(const std::string &_host) { host = _host; } - - void setMode(const std::string &_mode) { mode = _mode; } + void setMode(const std::string &_mode) { mode = _mode; }; const std::string & getCustomResponse() const { return custom_response; } @@ -754,18 +745,16 @@ public: if (default_mode_annot.ok() && !default_mode_annot.unpack().empty() && default_rule.getMode().empty()) { default_rule.setMode(default_mode_annot.unpack()); } - default_rule.setHost("*"); - parseAppsecJSONKey>("specific-rules", specific_rules, archive_in); - specific_rules.push_front(default_rule); + parseAppsecJSONKey>("specific-rules", specific_rules, archive_in); } const ParsedRule & getDefaultRule() const { return default_rule; } - const std::list & getSpecificRules() const { return specific_rules; } + const std::vector & getSpecificRules() const { return specific_rules; } private: ParsedRule default_rule; - std::list specific_rules; + std::vector specific_rules; }; class AppsecLinuxPolicy : Singleton::Consume @@ -777,12 +766,12 @@ public: dbgTrace(D_K8S_POLICY) << "Loading AppSec policy spec"; parseAppsecJSONKey("policies", policies, archive_in); parseAppsecJSONKey>("practices", practices, archive_in); - parseAppsecJSONKey>("log-triggers", log_triggers, archive_in); - parseAppsecJSONKey>("custom-responses", custom_responses, archive_in); + parseAppsecJSONKey>("logtriggers", log_triggers, archive_in); + parseAppsecJSONKey>("customresponses", custom_responses, archive_in); parseAppsecJSONKey>("exceptions", exceptions, archive_in); - parseAppsecJSONKey>("trusted-sources", trusted_sources, archive_in); + parseAppsecJSONKey>("trustedsources", trusted_sources, archive_in); parseAppsecJSONKey>( - "source-identifier", + "sourceidentifiers", sources_identifier, archive_in ); diff --git a/components/security_apps/orchestration/local_policy_mgmt_gen/include/triggers_section.h b/components/security_apps/orchestration/local_policy_mgmt_gen/include/triggers_section.h index 9b91c3a..4c65538 100644 --- a/components/security_apps/orchestration/local_policy_mgmt_gen/include/triggers_section.h +++ b/components/security_apps/orchestration/local_policy_mgmt_gen/include/triggers_section.h @@ -210,7 +210,6 @@ public: parseAppsecJSONKey("http-response-code", httpResponseCode, archive_in, 403); parseAppsecJSONKey("mode", mode, archive_in, "block-page"); parseAppsecJSONKey("name", name, archive_in); - if (mode == "block-page") { parseAppsecJSONKey( "message-body", diff --git a/components/security_apps/orchestration/local_policy_mgmt_gen/include/trusted_sources_section.h b/components/security_apps/orchestration/local_policy_mgmt_gen/include/trusted_sources_section.h index 4d6c020..0ba5eee 100755 --- a/components/security_apps/orchestration/local_policy_mgmt_gen/include/trusted_sources_section.h +++ b/components/security_apps/orchestration/local_policy_mgmt_gen/include/trusted_sources_section.h @@ -34,7 +34,7 @@ public: { dbgTrace(D_K8S_POLICY) << "Loading trusted sources spec"; parseAppsecJSONKey("minNumOfSources", min_num_of_sources, archive_in, 3); - parseAppsecJSONKey>("sources-identifiers", sources_identifiers, archive_in); + parseAppsecJSONKey>("sourcesIdentifiers", sources_identifiers, archive_in); parseAppsecJSONKey("name", name, archive_in); } @@ -110,7 +110,7 @@ public: load(cereal::JSONInputArchive &archive_in) { dbgTrace(D_K8S_POLICY) << "Loading trusted sources spec"; - parseAppsecJSONKey("source-identifier", source_identifier, archive_in); + parseAppsecJSONKey("sourceIdentifier", source_identifier, archive_in); parseAppsecJSONKey>("value", value, archive_in); } diff --git a/components/security_apps/orchestration/local_policy_mgmt_gen/local_policy_mgmt_gen.cc b/components/security_apps/orchestration/local_policy_mgmt_gen/local_policy_mgmt_gen.cc index 0156a98..5bf13ba 100644 --- a/components/security_apps/orchestration/local_policy_mgmt_gen/local_policy_mgmt_gen.cc +++ b/components/security_apps/orchestration/local_policy_mgmt_gen/local_policy_mgmt_gen.cc @@ -15,10 +15,10 @@ #include #include +#include #include #include #include -#include #include #include #include @@ -28,7 +28,6 @@ #include #include "rest.h" -#include "report/report.h" #include "debug.h" #include "config.h" #include "connkey.h" @@ -290,7 +289,7 @@ public: return appsec_policy; }); - list specific_rules = appsec_policy.getAppsecPolicySpec().getSpecificRules(); + vector specific_rules = appsec_policy.getAppsecPolicySpec().getSpecificRules(); ParsedRule default_rule = appsec_policy.getAppsecPolicySpec().getDefaultRule(); string asset; @@ -673,7 +672,7 @@ public: AppsecSpecParser appsec_policy = maybe_appsec_policy.unpack(); dbgTrace(D_K8S_POLICY) << "Succeessfully retrieved AppSec policy: " << appsec_policy.getSpec(); - list specific_rules = appsec_policy.getSpec().getSpecificRules(); + vector specific_rules = appsec_policy.getSpec().getSpecificRules(); ParsedRule default_rule = appsec_policy.getSpec().getDefaultRule(); for (const ParsedRule &parsed_rule : specific_rules) { @@ -1227,10 +1226,30 @@ private: LocalPolicyEnv env_type; map practice_name_to_id_map; + bool + isPlaygroundEnv() + { + string playground_variable = "PLAYGROUND"; + const char *env_string = getenv(playground_variable.c_str()); + + if (env_string) { + string env_value = env_string; + transform( + env_value.begin(), + env_value.end(), + env_value.begin(), + [](unsigned char c) { return std::tolower(c); } + ); + return env_value == "true"; + } + + return false; + } + bool getClusterId() { - string playground_uid = Report::isPlaygroundEnv() ? "playground-" : ""; + string playground_uid = isPlaygroundEnv() ? "playground-" : ""; dbgTrace(D_K8S_POLICY) << "Getting cluster UID"; auto maybe_namespaces_data = getObjectFromCluster("/api/v1/namespaces/"); diff --git a/components/security_apps/orchestration/manifest_controller/manifest_controller.cc b/components/security_apps/orchestration/manifest_controller/manifest_controller.cc index 11bb740..db93264 100755 --- a/components/security_apps/orchestration/manifest_controller/manifest_controller.cc +++ b/components/security_apps/orchestration/manifest_controller/manifest_controller.cc @@ -15,7 +15,6 @@ #include "config.h" #include "debug.h" -#include "sasal.h" #include "environment.h" #include "version.h" #include "log_generator.h" @@ -24,8 +23,6 @@ using namespace std; using namespace ReportIS; -SASAL_START // Orchestration - Manifest Handler - USE_DEBUG_FLAG(D_ORCHESTRATOR); class IgnoredPackages @@ -441,5 +438,3 @@ ManifestController::init() { pimpl->init(); } - -SASAL_END diff --git a/components/security_apps/orchestration/manifest_controller/manifest_diff_calculator.cc b/components/security_apps/orchestration/manifest_controller/manifest_diff_calculator.cc index 80b5006..d96b1d0 100755 --- a/components/security_apps/orchestration/manifest_controller/manifest_diff_calculator.cc +++ b/components/security_apps/orchestration/manifest_controller/manifest_diff_calculator.cc @@ -15,12 +15,9 @@ #include "debug.h" #include "config.h" -#include "sasal.h" using namespace std; -SASAL_START // Orchestration - Manifest Handler - USE_DEBUG_FLAG(D_ORCHESTRATOR); void @@ -140,5 +137,3 @@ ManifestDiffCalculator::buildInstallationQueue( installation_queue.push_back(updated_package); return true; } - -SASAL_END diff --git a/components/security_apps/orchestration/manifest_controller/manifest_handler.cc b/components/security_apps/orchestration/manifest_controller/manifest_handler.cc index ce51a59..6c8e96b 100755 --- a/components/security_apps/orchestration/manifest_controller/manifest_handler.cc +++ b/components/security_apps/orchestration/manifest_controller/manifest_handler.cc @@ -15,14 +15,11 @@ #include "debug.h" #include "config.h" -#include "sasal.h" #include "agent_details.h" #include "orchestration_comp.h" using namespace std; -SASAL_START // Orchestration - Manifest Handler - USE_DEBUG_FLAG(D_ORCHESTRATOR); void @@ -380,5 +377,3 @@ ManifestHandler::selfUpdate( package_handler->preInstallPackage(orch_service_name, current_installation_file) && package_handler->installPackage(orch_service_name, current_installation_file, false); } - -SASAL_END diff --git a/components/security_apps/orchestration/modules/data.cc b/components/security_apps/orchestration/modules/data.cc index 7bcc390..3de450f 100755 --- a/components/security_apps/orchestration/modules/data.cc +++ b/components/security_apps/orchestration/modules/data.cc @@ -15,10 +15,6 @@ #include -#include "sasal.h" - -SASAL_START // Orchestration - Modules - using namespace std; using namespace cereal; @@ -48,5 +44,3 @@ Data::serialize(JSONInputArchive &in_archive) make_nvp("version", version) ); } - -SASAL_END diff --git a/components/security_apps/orchestration/modules/orchestration_policy.cc b/components/security_apps/orchestration/modules/orchestration_policy.cc index c28b241..d6ce8cb 100755 --- a/components/security_apps/orchestration/modules/orchestration_policy.cc +++ b/components/security_apps/orchestration/modules/orchestration_policy.cc @@ -13,10 +13,6 @@ #include "orchestration_policy.h" -#include "sasal.h" - -SASAL_START // Orchestration - Modules - using namespace std; using namespace cereal; @@ -60,5 +56,3 @@ OrchestrationPolicy::operator!=(const OrchestrationPolicy &other) const { return !((*this) == other); } - -SASAL_END diff --git a/components/security_apps/orchestration/modules/orchestration_status.cc b/components/security_apps/orchestration/modules/orchestration_status.cc index cda2561..d0f3039 100755 --- a/components/security_apps/orchestration/modules/orchestration_status.cc +++ b/components/security_apps/orchestration/modules/orchestration_status.cc @@ -19,7 +19,6 @@ #include "debug.h" #include "config.h" -#include "sasal.h" using namespace cereal; using namespace std; @@ -27,8 +26,6 @@ using namespace chrono; USE_DEBUG_FLAG(D_ORCHESTRATOR); -SASAL_START // Orchestration - Modules - class RegistrationDetails { public: @@ -681,5 +678,3 @@ OrchestrationStatus::init() { pimpl->init(); } OrchestrationStatus::OrchestrationStatus() : Component("OrchestrationStatus"), pimpl(make_unique()) {} OrchestrationStatus::~OrchestrationStatus() {} - -SASAL_END diff --git a/components/security_apps/orchestration/modules/package.cc b/components/security_apps/orchestration/modules/package.cc index 3ea9468..637149d 100755 --- a/components/security_apps/orchestration/modules/package.cc +++ b/components/security_apps/orchestration/modules/package.cc @@ -15,10 +15,6 @@ #include -#include "sasal.h" - -SASAL_START // Orchestration - Modules - using namespace std; using namespace cereal; @@ -129,5 +125,3 @@ Package::serialize(JSONInputArchive & in_archive) } package_type = package_type_value->second; } - -SASAL_END diff --git a/components/security_apps/orchestration/modules/url_parser.cc b/components/security_apps/orchestration/modules/url_parser.cc index 573507b..b2fbfc0 100755 --- a/components/security_apps/orchestration/modules/url_parser.cc +++ b/components/security_apps/orchestration/modules/url_parser.cc @@ -18,12 +18,9 @@ #include "singleton.h" #include "common.h" #include "maybe_res.h" -#include "sasal.h" using namespace std; -SASAL_START // Orchestration - Modules - USE_DEBUG_FLAG(D_ORCHESTRATOR); ostream & @@ -145,5 +142,3 @@ URLParser::toString() const s_build << protocol << base_url << query << ":" << port; return s_build.str(); } - -SASAL_END diff --git a/components/security_apps/orchestration/orchestration_comp.cc b/components/security_apps/orchestration/orchestration_comp.cc index 944412c..a30094f 100755 --- a/components/security_apps/orchestration/orchestration_comp.cc +++ b/components/security_apps/orchestration/orchestration_comp.cc @@ -29,7 +29,6 @@ #include "manifest_controller.h" #include "url_parser.h" #include "i_messaging.h" -#include "sasal.h" #include "agent_details_report.h" #include "maybe_res.h" #include "customized_cereal_map.h" @@ -38,8 +37,7 @@ #include "get_status_rest.h" #include "hybrid_mode_telemetry.h" #include "telemetry.h" - -SASAL_START // Orchestration - Main +#include "tenant_profile_pair.h" using namespace std; using namespace chrono; @@ -596,10 +594,6 @@ private: auto team = i_env->get("Audience Team"); if (team.ok()) audience_team = *team; - string agent_uid = - (Report::isPlaygroundEnv() ? "playground-" : "") + - Singleton::Consume::by()->getAgentId(); - Report policy_update_message( "Agent's policy has been updated", curr_time, @@ -611,7 +605,7 @@ private: Severity::INFO, Priority::LOW, chrono::seconds(0), - LogField("agentId", agent_uid), + LogField("agentId", Singleton::Consume::by()->getAgentId()), Tags::ORCHESTRATOR ); policy_update_message.addToOrigin(LogField("policyVersion", new_policy_version)); @@ -808,14 +802,22 @@ private: auto greedy_update = getProfileAgentSettingWithDefault(false, "orchestration.multitenancy.greedymode"); greedy_update = getConfigurationWithDefault(greedy_update, "orchestration", "Multitenancy Greedy mode"); - if (!greedy_update) { - auto tenant_manager = Singleton::Consume::by(); - for (auto const &active_tenant: tenant_manager->fetchActiveTenants()) { - auto virtual_policy_data = getPolicyTenantData(active_tenant); + auto tenant_manager = Singleton::Consume::by(); + for (auto const &active_tenant: tenant_manager->fetchActiveTenants()) { + for (auto const &profile_id: tenant_manager->fetchProfileIds(active_tenant)) { + auto virtual_policy_data = getPolicyTenantData(active_tenant, profile_id); request.addTenantPolicy(virtual_policy_data); - request.addTenantSettings(getSettingsTenantData(active_tenant, virtual_policy_data.getVersion())); + request.addTenantSettings( + getSettingsTenantData( + active_tenant, + profile_id, + virtual_policy_data.getVersion() + ) + ); } - } else { + } + + if (greedy_update) { request.setGreedyMode(); } @@ -980,10 +982,11 @@ private: const Maybe> &updated_policy_tenants, const vector &new_data_files) { + dbgFlow(D_ORCHESTRATOR) << "Hanlding virtual files"; if (!updated_policy_tenants.ok()) return; // Sorting files by tenant id; - unordered_map> sorted_files; + unordered_map> sorted_files; // Download virtual policy bool is_empty = true; @@ -991,7 +994,17 @@ private: for (const auto &tenant: *updated_policy_tenants) { if (!tenant.getVersion().empty()) { is_empty = false; - resource_v_policy_file.addTenant(tenant.getTenantID(), tenant.getVersion(), tenant.getChecksum()); + dbgTrace(D_ORCHESTRATOR) + << "Adding a tenant to the multi-tenant list. Tenant: " + << tenant.getTenantID(); + auto tenant_manager = Singleton::Consume::by(); + tenant_manager->addActiveTenantAndProfile(tenant.getTenantID(), tenant.getProfileID()); + resource_v_policy_file.addTenant( + tenant.getTenantID(), + tenant.getProfileID(), + tenant.getVersion(), + tenant.getChecksum() + ); } } @@ -1003,7 +1016,8 @@ private: ); if (new_virtual_policy_files.ok()) { for (const auto &tenant_file: *new_virtual_policy_files) { - sorted_files[tenant_file.first].push_back(tenant_file.second); + auto tenant_profile = TenantProfilePair(tenant_file.first.first, tenant_file.first.second); + sorted_files[tenant_profile].push_back(tenant_file.second); } } } @@ -1017,6 +1031,7 @@ private: is_empty = false; resource_v_settings_file.addTenant( tenant.getTenantID(), + tenant.getProfileID(), tenant.getVersion(), tenant.getChecksum() ); @@ -1031,7 +1046,8 @@ private: ); if (new_virtual_settings_files.ok()) { for (const auto &tenant_file: *new_virtual_settings_files) { - sorted_files[tenant_file.first].push_back(tenant_file.second); + auto tenant_profile = TenantProfilePair(tenant_file.first.first, tenant_file.first.second); + sorted_files[tenant_profile].push_back(tenant_file.second); } } } @@ -1043,7 +1059,11 @@ private: string setting_file = ""; if (files.size() > 1) { setting_file = files[1]; - auto handled_settings = updateSettingsFile(setting_file, downloade_files.first); + auto handled_settings = updateSettingsFile( + setting_file, + downloade_files.first.getTenantId(), + downloade_files.first.getPfofileId() + ); if (handled_settings.ok()) setting_file = *handled_settings; } @@ -1051,21 +1071,23 @@ private: policy_file, setting_file, new_data_files, - downloade_files.first + downloade_files.first.getTenantId(), + downloade_files.first.getPfofileId() ); } } Maybe - updateSettingsFile(const string &new_settings_file, const string &tenant_id = "") + updateSettingsFile(const string &new_settings_file, const string &tenant_id = "", const string &profile_id = "") { // Handling settings update. auto conf_dir = getConfigurationWithDefault( filesystem_prefix + "/conf/", "orchestration", "Conf dir" - ) + (tenant_id != "" ? "tenant_" + tenant_id + "_" : ""); + ) + (tenant_id != "" ? "tenant_" + tenant_id + "_profile_" + profile_id + "_" : ""); + dbgTrace(D_ORCHESTRATOR) << "The settings directory is " << conf_dir; auto orchestration_tools = Singleton::Consume::by(); string settings_file_path = conf_dir + "settings.json"; if (!orchestration_tools->copyFile(new_settings_file, settings_file_path)) { @@ -1077,7 +1099,7 @@ private: } CheckUpdateRequest::Tenants - getPolicyTenantData(const string &tenant_id) + getPolicyTenantData(const string &tenant_id, const string &profile_id) { string dir = getConfigurationWithDefault( filesystem_prefix + "/conf", @@ -1085,16 +1107,16 @@ private: "Configuration directory" ); - string policy_file = dir + "/tenant_" + tenant_id + "/policy.json"; + string policy_file = dir + "/tenant_" + tenant_id + "_profile_" + profile_id + "/policy.json"; string policy_file_checksum = getChecksum(policy_file); string policy_file_version= getVersion(policy_file); - return CheckUpdateRequest::Tenants(tenant_id, policy_file_checksum, policy_file_version); + return CheckUpdateRequest::Tenants(tenant_id, profile_id, policy_file_checksum, policy_file_version); } CheckUpdateRequest::Tenants - getSettingsTenantData(const string &tenant_id, const string &policy_version) + getSettingsTenantData(const string &tenant_id, const string &profile_id, const string &policy_version) { string dir = getConfigurationWithDefault( filesystem_prefix + "/conf", @@ -1102,10 +1124,10 @@ private: "Configuration directory" ); - string settings_file = dir + "/tenant_" + tenant_id + "_settings.json"; + string settings_file = dir + "/tenant_" + tenant_id + "_profile_" + profile_id + "_settings.json"; string settings_file_checksum = getChecksum(settings_file); - return CheckUpdateRequest::Tenants(tenant_id, settings_file_checksum, policy_version); + return CheckUpdateRequest::Tenants(tenant_id, profile_id, settings_file_checksum, policy_version); } string @@ -1629,5 +1651,3 @@ OrchestrationComp::preload() registerExpectedSetting("upgradeMode"); registerExpectedConfigFile("orchestration", Config::ConfigFileType::Policy); } - -SASAL_END diff --git a/components/security_apps/orchestration/orchestration_tools/orchestration_tools.cc b/components/security_apps/orchestration/orchestration_tools/orchestration_tools.cc index eadc2ba..bae869d 100755 --- a/components/security_apps/orchestration/orchestration_tools/orchestration_tools.cc +++ b/components/security_apps/orchestration/orchestration_tools/orchestration_tools.cc @@ -23,10 +23,6 @@ #include #include -#include "sasal.h" - -SASAL_START // Orchestration - Tools - using namespace std; using namespace rapidjson; @@ -41,7 +37,8 @@ public: Maybe> jsonObjectSplitter( const string &json, - const string &tenant_id) const override; + const string &tenant_id, + const string &profile_id) const override; Maybe readFile(const string &path) const override; bool writeFile(const string &text, const string &path) const override; @@ -238,7 +235,10 @@ OrchestrationTools::Impl::copyFile(const string &src_path, const string &dst_pat } Maybe> -OrchestrationTools::Impl::jsonObjectSplitter(const string &json, const string &tenant_id) const +OrchestrationTools::Impl::jsonObjectSplitter( + const string &json, + const string &tenant_id, + const string &profile_id) const { Document document; map parsed; @@ -247,14 +247,18 @@ OrchestrationTools::Impl::jsonObjectSplitter(const string &json, const string &t if (document.HasParseError()) return genError("JSON file is not valid."); for (Value::MemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); ++itr) { - if (!tenant_id.empty() && itr->value.IsObject()) { - itr->value.AddMember( Value("tenantID"), Value(tenant_id.c_str(), tenant_id.size()), document.GetAllocator() ); + + itr->value.AddMember( + Value("profileID"), + Value(profile_id.c_str(), profile_id.size()), + document.GetAllocator() + ); } rapidjson::StringBuffer buffer; @@ -471,5 +475,3 @@ OrchestrationTools::Impl::base64Decode(const string &input) const OrchestrationTools::OrchestrationTools() : Component("OrchestrationTools"), pimpl(make_unique()) {} OrchestrationTools::~OrchestrationTools() {} - -SASAL_END diff --git a/components/security_apps/orchestration/orchestration_tools/orchestration_tools_ut/orchestration_tools_ut.cc b/components/security_apps/orchestration/orchestration_tools/orchestration_tools_ut/orchestration_tools_ut.cc index 6422b4e..9c7f715 100755 --- a/components/security_apps/orchestration/orchestration_tools/orchestration_tools_ut/orchestration_tools_ut.cc +++ b/components/security_apps/orchestration/orchestration_tools/orchestration_tools_ut/orchestration_tools_ut.cc @@ -158,7 +158,7 @@ TEST_F(OrchestrationToolsTest, jsonObjectSplitter) " ]" " }"; - Maybe> parsed = i_orchestration_tools->jsonObjectSplitter(update_text, ""); + Maybe> parsed = i_orchestration_tools->jsonObjectSplitter(update_text, "", ""); EXPECT_TRUE(parsed.ok()); cleanSpaces(manifest); EXPECT_EQ(manifest, parsed.unpack().find("manifest")->second); @@ -174,7 +174,7 @@ TEST_F(OrchestrationToolsTest, jsonObjectSplitter) " \"download-options\": [" " \"http://172.23.92.135/manifest_file.txt\"" " ]"; - parsed = i_orchestration_tools->jsonObjectSplitter(invalid_json, ""); + parsed = i_orchestration_tools->jsonObjectSplitter(invalid_json, "", ""); EXPECT_FALSE(parsed.ok()); } diff --git a/components/security_apps/orchestration/orchestration_ut/orchestration_multitenant_ut.cc b/components/security_apps/orchestration/orchestration_ut/orchestration_multitenant_ut.cc index 8b3ebf5..f5f1ed9 100644 --- a/components/security_apps/orchestration/orchestration_ut/orchestration_multitenant_ut.cc +++ b/components/security_apps/orchestration/orchestration_ut/orchestration_multitenant_ut.cc @@ -65,7 +65,7 @@ public: EXPECT_CALL(rest, mockRestCall(RestAction::SHOW, "orchestration-status", _)).WillOnce( WithArg<2>(Invoke(this, &OrchestrationMultitenancyTest::setRestStatus))); - + doEncrypt(); orchestration_comp.init(); } @@ -83,9 +83,12 @@ public: Maybe err = genError("No file exist"); EXPECT_CALL(mock_orchestration_tools, readFile("/etc/cp/conf/user-cred.json")).WillOnce(Return(err)); - EXPECT_CALL(mock_orchestration_tools, writeFile("This is fake", "/etc/cp/data/data1.a")).WillOnce(Return(true)); - EXPECT_CALL(mock_orchestration_tools, writeFile("0000 is fake", "/etc/cp/data/data4.a")).WillOnce(Return(true)); - EXPECT_CALL(mock_orchestration_tools, writeFile("This is 3333", "/etc/cp/data/data6.a")).WillOnce(Return(true)); + EXPECT_CALL(mock_orchestration_tools, writeFile("This is fake", "/etc/cp/data/data1.a")).WillOnce( + Return(true)); + EXPECT_CALL(mock_orchestration_tools, writeFile("0000 is fake", "/etc/cp/data/data4.a")).WillOnce( + Return(true)); + EXPECT_CALL(mock_orchestration_tools, writeFile("This is 3333", "/etc/cp/data/data6.a")).WillOnce( + Return(true)); } void @@ -182,7 +185,8 @@ private: return true; } - bool setRestStatus(const unique_ptr &p) + bool + setRestStatus(const unique_ptr &p) { rest_status = p->getRest(); return true; @@ -256,23 +260,38 @@ TEST_F(OrchestrationMultitenancyTest, handle_virtual_resource) vector active_tenants = { "1236", "1235" }; EXPECT_CALL(tenant_manager, fetchActiveTenants()).WillOnce(Return(active_tenants)); - EXPECT_CALL(mock_orchestration_tools, calculateChecksum(_, "/etc/cp/conf/tenant_1236/policy.json")) + EXPECT_CALL(tenant_manager, addActiveTenantAndProfile("1235", "2311")); + EXPECT_CALL(tenant_manager, addActiveTenantAndProfile("1236", "2611")); + + vector first_tenant_profiles = { "2611" }; + vector second_tenant_profiles = { "2311"}; + EXPECT_CALL( + tenant_manager, + fetchProfileIds("1236")).WillRepeatedly(Return(first_tenant_profiles) + ); + + EXPECT_CALL( + tenant_manager, + fetchProfileIds("1235")).WillRepeatedly(Return(second_tenant_profiles) + ); + + EXPECT_CALL(mock_orchestration_tools, calculateChecksum(_, "/etc/cp/conf/tenant_1236_profile_2611/policy.json")) .WillOnce(Return(string("checksum_policy_tenant_1236"))); - EXPECT_CALL(mock_orchestration_tools, calculateChecksum(_, "/etc/cp/conf/tenant_1235/policy.json")) + EXPECT_CALL(mock_orchestration_tools, calculateChecksum(_, "/etc/cp/conf/tenant_1235_profile_2311/policy.json")) .WillOnce(Return(string("checksum_policy_tenant_1235"))); - EXPECT_CALL(mock_orchestration_tools, readFile("/etc/cp/conf/tenant_1236/policy.json")) + EXPECT_CALL(mock_orchestration_tools, readFile("/etc/cp/conf/tenant_1236_profile_2611/policy.json")) .WillOnce(Return(string("{}"))); - EXPECT_CALL(mock_orchestration_tools, readFile("/etc/cp/conf/tenant_1235/policy.json")) + EXPECT_CALL(mock_orchestration_tools, readFile("/etc/cp/conf/tenant_1235_profile_2311/policy.json")) .WillOnce(Return(string("{}"))); - EXPECT_CALL(mock_orchestration_tools, calculateChecksum(_, "/etc/cp/conf/tenant_1236_settings.json")) + EXPECT_CALL(mock_orchestration_tools, calculateChecksum(_, "/etc/cp/conf/tenant_1236_profile_2611_settings.json")) .WillOnce(Return(string("checksum_settings_tenant_1236"))); - EXPECT_CALL(mock_orchestration_tools, calculateChecksum(_, "/etc/cp/conf/tenant_1235_settings.json")) + EXPECT_CALL(mock_orchestration_tools, calculateChecksum(_, "/etc/cp/conf/tenant_1235_profile_2311_settings.json")) .WillOnce(Return(string("checksum_settings_tenant_1235"))); EXPECT_CALL(mock_update_communication, getUpdate(_)).WillOnce( @@ -294,11 +313,13 @@ TEST_F(OrchestrationMultitenancyTest, handle_virtual_resource) " \"tenants\": [\n" " {\n" " \"tenantId\": \"1236\",\n" + " \"profileId\": \"2611\",\n" " \"checksum\": \"new_checksum_policy_tenant_1236\",\n" " \"version\": \"1\"\n" " },\n" " {\n" " \"tenantId\": \"1235\",\n" + " \"profileId\": \"2311\",\n" " \"checksum\": \"new_checksum_policy_tenant_1235\",\n" " \"version\": \"1\"\n" " }\n" @@ -308,11 +329,13 @@ TEST_F(OrchestrationMultitenancyTest, handle_virtual_resource) " \"tenants\": [\n" " {\n" " \"tenantId\": \"1236\",\n" + " \"profileId\": \"2611\",\n" " \"checksum\": \"new_checksum_settings_tenant_1236\",\n" " \"version\": \"1\"\n" " },\n" " {\n" " \"tenantId\": \"1235\",\n" + " \"profileId\": \"2311\",\n" " \"checksum\": \"new_checksum_settings_tenant_1235\",\n" " \"version\": \"1\"\n" " }\n" @@ -328,21 +351,21 @@ TEST_F(OrchestrationMultitenancyTest, handle_virtual_resource) ); GetResourceFile policy_file(GetResourceFile::ResourceFileType::VIRTUAL_POLICY); - policy_file.addTenant("1236", "1", "new_checksum_policy_tenant_1236"); - policy_file.addTenant("1235", "1", "new_checksum_policy_tenant_1235"); + policy_file.addTenant("1236", "2611", "1", "new_checksum_policy_tenant_1236"); + policy_file.addTenant("1235", "2311", "1", "new_checksum_policy_tenant_1235"); - map download_policy_res = { - { "1236", "/tmp/orchestration_downloads/virtualPolicy_1236.download" }, - { "1235", "/tmp/orchestration_downloads/virtualPolicy_1235.download" } + map, string> download_policy_res = { + { {"1236", "2611" }, "/tmp/orchestration_downloads/virtualPolicy_1236_profile_2611.download" }, + { {"1235", "2311" }, "/tmp/orchestration_downloads/virtualPolicy_1235_profile_2311.download" } }; GetResourceFile settings_file(GetResourceFile::ResourceFileType::VIRTUAL_SETTINGS); - settings_file.addTenant("1236", "1", "new_checksum_settings_tenant_1236"); - settings_file.addTenant("1235", "1", "new_checksum_settings_tenant_1235"); + settings_file.addTenant("1236", "2611", "1", "new_checksum_settings_tenant_1236"); + settings_file.addTenant("1235", "2311", "1", "new_checksum_settings_tenant_1235"); - map download_settings_res = { - { "1236", "/tmp/orchestration_downloads/virtualSettings_1236.download" }, - { "1235", "/tmp/orchestration_downloads/virtualSettings_1235.download" } + map, string> download_settings_res = { + { {"1236", "2611" }, "/tmp/orchestration_downloads/virtualSettings_1236_profile_2611.download" }, + { {"1235", "2311" }, "/tmp/orchestration_downloads/virtualSettings_1235_profile_2311.download" } }; EXPECT_CALL( @@ -373,16 +396,16 @@ TEST_F(OrchestrationMultitenancyTest, handle_virtual_resource) EXPECT_CALL( mock_orchestration_tools, copyFile( - "/tmp/orchestration_downloads/virtualSettings_1236.download", - "/etc/cp/conf/tenant_1236_settings.json" + "/tmp/orchestration_downloads/virtualSettings_1236_profile_2611.download", + "/etc/cp/conf/tenant_1236_profile_2611_settings.json" ) ).WillOnce(Return(true)); EXPECT_CALL( mock_orchestration_tools, copyFile( - "/tmp/orchestration_downloads/virtualSettings_1235.download", - "/etc/cp/conf/tenant_1235_settings.json" + "/tmp/orchestration_downloads/virtualSettings_1235_profile_2311.download", + "/etc/cp/conf/tenant_1235_profile_2311_settings.json" ) ).WillOnce(Return(true)); @@ -393,6 +416,7 @@ TEST_F(OrchestrationMultitenancyTest, handle_virtual_resource) "/etc/cp/conf/policy.json", "/etc/cp/conf/settings.json", expected_data_types, + "", "" ) ).WillOnce(Return(true)); @@ -400,20 +424,22 @@ TEST_F(OrchestrationMultitenancyTest, handle_virtual_resource) EXPECT_CALL( mock_service_controller, updateServiceConfiguration( - "/tmp/orchestration_downloads/virtualPolicy_1236.download", - "/etc/cp/conf/tenant_1236_settings.json", + "/tmp/orchestration_downloads/virtualPolicy_1236_profile_2611.download", + "/etc/cp/conf/tenant_1236_profile_2611_settings.json", expected_data_types, - "1236" + "1236", + "2611" ) ).WillOnce(Return(true)); EXPECT_CALL( mock_service_controller, updateServiceConfiguration( - "/tmp/orchestration_downloads/virtualPolicy_1235.download", - "/etc/cp/conf/tenant_1235_settings.json", + "/tmp/orchestration_downloads/virtualPolicy_1235_profile_2311.download", + "/etc/cp/conf/tenant_1235_profile_2311_settings.json", expected_data_types, - "1235" + "1235", + "2311" ) ).WillOnce(Return(true)); diff --git a/components/security_apps/orchestration/orchestration_ut/orchestration_ut.cc b/components/security_apps/orchestration/orchestration_ut/orchestration_ut.cc index 0d9a781..2973116 100755 --- a/components/security_apps/orchestration/orchestration_ut/orchestration_ut.cc +++ b/components/security_apps/orchestration/orchestration_ut/orchestration_ut.cc @@ -101,15 +101,19 @@ public: return true; } + void doEncrypt() { Maybe err = genError("No file exist"); EXPECT_CALL(mock_orchestration_tools, readFile("/etc/cp/conf/user-cred.json")).WillOnce(Return(err)); - EXPECT_CALL(mock_orchestration_tools, writeFile("This is fake", "/etc/cp/data/data1.a")).WillOnce(Return(true)); - EXPECT_CALL(mock_orchestration_tools, writeFile("0000 is fake", "/etc/cp/data/data4.a")).WillOnce(Return(true)); - EXPECT_CALL(mock_orchestration_tools, writeFile("This is 3333", "/etc/cp/data/data6.a")).WillOnce(Return(true)); + EXPECT_CALL(mock_orchestration_tools, writeFile("This is fake", "/etc/cp/data/data1.a")).WillOnce( + Return(true)); + EXPECT_CALL(mock_orchestration_tools, writeFile("0000 is fake", "/etc/cp/data/data4.a")).WillOnce( + Return(true)); + EXPECT_CALL(mock_orchestration_tools, writeFile("This is 3333", "/etc/cp/data/data6.a")).WillOnce( + Return(true)); } void @@ -526,12 +530,12 @@ TEST_F(OrchestrationTest, orchestrationPolicyUpdate) vector expected_data_types = {}; EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "") + updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "", "") ).WillOnce(Return(true)); EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(new_policy_path, "", expected_data_types, "") + updateServiceConfiguration(new_policy_path, "", expected_data_types, "", "") ).WillOnce(Return(true)); EXPECT_CALL( @@ -629,7 +633,7 @@ TEST_F(OrchestrationTest, startOrchestrationPoliceWithFailures) vector expected_data_types = {}; EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "") + updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "", "") ).Times(2).WillRepeatedly(Return(true)); EXPECT_CALL(mock_message, setActiveFog(host_address, 443, true, MessageTypeTag::GENERIC)).WillOnce(Return(true)); @@ -749,7 +753,7 @@ TEST_F(OrchestrationTest, loadOrchestrationPolicyFromBackup) vector expected_data_types = {}; EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "") + updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "", "") ).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(orchestration_policy_file_path)).WillOnce(Return(true)); @@ -883,7 +887,7 @@ TEST_F(OrchestrationTest, manifestUpdate) vector expected_data_types = {}; EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "") + updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "", "") ).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(orchestration_policy_file_path)).WillOnce(Return(true)); @@ -1033,7 +1037,7 @@ TEST_F(OrchestrationTest, getBadPolicyUpdate) vector expected_data_types = {}; EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "") + updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "", "") ).Times(2).WillRepeatedly(Return(true)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(orchestration_policy_file_path)).WillOnce(Return(true)); @@ -1114,7 +1118,7 @@ TEST_F(OrchestrationTest, getBadPolicyUpdate) EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(string("policy path"), "", expected_data_types, "")).WillOnce(Return(false) + updateServiceConfiguration(string("policy path"), "", expected_data_types, "", "")).WillOnce(Return(false) ); EXPECT_CALL(mock_ml, yield(A())) @@ -1179,7 +1183,7 @@ TEST_F(OrchestrationTest, failedDownloadSettings) vector expected_data_types = {}; EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "") + updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "", "") ).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(orchestration_policy_file_path)).WillOnce(Return(true)); @@ -1397,7 +1401,7 @@ TEST_P(OrchestrationTest, orchestrationFirstRun) vector expected_data_types = {}; EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "") + updateServiceConfiguration(policy_file_path, setting_file_path, expected_data_types, "", "") ).WillOnce(Return(true)); EXPECT_CALL(mock_ml, yield(A())) @@ -1578,13 +1582,13 @@ TEST_F(OrchestrationTest, dataUpdate) vector expected_empty_data_types = {}; ExpectationSet expectation_set = EXPECT_CALL( mock_service_controller, - updateServiceConfiguration(policy_file_path, setting_file_path, expected_empty_data_types, "") + updateServiceConfiguration(policy_file_path, setting_file_path, expected_empty_data_types, "", "") ).WillOnce(Return(true)); vector expected_ips_data_types = { "ips" }; EXPECT_CALL( mock_service_controller, - updateServiceConfiguration("", "", expected_ips_data_types, "") + updateServiceConfiguration("", "", expected_ips_data_types, "", "") ).After(expectation_set).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, doesDirectoryExist("/etc/cp/conf/data")).WillOnce(Return(true)); diff --git a/components/security_apps/orchestration/package_handler/package_handler.cc b/components/security_apps/orchestration/package_handler/package_handler.cc index f2423f6..fdddf8d 100755 --- a/components/security_apps/orchestration/package_handler/package_handler.cc +++ b/components/security_apps/orchestration/package_handler/package_handler.cc @@ -13,14 +13,11 @@ #include "package_handler.h" #include "config.h" -#include "sasal.h" #include "i_shell_cmd.h" #include #include -SASAL_START // Orchestration - Updates Control - USE_DEBUG_FLAG(D_ORCHESTRATOR); using namespace std; @@ -504,5 +501,3 @@ PackageHandler::Impl::updateSavedPackage(const string &package_name, const strin PackageHandler::PackageHandler() : Component("PackageHandler"), pimpl(make_unique()) {} PackageHandler::~PackageHandler() {} - -SASAL_END diff --git a/components/security_apps/orchestration/service_controller/service_controller.cc b/components/security_apps/orchestration/service_controller/service_controller.cc index ba7f235..b181aba 100755 --- a/components/security_apps/orchestration/service_controller/service_controller.cc +++ b/components/security_apps/orchestration/service_controller/service_controller.cc @@ -20,7 +20,6 @@ #include "config.h" #include "debug.h" -#include "sasal.h" #include "rest.h" #include "connkey.h" #include "i_messaging.h" @@ -29,8 +28,6 @@ #include "i_orchestration_tools.h" #include "customized_cereal_map.h" -SASAL_START // Orchestration - Updates Control - using namespace std; using namespace ReportIS; @@ -117,10 +114,36 @@ ServiceDetails::isServiceActive() const I_ShellCmd *shell_cmd = Singleton::Consume::by(); Maybe service_status = shell_cmd->getExecOutput(watchdog_status_cmd.str()); + int max_retry_attempts = getConfigurationWithDefault( + 5, + "orchestration", + "service controller attempts before timeout" + ); + + uint default_ms_tmout = 200; + uint ms_tmout = default_ms_tmout; + + for (int current_attempt = 0; current_attempt < max_retry_attempts; ++current_attempt) { + if (service_status.ok() || service_status.getErr().find("Reached timeout") == string::npos) break; + + dbgWarning(D_ORCHESTRATOR) + << "Retrying to execute service status check via watchdog API after getting timeout. Service name: " + << service_name + << ", Watchdog command: " + << watchdog_status_cmd.str() + << ", retry number: " + << (current_attempt + 1); + + ms_tmout = default_ms_tmout*(current_attempt + 2); + service_status = shell_cmd->getExecOutput(watchdog_status_cmd.str(), ms_tmout); + } + if (!service_status.ok()) { dbgWarning(D_ORCHESTRATOR) << "Changing service status to inactive after failure to its status from watchdog. Service name: " - << service_name; + << service_name + << ", Watchdog output: " + << service_status.getErr(); return false; } @@ -248,7 +271,8 @@ public: const string &new_policy_path, const string &new_settings_path, const vector &new_data_files, - const string &tenant_id + const string &tenant_id, + const string &profile_id ) override; bool isServiceInstalled(const string &service_name) override; @@ -567,7 +591,8 @@ ServiceController::Impl::updateServiceConfiguration( const string &new_policy_path, const string &new_settings_path, const vector &new_data_files, - const string &tenant_id) + const string &tenant_id, + const string &profile_id) { dbgFlow(D_ORCHESTRATOR) << "new_policy_path: " @@ -577,7 +602,9 @@ ServiceController::Impl::updateServiceConfiguration( << ", new_data_files: " << makeSeparatedStr(new_data_files, ",") << ". tenant_id: " - << tenant_id; + << tenant_id + << ". profile_id: " + << profile_id; if (!new_settings_path.empty()) { settings_path = new_settings_path; @@ -622,7 +649,7 @@ ServiceController::Impl::updateServiceConfiguration( return false; } - auto all_security_policies = orchestration_tools->jsonObjectSplitter(loaded_json.unpack(), tenant_id); + auto all_security_policies = orchestration_tools->jsonObjectSplitter(loaded_json.unpack(), tenant_id, profile_id); if (!all_security_policies.ok()) { dbgWarning(D_ORCHESTRATOR) @@ -655,7 +682,7 @@ ServiceController::Impl::updateServiceConfiguration( ); if (tenant_id != "") { - dir = dir + "/tenant_" + tenant_id; + dir = dir + "/tenant_" + tenant_id + "_profile_" + profile_id; if (!orchestration_tools->doesDirectoryExist(dir)) { if (orchestration_tools->createDirectory(dir)) { dbgTrace(D_ORCHESTRATOR) << "Created new configuration directory for tenant " << tenant_id; @@ -666,7 +693,13 @@ ServiceController::Impl::updateServiceConfiguration( } } - string policy_file_path = getPolicyConfigPath(single_policy.first, Config::ConfigFileType::Policy, tenant_id); + string policy_file_path = + getPolicyConfigPath( + single_policy.first, + Config::ConfigFileType::Policy, + tenant_id, + profile_id + ); auto update_config_result = updateServiceConfigurationFile( single_policy.first, @@ -690,7 +723,10 @@ ServiceController::Impl::updateServiceConfiguration( ); if (tenant_id != "") { - auto instances = Singleton::Consume::by()->getInstances(tenant_id); + auto instances = Singleton::Consume::by()->getInstances( + tenant_id, + profile_id + ); for (const auto &instance_id: instances) { auto relevant_service = registered_services.find(instance_id); if (relevant_service == registered_services.end()) { @@ -716,7 +752,9 @@ ServiceController::Impl::updateServiceConfiguration( if (was_policy_updated) { string config_file_path; - string base_path = filesystem_prefix + "/conf/" + (tenant_id != "" ? "tenant_" + tenant_id + "/" : ""); + string base_path = + filesystem_prefix + "/conf/" + + (tenant_id != "" ? "tenant_" + tenant_id + "_profile_" + profile_id + "/" : ""); config_file_path = getConfigurationWithDefault( base_path + "policy.json", "orchestration", @@ -793,7 +831,15 @@ ServiceController::Impl::sendSignalForServices( } } - int reconf_timeout = getConfigurationWithDefault(600, "orchestration", "Reconfiguration timeout seconds"); + int profile_tmo_conf = getProfileAgentSettingWithDefault( + 600, + "orchestration.configTimeoutSeconds" + ); + int reconf_timeout = getConfigurationWithDefault( + profile_tmo_conf, + "orchestration", + "Reconfiguration timeout seconds" + ); auto timer = Singleton::Consume::by(); auto current_timeout = timer->getMonotonicTime() + chrono::seconds(reconf_timeout); while(timer->getMonotonicTime() < current_timeout) { @@ -933,5 +979,3 @@ ServiceController::Impl::startReconfStatus( services_reconf_names.emplace(id, service_name); services_reconf_ids.emplace(id, service_id); } - -SASAL_END diff --git a/components/security_apps/orchestration/service_controller/service_controller_ut/service_controller_ut.cc b/components/security_apps/orchestration/service_controller/service_controller_ut/service_controller_ut.cc index f598a76..c5f4ab1 100755 --- a/components/security_apps/orchestration/service_controller/service_controller_ut/service_controller_ut.cc +++ b/components/security_apps/orchestration/service_controller/service_controller_ut/service_controller_ut.cc @@ -245,7 +245,7 @@ TEST_F(ServiceControllerTest, UpdateConfiguration) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(false)); EXPECT_CALL(mock_orchestration_tools, writeFile(l4_firewall, l4_firewall_policy_path)).WillOnce(Return(true)); @@ -294,6 +294,110 @@ TEST_F(ServiceControllerTest, UpdateConfiguration) EXPECT_EQ(i_service_controller->getUpdatePolicyVersion(), version_value); } +TEST_F(ServiceControllerTest, TimeOutUpdateConfiguration) +{ + string new_configuration = "{" + " \"version\": \"" + version_value + "\"" + " \"l4_firewall\":" + " {" + " \"app\": \"netfilter\"," + " \"l4_firewall_rules\": [" + " {" + " \"name\": \"allow_statefull_conns\"," + " \"flags\": [\"established\"]," + " \"action\": \"accept\"" + " }," + " {" + " \"name\": \"icmp drop\"," + " \"flags\": [\"log\"]," + " \"services\": [{\"name\":\"icmp\"}]," + " \"action\": \"drop\"" + " }" + " ]" + " }" + "}"; + + string l4_firewall = "{" + " \"app\": \"netfilter\"," + " \"l4_firewall_rules\": [" + " {" + " \"name\": \"allow_statefull_conns\"," + " \"flags\": [\"established\"]," + " \"action\": \"accept\"" + " }," + " {" + " \"name\": \"icmp drop\"," + " \"flags\": [\"log\"]," + " \"services\": [{\"name\":\"icmp\"}]," + " \"action\": \"drop\"" + " }" + " ]" + "}"; + + Maybe> json_parser_return = + map({{"l4_firewall", l4_firewall}, {"version", version_value}}); + EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) + .WillOnce(Return(json_parser_return)); + EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(false)); + EXPECT_CALL(mock_orchestration_tools, writeFile(l4_firewall, l4_firewall_policy_path)).WillOnce(Return(true)); + EXPECT_CALL(mock_orchestration_status, + setServiceConfiguration("l4_firewall", l4_firewall_policy_path, OrchestrationStatusConfigType::POLICY)); + + EXPECT_EQ(i_service_controller->getPolicyVersion(), ""); + + EXPECT_CALL(mock_orchestration_tools, copyFile(file_name, policy_file_path + backup_extension)) + .WillOnce(Return(true)); + EXPECT_CALL(mock_orchestration_tools, copyFile(file_name, policy_file_path)).WillOnce(Return(true)); + + string general_settings_path = "/my/settings/path"; + string reply_msg = "{\"id\": 1, \"error\": false, \"finished\": true, \"error_message\": \"\"}"; + + Flags conn_flags; + conn_flags.setFlag(MessageConnConfig::ONE_TIME_CONN); + EXPECT_CALL( + mock_message, + sendMessage( + true, + "{\n \"id\": 1,\n \"policy_version\": \"1.0.2\"\n}", + I_Messaging::Method::POST, + string("127.0.0.1"), + l4_firewall_service_port, + conn_flags, + string("/set-new-configuration"), + string(), + _, + MessageTypeTag::GENERIC + ) + ).WillOnce(Return(Maybe(reply_msg))); + + EXPECT_CALL( + mock_shell_cmd, + getExecOutput( + "/etc/cp/watchdog/cp-nano-watchdog --status --verbose --service mock access control" + " --family family1 --id id2", + _, + _ + ) + ).Times(3).WillRepeatedly( + InvokeWithoutArgs( + [&]() -> Maybe + { + static int counter = 0; + if (counter++ < 2) { + return genError("Reached timeout while executing shell command:"); + } + + return string("registered and running"); + } + ) + ); + + EXPECT_TRUE(i_service_controller->updateServiceConfiguration(file_name, general_settings_path)); + EXPECT_EQ(i_service_controller->getPolicyVersion(), version_value); + EXPECT_EQ(i_service_controller->getUpdatePolicyVersion(), version_value); +} + TEST_F(ServiceControllerTest, writeRegisteredServicesFromFile) { EXPECT_EQ(orchestrationRegisteredServicesFileToString(registered_services_file_path), string("")); @@ -352,7 +456,7 @@ TEST_F(ServiceControllerTest, writeRegisteredServicesFromFile) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(false)); EXPECT_CALL(mock_orchestration_tools, writeFile(l4_firewall, l4_firewall_policy_path)).WillOnce(Return(true)); @@ -498,7 +602,7 @@ TEST_F(ServiceControllerTest, noPolicyUpdate) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, readFile(l4_firewall_policy_path)).WillOnce(Return(l4_firewall)); @@ -584,7 +688,7 @@ TEST_F(ServiceControllerTest, SettingsAndPolicyUpdateCombinations) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(false)); EXPECT_CALL(mock_orchestration_tools, writeFile(l4_firewall, l4_firewall_policy_path)).WillOnce(Return(true)); @@ -635,7 +739,7 @@ TEST_F(ServiceControllerTest, SettingsAndPolicyUpdateCombinations) // Only settings now being updated EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, readFile(l4_firewall_policy_path)).WillOnce(Return(l4_firewall)); @@ -730,7 +834,7 @@ TEST_F(ServiceControllerTest, backup) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, readFile(l4_firewall_policy_path)).WillOnce(Return(old_configuration)); @@ -842,7 +946,7 @@ TEST_F(ServiceControllerTest, backupAttempts) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, readFile(l4_firewall_policy_path)).WillOnce(Return(old_configuration)); @@ -963,7 +1067,7 @@ TEST_F(ServiceControllerTest, MultiUpdateConfiguration) string orchestration_settings_path = configuration_dir + "/orchestration/orchestration" + settings_extension; EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(false)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(orchestration_policy_path)).WillOnce(Return(false)); @@ -1028,7 +1132,7 @@ TEST_F(ServiceControllerTest, emptyServices) Maybe> json_parser_return = map(); string empty_string = ""; EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).Times(1).WillRepeatedly(Return(empty_string)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(empty_string, _)).Times(1).WillRepeatedly( + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(empty_string, _, _)).Times(1).WillRepeatedly( Return(json_parser_return) ); @@ -1083,7 +1187,7 @@ TEST_F(ServiceControllerTest, failingWhileLoadingCurrentConfiguration) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, readFile(l4_firewall_policy_path)).WillOnce(Return(err)); @@ -1151,7 +1255,7 @@ TEST_F(ServiceControllerTest, failingWhileCopyingCurrentConfiguration) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).Times(1).WillRepeatedly(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)).Times(1).WillRepeatedly( + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)).Times(1).WillRepeatedly( Return(json_parser_return) ); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(true)); @@ -1211,7 +1315,7 @@ TEST_F(ServiceControllerTest, ErrorUpdateConfigurationRest) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(false)); EXPECT_CALL(mock_orchestration_tools, writeFile(l4_firewall, l4_firewall_policy_path)).WillOnce(Return(true)); @@ -1328,7 +1432,7 @@ TEST_F(ServiceControllerTest, errorWhileWrtingNewConfiguration) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).Times(1).WillRepeatedly(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)).Times(1).WillRepeatedly( + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)).Times(1).WillRepeatedly( Return(json_parser_return) ); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(true)); @@ -1357,16 +1461,18 @@ TEST_F(ServiceControllerTest, testPortsRest) TEST_F(ServiceControllerTest, testMultitenantConfFiles) { - map> tenant_files_input = { - {"tenant1", make_pair("/etc/cp/conf/tenant1_policy.json", "/etc/cp/conf/tenant1_settings.json")}, - {"tenant2", make_pair("/etc/cp/conf/tenant2_policy.json", "")} + map, pair> tenant_files_input = { + {make_pair("tenant1", "1234"), + make_pair("/etc/cp/conf/tenant1_profile_1234_policy.json", "/etc/cp/conf/tenant1_profile_1234_settings.json")}, + {make_pair("tenant2", "1235"), + make_pair("/etc/cp/conf/tenant2_profile_1235_policy.json", "")} }; vector ids = {"family1_id2"}; vector empty_ids; - EXPECT_CALL(tenant_manager, getInstances("tenant1")).WillOnce(Return(ids)); - EXPECT_CALL(tenant_manager, getInstances("tenant2")).WillOnce(Return(empty_ids)); + EXPECT_CALL(tenant_manager, getInstances("tenant1", "1234")).WillOnce(Return(ids)); + EXPECT_CALL(tenant_manager, getInstances("tenant2", "1235")).WillOnce(Return(empty_ids)); string reply_msg = "{\"id\": 1, \"error\": false, \"finished\": true, \"error_message\": \"\"}"; EXPECT_CALL( @@ -1386,7 +1492,8 @@ TEST_F(ServiceControllerTest, testMultitenantConfFiles) ).WillOnce(Return(Maybe(reply_msg))); for(auto entry : tenant_files_input) { - auto tenant = entry.first; + auto tenant = entry.first.first; + auto profile = entry.first.second; auto files = entry.second; string conf_file_name = files.first; string settings_file_name = files.second; @@ -1430,20 +1537,25 @@ TEST_F(ServiceControllerTest, testMultitenantConfFiles) "}"; string l4_firewall_policy_path_new = - configuration_dir + "/tenant_" + tenant + "/l4_firewall/l4_firewall" + policy_extension; + configuration_dir + "/tenant_" + tenant + + "_profile_" + profile +"/l4_firewall/l4_firewall" + policy_extension; Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(conf_file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, tenant)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, tenant, profile)) .WillOnce(Return(json_parser_return)); - EXPECT_CALL(mock_orchestration_tools, doesDirectoryExist(configuration_dir + "/tenant_" + tenant)) - .WillOnce(Return(false)); + EXPECT_CALL( + mock_orchestration_tools, + doesDirectoryExist(configuration_dir + "/tenant_" + tenant + "_profile_" + profile) + ).WillOnce(Return(false)); - EXPECT_CALL(mock_orchestration_tools, createDirectory(configuration_dir + "/tenant_" + tenant)) - .WillOnce(Return(true)); + EXPECT_CALL( + mock_orchestration_tools, + createDirectory(configuration_dir + "/tenant_" + tenant + "_profile_" + profile) + ).WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path_new)).WillOnce(Return(false)); @@ -1454,7 +1566,7 @@ TEST_F(ServiceControllerTest, testMultitenantConfFiles) "l4_firewall", l4_firewall_policy_path_new, OrchestrationStatusConfigType::POLICY) ); - string new_policy_file_path = "/etc/cp/conf/tenant_" + tenant + "/" + "policy.json"; + string new_policy_file_path = "/etc/cp/conf/tenant_" + tenant + "_profile_" + profile + "/" + "policy.json"; EXPECT_CALL(mock_orchestration_tools, copyFile(conf_file_name, new_policy_file_path + backup_extension)) .WillOnce(Return(true)); EXPECT_CALL(mock_orchestration_tools, copyFile(conf_file_name, new_policy_file_path)).WillOnce(Return(true)); @@ -1469,7 +1581,9 @@ TEST_F(ServiceControllerTest, testMultitenantConfFiles) ) ).WillRepeatedly(Return(string("registered and running"))); - EXPECT_TRUE(i_service_controller->updateServiceConfiguration(conf_file_name, settings_file_name, {}, tenant)); + EXPECT_TRUE( + i_service_controller->updateServiceConfiguration(conf_file_name, settings_file_name, {}, tenant, profile) + ); } } @@ -1542,7 +1656,7 @@ TEST_F(ServiceControllerTest, test_delayed_reconf) Maybe> json_parser_return = map({{"l4_firewall", l4_firewall}, {"version", version_value}}); EXPECT_CALL(mock_orchestration_tools, readFile(file_name)).WillOnce(Return(new_configuration)); - EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _)) + EXPECT_CALL(mock_orchestration_tools, jsonObjectSplitter(new_configuration, _, _)) .WillOnce(Return(json_parser_return)); EXPECT_CALL(mock_orchestration_tools, doesFileExist(l4_firewall_policy_path)).WillOnce(Return(false)); EXPECT_CALL(mock_orchestration_tools, writeFile(l4_firewall, l4_firewall_policy_path)). diff --git a/components/security_apps/orchestration/update_communication/fog_authenticator.cc b/components/security_apps/orchestration/update_communication/fog_authenticator.cc index 361e40d..aea0be6 100755 --- a/components/security_apps/orchestration/update_communication/fog_authenticator.cc +++ b/components/security_apps/orchestration/update_communication/fog_authenticator.cc @@ -17,14 +17,11 @@ #include "log_generator.h" #include "agent_details.h" #include "version.h" -#include "sasal.h" #include #include #include -SASAL_START // Orchestration - Communication - using namespace std; using namespace cereal; using HTTPMethod = I_Messaging::Method; @@ -319,6 +316,7 @@ FogAuthenticator::saveCredentialsToFile(const UserCredentials &user_credentials) return false; } + return orchestration_tools->writeFile(cred_str.unpack(), data_path + user_cred_file_name); } @@ -347,6 +345,7 @@ FogAuthenticator::getCredentialsFromFile() const if (!encrypted_cred.ok()) return genError(encrypted_cred.getErr()); dbgTrace(D_ORCHESTRATOR) << "Read the user credentials from the file"; + return orchestration_tools->jsonStringToObject(encrypted_cred.unpack()); } @@ -568,5 +567,3 @@ FogAuthenticator::init() loadRequiredSecurityApps(); initRestAPI(); } - -SASAL_END diff --git a/components/security_apps/orchestration/update_communication/fog_communication.cc b/components/security_apps/orchestration/update_communication/fog_communication.cc index 95f673b..f9d2366 100755 --- a/components/security_apps/orchestration/update_communication/fog_communication.cc +++ b/components/security_apps/orchestration/update_communication/fog_communication.cc @@ -17,14 +17,11 @@ #include "log_generator.h" #include "agent_details.h" #include "version.h" -#include "sasal.h" #include #include #include -SASAL_START // Orchestration - Communication - using namespace std; using namespace cereal; using HTTPMethod = I_Messaging::Method; @@ -133,5 +130,3 @@ FogCommunication::sendPolicyVersion(const string &policy_version) const } return genError("Failed to patch policy version"); } - -SASAL_END diff --git a/components/security_apps/orchestration/update_communication/hybrid_communication.cc b/components/security_apps/orchestration/update_communication/hybrid_communication.cc index 27598de..b402f5e 100755 --- a/components/security_apps/orchestration/update_communication/hybrid_communication.cc +++ b/components/security_apps/orchestration/update_communication/hybrid_communication.cc @@ -18,14 +18,11 @@ #include "log_generator.h" #include "agent_details.h" #include "version.h" -#include "sasal.h" #include #include #include -SASAL_START // Orchestration - Communication - using namespace std; using HTTPMethod = I_Messaging::Method; @@ -138,10 +135,9 @@ HybridCommunication::downloadAttributeFile(const GetResourceFile &resourse_file) << "Downloading attribute file on hybrid mode, file name: " << resourse_file.getFileName(); - if (resourse_file.getFileName() == "policy") { + if (resourse_file.getFileName() =="policy") { return declarative_policy_utils.getCurrPolicy(); } - if (resourse_file.getFileName() == "manifest") { if (!access_token.ok()) return genError("Acccess Token not available."); @@ -156,7 +152,6 @@ HybridCommunication::downloadAttributeFile(const GetResourceFile &resourse_file) ); return attribute_file; } - dbgTrace(D_ORCHESTRATOR) << "Unnecessary attribute files downloading on hybrid mode"; return string(""); } @@ -168,5 +163,3 @@ HybridCommunication::sendPolicyVersion(const string &policy_version) const policy_version.empty(); return Maybe(); } - -SASAL_END diff --git a/components/security_apps/orchestration/update_communication/local_communication.cc b/components/security_apps/orchestration/update_communication/local_communication.cc index 61b39a0..bf739e6 100755 --- a/components/security_apps/orchestration/update_communication/local_communication.cc +++ b/components/security_apps/orchestration/update_communication/local_communication.cc @@ -13,9 +13,6 @@ #include "local_communication.h" #include "config.h" -#include "sasal.h" - -SASAL_START // Orchestration - Communication using namespace std; @@ -183,5 +180,3 @@ LocalCommunication::sendPolicyVersion(const string &) const dbgTrace(D_ORCHESTRATOR) << "Agent in offline mode, no need to send policy version"; return Maybe(); } - -SASAL_END diff --git a/components/security_apps/orchestration/update_communication/update_communication.cc b/components/security_apps/orchestration/update_communication/update_communication.cc index 9ef4248..a1c776d 100755 --- a/components/security_apps/orchestration/update_communication/update_communication.cc +++ b/components/security_apps/orchestration/update_communication/update_communication.cc @@ -22,15 +22,12 @@ #include "log_generator.h" #include "agent_details.h" #include "version.h" -#include "sasal.h" #include "i_encryptor.h" #include "fog_authenticator.h" #include "fog_communication.h" #include "local_communication.h" #include "hybrid_communication.h" -SASAL_START // Orchestration - Communication - using namespace std; USE_DEBUG_FLAG(D_ORCHESTRATOR); @@ -145,5 +142,3 @@ UpdateCommunication::fini() { pimpl->fini(); } - -SASAL_END diff --git a/components/security_apps/waap/include/i_serialize.h b/components/security_apps/waap/include/i_serialize.h index cc73ba3..6c45808 100755 --- a/components/security_apps/waap/include/i_serialize.h +++ b/components/security_apps/waap/include/i_serialize.h @@ -15,7 +15,6 @@ #include #include #include "i_time_get.h" -#include "i_encryptor.h" #include "rest.h" #include "i_messaging.h" #include "i_mainloop.h" @@ -92,7 +91,6 @@ public: virtual void saveData(); virtual void restore(); - virtual void setFilePath(const std::string &new_file_path); protected: // saved file name for testing diff --git a/components/security_apps/waap/include/i_waap_asset_state.h b/components/security_apps/waap/include/i_waap_asset_state.h index c0b6f5b..a2bdb08 100755 --- a/components/security_apps/waap/include/i_waap_asset_state.h +++ b/components/security_apps/waap/include/i_waap_asset_state.h @@ -18,8 +18,8 @@ class I_WaapAssetState { public: virtual void updateScores() = 0; - virtual std::string getSignaturesScoresFilePath() const = 0; - virtual std::string getSignaturesFilterDir() const = 0; + virtual std::string getWaapDataFileName() const = 0; + virtual std::string getWaapDataDir() const = 0; virtual bool isKeywordOfType(const std::string& keyword, ParamType type) const = 0; virtual bool isBinarySampleType(const std::string & sample) const = 0; virtual bool isWBXMLSampleType(const std::string & sample) const = 0; diff --git a/components/security_apps/waap/resources/waap.data b/components/security_apps/waap/resources/waap.data new file mode 100644 index 0000000..0884cf7 --- /dev/null +++ b/components/security_apps/waap/resources/waap.data @@ -0,0 +1,59902 @@ +{"waap_signatures": +{ + "allowed_text_re": "^([\\w\\s+-]|%20|%09)*$", + "attack_types_map": { + "code_execution_fast_reg_0": [ + "Remote Code Execution" + ], + "code_execution_fast_reg_1": [ + "Remote Code Execution" + ], + "code_execution_fast_reg_2": [ + "Remote Code Execution" + ], + "code_execution_fast_reg_3": [ + "Remote Code Execution" + ], + "comment_ev_fast_reg_0": [ + "Evasion Techniques" + ], + "comment_newline_bypass_regex_0": [ + "SQL Injection" + ], + "detect_evasion_high_acuracy_0": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_1": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_10": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_11": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_12": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_13": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_14": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_15": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_16": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_17": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_18": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_19": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_2": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_20": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_21": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_22": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_23": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_3": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_4": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_5": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_6": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_7": [ + "Evasion Techniques" + ], + "detect_evasion_high_acuracy_9": [ + "Evasion Techniques" + ], + "encoding_chars108a": [ + "Evasion Techniques" + ], + "encoding_chars_2": [ + "Evasion Techniques" + ], + "encoding_chars_3": [ + "Evasion Techniques" + ], + "encoding_chars_4": [ + "Evasion Techniques" + ], + "encoding_charsfb50": [ + "Evasion Techniques" + ], + "evasion": [ + "Evasion Techniques" + ], + "evasion_high_acuracy557d": [ + "Evasion Techniques" + ], + "evasion_high_acuracy90a4": [ + "Evasion Techniques" + ], + "evasion_high_acuracyfb73": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_0": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_1": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_2": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_3": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_4": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_5": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_6": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_7": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_8": [ + "Evasion Techniques" + ], + "evasion_wildcard_regex_9": [ + "Evasion Techniques" + ], + "fn_name_pass_regex_0": [ + "Remote Code Execution" + ], + "general_injection_regex_0": [ + "SQL Injection" + ], + "generic_keywords": [ + "General" + ], + "generic_keywordsce36": [ + "General" + ], + "hi_acur_fast_reg_evasion48ff": [ + "Evasion Techniques" + ], + "hi_acur_fast_reg_evasion9228": [ + "Evasion Techniques" + ], + "hi_acur_fast_reg_evasion_0": [ + "Evasion Techniques" + ], + "hi_acur_fast_reg_evasion_1": [ + "Evasion Techniques" + ], + "hi_acur_fast_reg_evasion_2": [ + "Evasion Techniques" + ], + "hi_acur_fast_reg_evasion_3": [ + "Evasion Techniques" + ], + "high_acuracy1246": [ + "General" + ], + "high_acuracy2c17": [ + "General" + ], + "high_acuracy34a1": [ + "General" + ], + "high_acuracy3afe": [ + "General" + ], + "high_acuracy496d": [ + "General" + ], + "high_acuracy65ab": [ + "General" + ], + "high_acuracy6a8c": [ + "General" + ], + "high_acuracy_0": [ + "General" + ], + "high_acuracy_1": [ + "General" + ], + "high_acuracy_10": [ + "General" + ], + "high_acuracy_12": [ + "General" + ], + "high_acuracy_13": [ + "General" + ], + "high_acuracy_15": [ + "General" + ], + "high_acuracy_16": [ + "General" + ], + "high_acuracy_17": [ + "General" + ], + "high_acuracy_18": [ + "General" + ], + "high_acuracy_2": [ + "General" + ], + "high_acuracy_3": [ + "General" + ], + "high_acuracy_4": [ + "General" + ], + "high_acuracy_5": [ + "General" + ], + "high_acuracy_7": [ + "General" + ], + "high_acuracy_code_exec035f": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec038e": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec043f": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec048d": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec063e": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec0668": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec09c1": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec0b2c": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec0b93": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec11b0": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec12a1": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec1457": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec1f6f": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec20f9": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec2880": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec2c66": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec2e22": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec2ed8": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec2f16": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec30f1": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec315e": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec323a": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec32bf": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec3afe": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec3bfa": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec3c96": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec4543": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec461a": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec4753": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec485a": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec5015": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec50a4": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec50f8": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec560f": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec562c": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec56df": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec5729": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec575a": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec59c8": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec5aa6": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec5ff3": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec6274": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec6338": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec6d5b": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec6db9": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec7065": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec778e": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec78ab": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec78da": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec79c4": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec7b77": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec7c99": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec7e9f": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec8386": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec8ef9": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec91f3": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec99db": [ + "Remote Code Execution" + ], + "high_acuracy_code_exec9e8c": [ + "Remote Code Execution" + ], + "high_acuracy_code_execa46c": [ + "Remote Code Execution" + ], + "high_acuracy_code_execa58d": [ + "Remote Code Execution" + ], + "high_acuracy_code_execa7da": [ + "Remote Code Execution" + ], + "high_acuracy_code_execa88a": [ + "Remote Code Execution" + ], + "high_acuracy_code_execa9f6": [ + "Remote Code Execution" + ], + "high_acuracy_code_execaa33": [ + "Remote Code Execution" + ], + "high_acuracy_code_execaf62": [ + "Remote Code Execution" + ], + "high_acuracy_code_execb269": [ + "Remote Code Execution" + ], + "high_acuracy_code_execbb03": [ + "Remote Code Execution" + ], + "high_acuracy_code_execbb0c": [ + "Remote Code Execution" + ], + "high_acuracy_code_execbcbe": [ + "Remote Code Execution" + ], + "high_acuracy_code_execbcd6": [ + "Remote Code Execution" + ], + "high_acuracy_code_execc123": [ + "Remote Code Execution" + ], + "high_acuracy_code_execc50f": [ + "Remote Code Execution" + ], + "high_acuracy_code_execca3c": [ + "Remote Code Execution" + ], + "high_acuracy_code_execce3b": [ + "Remote Code Execution" + ], + "high_acuracy_code_execd061": [ + "Remote Code Execution" + ], + "high_acuracy_code_execd217": [ + "Remote Code Execution" + ], + "high_acuracy_code_execd415": [ + "Remote Code Execution" + ], + "high_acuracy_code_execdaf9": [ + "Remote Code Execution" + ], + "high_acuracy_code_exece0bc": [ + "Remote Code Execution" + ], + "high_acuracy_code_execea23": [ + "Remote Code Execution" + ], + "high_acuracy_code_execf01b": [ + "Remote Code Execution" + ], + "high_acuracy_code_execf08e": [ + "Remote Code Execution" + ], + "high_acuracy_code_execf565": [ + "Remote Code Execution" + ], + "high_acuracy_code_execf7a4": [ + "Remote Code Execution" + ], + "high_acuracy_code_execf877": [ + "Remote Code Execution" + ], + "high_acuracy_code_execfccf": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_1": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_12": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_16": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_18": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_20": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_25": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_26": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_4": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_46": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_49": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_51": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_53": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_54": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_59": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_6": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_66": [ + "Remote Code Execution" + ], + "high_acuracy_code_execution_9": [ + "Remote Code Execution" + ], + "high_acuracy_fast_reg_xss0315": [ + "Cross Site Scripting" + ], + "high_acuracy_fast_reg_xss2841": [ + "Cross Site Scripting" + ], + "high_acuracy_fast_reg_xss3420": [ + "Cross Site Scripting" + ], + "high_acuracy_fast_reg_xss52a6": [ + "Cross Site Scripting" + ], + "high_acuracy_fast_reg_xss5e81": [ + "Cross Site Scripting" + ], + "high_acuracy_fast_reg_xss_0": [ + "Cross Site Scripting" + ], + "high_acuracy_fast_reg_xssd0fb": [ + "Cross Site Scripting" + ], + "high_acuracy_fast_reg_xxe_0": [ + "XML External Entity" + ], + "high_acuracya652": [ + "General" + ], + "high_acuracyb269": [ + "General" + ], + "high_acuracyc37d": [ + "General" + ], + "ldap_injection": [ + "LDAP Injection" + ], + "ldap_injection_0": [ + "LDAP Injection" + ], + "ldap_injection_1": [ + "LDAP Injection" + ], + "ldap_injection_regex_0": [ + "LDAP Injection" + ], + "ldap_injection_regex_1": [ + "LDAP Injection" + ], + "ldap_injection_regex_2": [ + "LDAP Injection" + ], + "ldap_injection_regex_3": [ + "LDAP Injection" + ], + "ldap_injection_regex_4": [ + "LDAP Injection" + ], + "ldap_injection_regex_5": [ + "LDAP Injection" + ], + "ldap_injection_regex_6": [ + "LDAP Injection" + ], + "ldap_injectionf0b9": [ + "LDAP Injection" + ], + "longtext": [ + "General" + ], + "mail_attacks_0": [ + "Remote Code Execution" + ], + "mail_attacks_1": [ + "Remote Code Execution" + ], + "mail_attacks_2": [ + "Remote Code Execution" + ], + "mail_attacks_3": [ + "Remote Code Execution" + ], + "mail_attacks_4": [ + "Remote Code Execution" + ], + "medium_acuracy": [ + "General" + ], + "medium_acuracy_0": [ + "General" + ], + "medium_acuracy_1": [ + "General" + ], + "no_sql_fast_reg0397": [ + "SQL Injection" + ], + "no_sql_fast_reg7acf": [ + "SQL Injection" + ], + "no_sql_fast_rega323": [ + "SQL Injection" + ], + "no_sql_fast_regb128": [ + "SQL Injection" + ], + "os_cmd_ev_fast_reg642a": [ + "Remote Code Execution", + "Evasion Techniques" + ], + "os_cmd_exec_medium_acuracy": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy065c": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy0f71": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy30f1": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_0": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_1": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_10": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_11": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_12": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_13": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_14": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_15": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_16": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_17": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_18": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_19": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_2": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_20": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_21": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_22": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_4": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_6": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_8": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracy_9": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracyb605": [ + "Remote Code Execution" + ], + "os_cmd_exec_medium_acuracyd71b": [ + "Remote Code Execution" + ], + "os_cmd_exec_susp_dir_patts": [ + "Remote Code Execution" + ], + "os_cmd_exec_susp_dir_patts_0": [ + "Remote Code Execution" + ], + "os_cmd_exec_susp_dir_patts_1": [ + "Remote Code Execution" + ], + "os_cmd_exec_susp_dir_patts_2": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg0e76": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg32ff": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg4c37": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg7f90": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg_0": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg_10": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg_2": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg_4": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg_8": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_reg_9": [ + "Remote Code Execution" + ], + "os_cmd_high_acuracy_fast_regd6e8": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy_0": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy_1": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy_2": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy_3": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy_4": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy_5": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy_6": [ + "Remote Code Execution" + ], + "os_cmd_sep_medium_acuracy_7": [ + "Remote Code Execution" + ], + "os_commands": [ + "Remote Code Execution" + ], + "os_commands272f": [ + "Remote Code Execution" + ], + "os_commands2cf4": [ + "Remote Code Execution" + ], + "os_commands2ea6": [ + "Remote Code Execution" + ], + "os_commands8744": [ + "Remote Code Execution" + ], + "os_commands_0": [ + "Remote Code Execution" + ], + "os_commands_1": [ + "Remote Code Execution" + ], + "os_commands_10": [ + "Remote Code Execution" + ], + "os_commands_11": [ + "Remote Code Execution" + ], + "os_commands_12": [ + "Remote Code Execution" + ], + "os_commands_13": [ + "Remote Code Execution" + ], + "os_commands_14": [ + "Remote Code Execution" + ], + "os_commands_15": [ + "Remote Code Execution" + ], + "os_commands_16": [ + "Remote Code Execution" + ], + "os_commands_17": [ + "Remote Code Execution" + ], + "os_commands_18": [ + "Remote Code Execution" + ], + "os_commands_19": [ + "Remote Code Execution" + ], + "os_commands_2": [ + "Remote Code Execution" + ], + "os_commands_20": [ + "Remote Code Execution" + ], + "os_commands_21": [ + "Remote Code Execution" + ], + "os_commands_22": [ + "Remote Code Execution" + ], + "os_commands_23": [ + "Remote Code Execution" + ], + "os_commands_24": [ + "Remote Code Execution" + ], + "os_commands_25": [ + "Remote Code Execution" + ], + "os_commands_26": [ + "Remote Code Execution" + ], + "os_commands_27": [ + "Remote Code Execution" + ], + "os_commands_3": [ + "Remote Code Execution" + ], + "os_commands_4": [ + "Remote Code Execution" + ], + "os_commands_5": [ + "Remote Code Execution" + ], + "os_commands_6": [ + "Remote Code Execution" + ], + "os_commands_7": [ + "Remote Code Execution" + ], + "os_commands_8": [ + "Remote Code Execution" + ], + "os_commands_9": [ + "Remote Code Execution" + ], + "os_commandsbdd9": [ + "Remote Code Execution" + ], + "os_commandsdd75": [ + "Remote Code Execution" + ], + "os_commandsefda": [ + "Remote Code Execution" + ], + "os_commandsff70": [ + "Remote Code Execution" + ], + "path_traversal": [ + "Path Traversal" + ], + "path_traversal65ba": [ + "Path Traversal" + ], + "path_traversal6625": [ + "Path Traversal" + ], + "path_traversal913d": [ + "Path Traversal" + ], + "path_traversal_0": [ + "Path Traversal" + ], + "path_traversal_1": [ + "Path Traversal" + ], + "path_traversal_2": [ + "Path Traversal" + ], + "path_traversal_3": [ + "Path Traversal" + ], + "php_info_parameters0669": [ + "Remote Code Execution" + ], + "php_info_parameters3f14": [ + "Remote Code Execution" + ], + "php_info_parameters3fdf": [ + "Remote Code Execution" + ], + "php_info_parameters41db": [ + "Remote Code Execution" + ], + "php_info_parameters8851": [ + "Remote Code Execution" + ], + "php_info_parametersc394": [ + "Remote Code Execution" + ], + "php_info_parametersda77": [ + "Remote Code Execution" + ], + "php_info_parameterse68c": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_reg022a": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_reg151a": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_reg1e0f": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_reg4f07": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_reg6c96": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_reg7c51": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_regba9d": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_regbc7e": [ + "Remote Code Execution" + ], + "php_proto_wrappers_fast_reged42": [ + "Remote Code Execution" + ], + "quotes_ev_fast_reg_0": [ + "Evasion Techniques" + ], + "quotes_ev_fast_reg_1": [ + "Evasion Techniques" + ], + "quotes_ev_fast_reg_2": [ + "Evasion Techniques" + ], + "quotes_ev_fast_reg_3": [ + "Evasion Techniques" + ], + "quotes_ev_fast_reg_4": [ + "Evasion Techniques" + ], + "quotes_ev_fast_regab4e": [ + "Evasion Techniques" + ], + "quotes_space_ev_fast_reg9d52": [ + "Evasion Techniques" + ], + "regex_code_execution_0": [ + "Remote Code Execution" + ], + "regex_code_execution_1": [ + "Remote Code Execution" + ], + "regex_code_execution_10": [ + "Remote Code Execution" + ], + "regex_code_execution_2": [ + "Remote Code Execution" + ], + "regex_code_execution_3": [ + "Remote Code Execution" + ], + "regex_code_execution_4": [ + "Remote Code Execution" + ], + "regex_code_execution_5": [ + "Remote Code Execution" + ], + "regex_code_execution_6": [ + "Remote Code Execution" + ], + "regex_code_execution_7": [ + "Remote Code Execution" + ], + "regex_code_execution_8": [ + "Remote Code Execution" + ], + "regex_code_execution_9": [ + "Remote Code Execution" + ], + "regex_high_acuracy_crlf_inj_0": [ + "Evasion Techniques" + ], + "regex_high_acuracy_crlf_inj_1": [ + "Evasion Techniques" + ], + "regex_high_acuracy_crlf_inj_2": [ + "Evasion Techniques" + ], + "regex_high_acuracy_crlf_inj_3": [ + "Evasion Techniques" + ], + "regex_postfix_0": [ + "SQL Injection" + ], + "regex_postfix_1": [ + "SQL Injection" + ], + "regex_prefix_0": [ + "SQL Injection" + ], + "regex_prefix_1": [ + "SQL Injection" + ], + "regex_sqli_0": [ + "SQL Injection" + ], + "regex_sqli_1": [ + "SQL Injection" + ], + "regex_sqli_10": [ + "SQL Injection" + ], + "regex_sqli_11": [ + "SQL Injection" + ], + "regex_sqli_12": [ + "SQL Injection" + ], + "regex_sqli_13": [ + "SQL Injection" + ], + "regex_sqli_14": [ + "SQL Injection" + ], + "regex_sqli_15": [ + "SQL Injection" + ], + "regex_sqli_16": [ + "SQL Injection" + ], + "regex_sqli_17": [ + "SQL Injection" + ], + "regex_sqli_18": [ + "SQL Injection" + ], + "regex_sqli_19": [ + "SQL Injection" + ], + "regex_sqli_2": [ + "SQL Injection" + ], + "regex_sqli_20": [ + "SQL Injection" + ], + "regex_sqli_21": [ + "SQL Injection" + ], + "regex_sqli_22": [ + "SQL Injection" + ], + "regex_sqli_23": [ + "SQL Injection" + ], + "regex_sqli_24": [ + "SQL Injection" + ], + "regex_sqli_25": [ + "SQL Injection" + ], + "regex_sqli_26": [ + "SQL Injection" + ], + "regex_sqli_27": [ + "SQL Injection" + ], + "regex_sqli_28": [ + "SQL Injection" + ], + "regex_sqli_29": [ + "SQL Injection" + ], + "regex_sqli_3": [ + "SQL Injection" + ], + "regex_sqli_30": [ + "SQL Injection" + ], + "regex_sqli_31": [ + "SQL Injection" + ], + "regex_sqli_32": [ + "SQL Injection" + ], + "regex_sqli_4": [ + "SQL Injection" + ], + "regex_sqli_5": [ + "SQL Injection" + ], + "regex_sqli_6": [ + "SQL Injection" + ], + "regex_sqli_7": [ + "SQL Injection" + ], + "regex_sqli_8": [ + "SQL Injection" + ], + "regex_sqli_9": [ + "SQL Injection" + ], + "regex_xss_0": [ + "Cross Site Scripting" + ], + "regex_xss_1": [ + "Cross Site Scripting" + ], + "regex_xss_2": [ + "Cross Site Scripting" + ], + "regex_xss_3": [ + "Cross Site Scripting" + ], + "regex_xss_4": [ + "Cross Site Scripting" + ], + "regex_xss_5": [ + "Cross Site Scripting" + ], + "regex_xss_6": [ + "Cross Site Scripting" + ], + "regex_xss_7": [ + "Cross Site Scripting" + ], + "regex_xss_8": [ + "Cross Site Scripting" + ], + "regex_xss_evasion_0": [ + "Cross Site Scripting", + "Evasion Techniques" + ], + "regex_xxe_0": [ + "XML External Entity" + ], + "sqli_blind": [ + "SQL Injection" + ], + "sqli_blind8a50": [ + "SQL Injection" + ], + "sqli_blind_0": [ + "SQL Injection" + ], + "sqli_blinda6e0": [ + "SQL Injection" + ], + "sqli_detection_evasion": [ + "Evasion Techniques", + "SQL Injection" + ], + "sqli_detection_evasion_0": [ + "Evasion Techniques", + "SQL Injection" + ], + "sqli_detection_evasion_1": [ + "Evasion Techniques", + "SQL Injection" + ], + "sqli_fast_reg6210": [ + "SQL Injection" + ], + "sqli_fast_reg7dbf": [ + "SQL Injection" + ], + "sqli_fast_reg_0": [ + "SQL Injection" + ], + "sqli_fast_reg_1": [ + "SQL Injection" + ], + "sqli_fast_reg_2": [ + "SQL Injection" + ], + "sqli_fast_reg_3": [ + "SQL Injection" + ], + "sqli_fast_reg_4": [ + "SQL Injection" + ], + "sqli_fast_reg_5": [ + "SQL Injection" + ], + "sqli_fast_rega9c5": [ + "SQL Injection" + ], + "sqli_generic": [ + "SQL Injection" + ], + "sqli_generic035a": [ + "SQL Injection" + ], + "sqli_generic062d": [ + "SQL Injection" + ], + "sqli_generic0cd1": [ + "SQL Injection" + ], + "sqli_generic0ceb": [ + "SQL Injection" + ], + "sqli_generic108f": [ + "SQL Injection" + ], + "sqli_generic155c": [ + "SQL Injection" + ], + "sqli_generic20ed": [ + "SQL Injection" + ], + "sqli_generic2717": [ + "SQL Injection" + ], + "sqli_generic2a58": [ + "SQL Injection" + ], + "sqli_generic2bdb": [ + "SQL Injection" + ], + "sqli_generic2c9a": [ + "SQL Injection" + ], + "sqli_generic332b": [ + "SQL Injection" + ], + "sqli_generic3928": [ + "SQL Injection" + ], + "sqli_generic39a4": [ + "SQL Injection" + ], + "sqli_generic3c80": [ + "SQL Injection" + ], + "sqli_generic3f67": [ + "SQL Injection" + ], + "sqli_generic4271": [ + "SQL Injection" + ], + "sqli_generic4c86": [ + "SQL Injection" + ], + "sqli_generic4d35": [ + "SQL Injection" + ], + "sqli_generic4fa4": [ + "SQL Injection" + ], + "sqli_generic4ffb": [ + "SQL Injection" + ], + "sqli_generic502b": [ + "SQL Injection" + ], + "sqli_generic506a": [ + "SQL Injection" + ], + "sqli_generic559b": [ + "SQL Injection" + ], + "sqli_generic587a": [ + "SQL Injection" + ], + "sqli_generic6a8c": [ + "SQL Injection" + ], + "sqli_generic7598": [ + "SQL Injection" + ], + "sqli_generic936a": [ + "SQL Injection" + ], + "sqli_generic95c8": [ + "SQL Injection" + ], + "sqli_generic9dce": [ + "SQL Injection" + ], + "sqli_generic9ef6": [ + "SQL Injection" + ], + "sqli_generic_10": [ + "SQL Injection" + ], + "sqli_generic_11": [ + "SQL Injection" + ], + "sqli_generic_13": [ + "SQL Injection" + ], + "sqli_generic_14": [ + "SQL Injection" + ], + "sqli_generic_16": [ + "SQL Injection" + ], + "sqli_generic_18": [ + "SQL Injection" + ], + "sqli_generic_21": [ + "SQL Injection" + ], + "sqli_generic_22": [ + "SQL Injection" + ], + "sqli_generic_25": [ + "SQL Injection" + ], + "sqli_generic_27": [ + "SQL Injection" + ], + "sqli_generic_28": [ + "SQL Injection" + ], + "sqli_generic_33": [ + "SQL Injection" + ], + "sqli_generic_37": [ + "SQL Injection" + ], + "sqli_generic_38": [ + "SQL Injection" + ], + "sqli_generic_4": [ + "SQL Injection" + ], + "sqli_generic_41": [ + "SQL Injection" + ], + "sqli_generic_42": [ + "SQL Injection" + ], + "sqli_generic_47": [ + "SQL Injection" + ], + "sqli_generic_5": [ + "SQL Injection" + ], + "sqli_generic_50": [ + "SQL Injection" + ], + "sqli_generic_58": [ + "SQL Injection" + ], + "sqli_generic_59": [ + "SQL Injection" + ], + "sqli_generic_60": [ + "SQL Injection" + ], + "sqli_generic_61": [ + "SQL Injection" + ], + "sqli_generic_63": [ + "SQL Injection" + ], + "sqli_generic_65": [ + "SQL Injection" + ], + "sqli_generic_8": [ + "SQL Injection" + ], + "sqli_genericadd9": [ + "SQL Injection" + ], + "sqli_genericb11c": [ + "SQL Injection" + ], + "sqli_genericb28b": [ + "SQL Injection" + ], + "sqli_genericb844": [ + "SQL Injection" + ], + "sqli_genericb981": [ + "SQL Injection" + ], + "sqli_genericba4a": [ + "SQL Injection" + ], + "sqli_genericba83": [ + "SQL Injection" + ], + "sqli_genericbb99": [ + "SQL Injection" + ], + "sqli_genericc23f": [ + "SQL Injection" + ], + "sqli_genericc98e": [ + "SQL Injection" + ], + "sqli_genericccae": [ + "SQL Injection" + ], + "sqli_genericce64": [ + "SQL Injection" + ], + "sqli_genericd47d": [ + "SQL Injection" + ], + "sqli_genericd497": [ + "SQL Injection" + ], + "sqli_genericdb7b": [ + "SQL Injection" + ], + "sqli_genericdd00": [ + "SQL Injection" + ], + "sqli_genericdd3b": [ + "SQL Injection" + ], + "sqli_generice043": [ + "SQL Injection" + ], + "sqli_generice54c": [ + "SQL Injection" + ], + "sqli_genericea23": [ + "SQL Injection" + ], + "sqli_genericec02": [ + "SQL Injection" + ], + "sqli_medium_acuracy": [ + "SQL Injection" + ], + "sqli_medium_acuracy_0": [ + "SQL Injection" + ], + "sqli_medium_acuracy_1": [ + "SQL Injection" + ], + "sqli_medium_acuracy_2": [ + "SQL Injection" + ], + "sqli_medium_acuracy_3": [ + "SQL Injection" + ], + "sqli_medium_acuracy_4": [ + "SQL Injection" + ], + "sqli_medium_acuracy_5": [ + "SQL Injection" + ], + "sqli_medium_acuracy_6": [ + "SQL Injection" + ], + "sqli_medium_acuracy_7": [ + "SQL Injection" + ], + "ssti": [ + "Remote Code Execution" + ], + "ssti2553": [ + "Remote Code Execution" + ], + "ssti2c4d": [ + "Remote Code Execution" + ], + "ssti32bf": [ + "Remote Code Execution" + ], + "ssti3c17": [ + "Remote Code Execution" + ], + "ssti43a8": [ + "Remote Code Execution" + ], + "ssti6c6e": [ + "Remote Code Execution" + ], + "ssti8e8b": [ + "Remote Code Execution" + ], + "ssti9606": [ + "Remote Code Execution" + ], + "ssti_0": [ + "Remote Code Execution" + ], + "ssti_12": [ + "Remote Code Execution" + ], + "ssti_15": [ + "Remote Code Execution" + ], + "ssti_16": [ + "Remote Code Execution" + ], + "ssti_18": [ + "Remote Code Execution" + ], + "ssti_2": [ + "Remote Code Execution" + ], + "ssti_20": [ + "Remote Code Execution" + ], + "ssti_22": [ + "Remote Code Execution" + ], + "ssti_24": [ + "Remote Code Execution" + ], + "ssti_5": [ + "Remote Code Execution" + ], + "ssti_6": [ + "Remote Code Execution" + ], + "ssti_fast_reg2d28": [ + "Remote Code Execution" + ], + "ssti_fast_reg_0": [ + "Remote Code Execution" + ], + "ssti_fast_reg_1": [ + "Remote Code Execution" + ], + "ssti_fast_reg_2": [ + "Remote Code Execution" + ], + "ssti_fast_reg_3": [ + "Remote Code Execution" + ], + "ssti_fast_reg_4": [ + "Remote Code Execution" + ], + "ssti_fast_regc807": [ + "Remote Code Execution" + ], + "ssti_fast_regdcd5": [ + "Remote Code Execution" + ], + "sstib08a": [ + "Remote Code Execution" + ], + "sstib9c5": [ + "Remote Code Execution" + ], + "ssticd8d": [ + "Remote Code Execution" + ], + "sstid1c2": [ + "Remote Code Execution" + ], + "sstid61d": [ + "Remote Code Execution" + ], + "sstie907": [ + "Remote Code Execution" + ], + "sstifdb4": [ + "Remote Code Execution" + ], + "url_scanning": [ + "Path Traversal" + ], + "url_scanning1f1b": [ + "Path Traversal" + ], + "url_scanning4716": [ + "Path Traversal" + ], + "url_scanning6bf5": [ + "Path Traversal" + ], + "url_scanning6f3d": [ + "Path Traversal" + ], + "url_scanning7ce2": [ + "Path Traversal" + ], + "url_scanning_1": [ + "Path Traversal" + ], + "url_scanning_11": [ + "Path Traversal" + ], + "url_scanning_12": [ + "Path Traversal" + ], + "url_scanning_13": [ + "Path Traversal" + ], + "url_scanning_14": [ + "Path Traversal" + ], + "url_scanning_15": [ + "Path Traversal" + ], + "url_scanning_2": [ + "Path Traversal" + ], + "url_scanning_5": [ + "Path Traversal" + ], + "url_scanning_6": [ + "Path Traversal" + ], + "url_scanning_7": [ + "Path Traversal" + ], + "url_scanning_8": [ + "Path Traversal" + ], + "url_scanning_9": [ + "Path Traversal" + ], + "url_scanning_regex_0": [ + "Path Traversal" + ], + "url_scanningd475": [ + "Path Traversal" + ], + "url_scanningf544": [ + "Path Traversal" + ], + "url_scanningf977": [ + "Path Traversal" + ], + "vuln_os_dirs": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs2c17": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs3b59": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_0": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_1": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_10": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_11": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_13": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_14": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_15": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_16": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_17": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_2": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_3": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_4": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_5": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_6": [ + "Vulnerability Scanning" + ], + "vuln_os_dirs_8": [ + "Vulnerability Scanning" + ], + "vuln_os_files_0": [ + "Vulnerability Scanning" + ], + "vuln_os_files_1": [ + "Vulnerability Scanning" + ], + "vuln_os_files_2": [ + "Vulnerability Scanning" + ], + "vuln_os_files_3": [ + "Vulnerability Scanning" + ], + "vuln_os_files_4": [ + "Vulnerability Scanning" + ], + "vuln_os_files_5": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_102": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_121": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_170": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_185": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_207": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_280": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_307": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_377": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_380": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_389": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_40": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_428": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_483": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_593": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_600": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_665": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_689": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_71": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_712": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_729": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_74": [ + "Vulnerability Scanning" + ], + "vuln_web_dirs_77": [ + "Vulnerability Scanning" + ], + "vuln_web_files": [ + "Vulnerability Scanning" + ], + "vuln_web_files00a6": [ + "Vulnerability Scanning" + ], + "vuln_web_files1a13": [ + "Vulnerability Scanning" + ], + "vuln_web_files1b74": [ + "Vulnerability Scanning" + ], + "vuln_web_files2919": [ + "Vulnerability Scanning" + ], + "vuln_web_files5e7d": [ + "Vulnerability Scanning" + ], + "vuln_web_files87e1": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1003": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1005": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1007": [ + "Vulnerability Scanning" + ], + "vuln_web_files_101": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1014": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1016": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1018": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1019": [ + "Vulnerability Scanning" + ], + "vuln_web_files_102": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1021": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1023": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1025": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1027": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1028": [ + "Vulnerability Scanning" + ], + "vuln_web_files_103": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1031": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1037": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1038": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1039": [ + "Vulnerability Scanning" + ], + "vuln_web_files_104": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1043": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1045": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1049": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1050": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1052": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1059": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1060": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1062": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1063": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1068": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1070": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1071": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1075": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1076": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1077": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1079": [ + "Vulnerability Scanning" + ], + "vuln_web_files_108": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1080": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1081": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1082": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1083": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1085": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1087": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1089": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1090": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1092": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1094": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1095": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1096": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1097": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1098": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1099": [ + "Vulnerability Scanning" + ], + "vuln_web_files_11": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1100": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1101": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1104": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1108": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1110": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1111": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1114": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1118": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1119": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1120": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1122": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1123": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1126": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1127": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1128": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1129": [ + "Vulnerability Scanning" + ], + "vuln_web_files_113": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1130": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1132": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1133": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1135": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1136": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1137": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1138": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1143": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1144": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1146": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1147": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1148": [ + "Vulnerability Scanning" + ], + "vuln_web_files_115": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1150": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1151": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1152": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1155": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1156": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1157": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1159": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1160": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1162": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1163": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1164": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1166": [ + "Vulnerability Scanning" + ], + "vuln_web_files_117": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1170": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1171": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1173": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1175": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1177": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1178": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1179": [ + "Vulnerability Scanning" + ], + "vuln_web_files_118": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1180": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1181": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1182": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1183": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1184": [ + "Vulnerability Scanning" + ], + "vuln_web_files_1187": [ + "Vulnerability Scanning" + ], + "vuln_web_files_119": [ + "Vulnerability Scanning" + ], + "vuln_web_files_120": [ + "Vulnerability Scanning" + ], + "vuln_web_files_121": [ + "Vulnerability Scanning" + ], + "vuln_web_files_122": [ + "Vulnerability Scanning" + ], + "vuln_web_files_123": [ + "Vulnerability Scanning" + ], + "vuln_web_files_124": [ + "Vulnerability Scanning" + ], + "vuln_web_files_126": [ + "Vulnerability Scanning" + ], + "vuln_web_files_128": [ + "Vulnerability Scanning" + ], + "vuln_web_files_13": [ + "Vulnerability Scanning" + ], + "vuln_web_files_132": [ + "Vulnerability Scanning" + ], + "vuln_web_files_135": [ + "Vulnerability Scanning" + ], + "vuln_web_files_136": [ + "Vulnerability Scanning" + ], + "vuln_web_files_139": [ + "Vulnerability Scanning" + ], + "vuln_web_files_14": [ + "Vulnerability Scanning" + ], + "vuln_web_files_143": [ + "Vulnerability Scanning" + ], + "vuln_web_files_145": [ + "Vulnerability Scanning" + ], + "vuln_web_files_147": [ + "Vulnerability Scanning" + ], + "vuln_web_files_149": [ + "Vulnerability Scanning" + ], + "vuln_web_files_15": [ + "Vulnerability Scanning" + ], + "vuln_web_files_150": [ + "Vulnerability Scanning" + ], + "vuln_web_files_152": [ + "Vulnerability Scanning" + ], + "vuln_web_files_154": [ + "Vulnerability Scanning" + ], + "vuln_web_files_155": [ + "Vulnerability Scanning" + ], + "vuln_web_files_157": [ + "Vulnerability Scanning" + ], + "vuln_web_files_158": [ + "Vulnerability Scanning" + ], + "vuln_web_files_159": [ + "Vulnerability Scanning" + ], + "vuln_web_files_16": [ + "Vulnerability Scanning" + ], + "vuln_web_files_162": [ + "Vulnerability Scanning" + ], + "vuln_web_files_163": [ + "Vulnerability Scanning" + ], + "vuln_web_files_164": [ + "Vulnerability Scanning" + ], + "vuln_web_files_165": [ + "Vulnerability Scanning" + ], + "vuln_web_files_166": [ + "Vulnerability Scanning" + ], + "vuln_web_files_168": [ + "Vulnerability Scanning" + ], + "vuln_web_files_17": [ + "Vulnerability Scanning" + ], + "vuln_web_files_171": [ + "Vulnerability Scanning" + ], + "vuln_web_files_173": [ + "Vulnerability Scanning" + ], + "vuln_web_files_175": [ + "Vulnerability Scanning" + ], + "vuln_web_files_178": [ + "Vulnerability Scanning" + ], + "vuln_web_files_18": [ + "Vulnerability Scanning" + ], + "vuln_web_files_181": [ + "Vulnerability Scanning" + ], + "vuln_web_files_183": [ + "Vulnerability Scanning" + ], + "vuln_web_files_186": [ + "Vulnerability Scanning" + ], + "vuln_web_files_188": [ + "Vulnerability Scanning" + ], + "vuln_web_files_189": [ + "Vulnerability Scanning" + ], + "vuln_web_files_190": [ + "Vulnerability Scanning" + ], + "vuln_web_files_192": [ + "Vulnerability Scanning" + ], + "vuln_web_files_193": [ + "Vulnerability Scanning" + ], + "vuln_web_files_194": [ + "Vulnerability Scanning" + ], + "vuln_web_files_198": [ + "Vulnerability Scanning" + ], + "vuln_web_files_2": [ + "Vulnerability Scanning" + ], + "vuln_web_files_20": [ + "Vulnerability Scanning" + ], + "vuln_web_files_201": [ + "Vulnerability Scanning" + ], + "vuln_web_files_203": [ + "Vulnerability Scanning" + ], + "vuln_web_files_206": [ + "Vulnerability Scanning" + ], + "vuln_web_files_207": [ + "Vulnerability Scanning" + ], + "vuln_web_files_209": [ + "Vulnerability Scanning" + ], + "vuln_web_files_210": [ + "Vulnerability Scanning" + ], + "vuln_web_files_212": [ + "Vulnerability Scanning" + ], + "vuln_web_files_215": [ + "Vulnerability Scanning" + ], + "vuln_web_files_217": [ + "Vulnerability Scanning" + ], + "vuln_web_files_221": [ + "Vulnerability Scanning" + ], + "vuln_web_files_222": [ + "Vulnerability Scanning" + ], + "vuln_web_files_225": [ + "Vulnerability Scanning" + ], + "vuln_web_files_226": [ + "Vulnerability Scanning" + ], + "vuln_web_files_227": [ + "Vulnerability Scanning" + ], + "vuln_web_files_229": [ + "Vulnerability Scanning" + ], + "vuln_web_files_23": [ + "Vulnerability Scanning" + ], + "vuln_web_files_230": [ + "Vulnerability Scanning" + ], + "vuln_web_files_231": [ + "Vulnerability Scanning" + ], + "vuln_web_files_233": [ + "Vulnerability Scanning" + ], + "vuln_web_files_234": [ + "Vulnerability Scanning" + ], + "vuln_web_files_235": [ + "Vulnerability Scanning" + ], + "vuln_web_files_237": [ + "Vulnerability Scanning" + ], + "vuln_web_files_238": [ + "Vulnerability Scanning" + ], + "vuln_web_files_240": [ + "Vulnerability Scanning" + ], + "vuln_web_files_243": [ + "Vulnerability Scanning" + ], + "vuln_web_files_246": [ + "Vulnerability Scanning" + ], + "vuln_web_files_247": [ + "Vulnerability Scanning" + ], + "vuln_web_files_250": [ + "Vulnerability Scanning" + ], + "vuln_web_files_251": [ + "Vulnerability Scanning" + ], + "vuln_web_files_252": [ + "Vulnerability Scanning" + ], + "vuln_web_files_254": [ + "Vulnerability Scanning" + ], + "vuln_web_files_255": [ + "Vulnerability Scanning" + ], + "vuln_web_files_258": [ + "Vulnerability Scanning" + ], + "vuln_web_files_259": [ + "Vulnerability Scanning" + ], + "vuln_web_files_26": [ + "Vulnerability Scanning" + ], + "vuln_web_files_260": [ + "Vulnerability Scanning" + ], + "vuln_web_files_261": [ + "Vulnerability Scanning" + ], + "vuln_web_files_262": [ + "Vulnerability Scanning" + ], + "vuln_web_files_267": [ + "Vulnerability Scanning" + ], + "vuln_web_files_269": [ + "Vulnerability Scanning" + ], + "vuln_web_files_27": [ + "Vulnerability Scanning" + ], + "vuln_web_files_270": [ + "Vulnerability Scanning" + ], + "vuln_web_files_271": [ + "Vulnerability Scanning" + ], + "vuln_web_files_276": [ + "Vulnerability Scanning" + ], + "vuln_web_files_277": [ + "Vulnerability Scanning" + ], + "vuln_web_files_278": [ + "Vulnerability Scanning" + ], + "vuln_web_files_279": [ + "Vulnerability Scanning" + ], + "vuln_web_files_28": [ + "Vulnerability Scanning" + ], + "vuln_web_files_281": [ + "Vulnerability Scanning" + ], + "vuln_web_files_282": [ + "Vulnerability Scanning" + ], + "vuln_web_files_283": [ + "Vulnerability Scanning" + ], + "vuln_web_files_284": [ + "Vulnerability Scanning" + ], + "vuln_web_files_285": [ + "Vulnerability Scanning" + ], + "vuln_web_files_286": [ + "Vulnerability Scanning" + ], + "vuln_web_files_287": [ + "Vulnerability Scanning" + ], + "vuln_web_files_288": [ + "Vulnerability Scanning" + ], + "vuln_web_files_289": [ + "Vulnerability Scanning" + ], + "vuln_web_files_29": [ + "Vulnerability Scanning" + ], + "vuln_web_files_291": [ + "Vulnerability Scanning" + ], + "vuln_web_files_292": [ + "Vulnerability Scanning" + ], + "vuln_web_files_294": [ + "Vulnerability Scanning" + ], + "vuln_web_files_295": [ + "Vulnerability Scanning" + ], + "vuln_web_files_297": [ + "Vulnerability Scanning" + ], + "vuln_web_files_30": [ + "Vulnerability Scanning" + ], + "vuln_web_files_300": [ + "Vulnerability Scanning" + ], + "vuln_web_files_301": [ + "Vulnerability Scanning" + ], + "vuln_web_files_302": [ + "Vulnerability Scanning" + ], + "vuln_web_files_303": [ + "Vulnerability Scanning" + ], + "vuln_web_files_304": [ + "Vulnerability Scanning" + ], + "vuln_web_files_306": [ + "Vulnerability Scanning" + ], + "vuln_web_files_307": [ + "Vulnerability Scanning" + ], + "vuln_web_files_308": [ + "Vulnerability Scanning" + ], + "vuln_web_files_310": [ + "Vulnerability Scanning" + ], + "vuln_web_files_311": [ + "Vulnerability Scanning" + ], + "vuln_web_files_312": [ + "Vulnerability Scanning" + ], + "vuln_web_files_313": [ + "Vulnerability Scanning" + ], + "vuln_web_files_316": [ + "Vulnerability Scanning" + ], + "vuln_web_files_320": [ + "Vulnerability Scanning" + ], + "vuln_web_files_321": [ + "Vulnerability Scanning" + ], + "vuln_web_files_322": [ + "Vulnerability Scanning" + ], + "vuln_web_files_323": [ + "Vulnerability Scanning" + ], + "vuln_web_files_324": [ + "Vulnerability Scanning" + ], + "vuln_web_files_331": [ + "Vulnerability Scanning" + ], + "vuln_web_files_333": [ + "Vulnerability Scanning" + ], + "vuln_web_files_336": [ + "Vulnerability Scanning" + ], + "vuln_web_files_337": [ + "Vulnerability Scanning" + ], + "vuln_web_files_338": [ + "Vulnerability Scanning" + ], + "vuln_web_files_34": [ + "Vulnerability Scanning" + ], + "vuln_web_files_341": [ + "Vulnerability Scanning" + ], + "vuln_web_files_344": [ + "Vulnerability Scanning" + ], + "vuln_web_files_345": [ + "Vulnerability Scanning" + ], + "vuln_web_files_348": [ + "Vulnerability Scanning" + ], + "vuln_web_files_349": [ + "Vulnerability Scanning" + ], + "vuln_web_files_350": [ + "Vulnerability Scanning" + ], + "vuln_web_files_351": [ + "Vulnerability Scanning" + ], + "vuln_web_files_352": [ + "Vulnerability Scanning" + ], + "vuln_web_files_356": [ + "Vulnerability Scanning" + ], + "vuln_web_files_36": [ + "Vulnerability Scanning" + ], + "vuln_web_files_360": [ + "Vulnerability Scanning" + ], + "vuln_web_files_362": [ + "Vulnerability Scanning" + ], + "vuln_web_files_363": [ + "Vulnerability Scanning" + ], + "vuln_web_files_369": [ + "Vulnerability Scanning" + ], + "vuln_web_files_37": [ + "Vulnerability Scanning" + ], + "vuln_web_files_372": [ + "Vulnerability Scanning" + ], + "vuln_web_files_373": [ + "Vulnerability Scanning" + ], + "vuln_web_files_374": [ + "Vulnerability Scanning" + ], + "vuln_web_files_377": [ + "Vulnerability Scanning" + ], + "vuln_web_files_378": [ + "Vulnerability Scanning" + ], + "vuln_web_files_379": [ + "Vulnerability Scanning" + ], + "vuln_web_files_38": [ + "Vulnerability Scanning" + ], + "vuln_web_files_380": [ + "Vulnerability Scanning" + ], + "vuln_web_files_387": [ + "Vulnerability Scanning" + ], + "vuln_web_files_389": [ + "Vulnerability Scanning" + ], + "vuln_web_files_39": [ + "Vulnerability Scanning" + ], + "vuln_web_files_390": [ + "Vulnerability Scanning" + ], + "vuln_web_files_392": [ + "Vulnerability Scanning" + ], + "vuln_web_files_393": [ + "Vulnerability Scanning" + ], + "vuln_web_files_395": [ + "Vulnerability Scanning" + ], + "vuln_web_files_396": [ + "Vulnerability Scanning" + ], + "vuln_web_files_397": [ + "Vulnerability Scanning" + ], + "vuln_web_files_399": [ + "Vulnerability Scanning" + ], + "vuln_web_files_40": [ + "Vulnerability Scanning" + ], + "vuln_web_files_401": [ + "Vulnerability Scanning" + ], + "vuln_web_files_402": [ + "Vulnerability Scanning" + ], + "vuln_web_files_403": [ + "Vulnerability Scanning" + ], + "vuln_web_files_404": [ + "Vulnerability Scanning" + ], + "vuln_web_files_407": [ + "Vulnerability Scanning" + ], + "vuln_web_files_409": [ + "Vulnerability Scanning" + ], + "vuln_web_files_41": [ + "Vulnerability Scanning" + ], + "vuln_web_files_412": [ + "Vulnerability Scanning" + ], + "vuln_web_files_414": [ + "Vulnerability Scanning" + ], + "vuln_web_files_415": [ + "Vulnerability Scanning" + ], + "vuln_web_files_417": [ + "Vulnerability Scanning" + ], + "vuln_web_files_419": [ + "Vulnerability Scanning" + ], + "vuln_web_files_421": [ + "Vulnerability Scanning" + ], + "vuln_web_files_422": [ + "Vulnerability Scanning" + ], + "vuln_web_files_425": [ + "Vulnerability Scanning" + ], + "vuln_web_files_427": [ + "Vulnerability Scanning" + ], + "vuln_web_files_428": [ + "Vulnerability Scanning" + ], + "vuln_web_files_429": [ + "Vulnerability Scanning" + ], + "vuln_web_files_431": [ + "Vulnerability Scanning" + ], + "vuln_web_files_432": [ + "Vulnerability Scanning" + ], + "vuln_web_files_433": [ + "Vulnerability Scanning" + ], + "vuln_web_files_434": [ + "Vulnerability Scanning" + ], + "vuln_web_files_436": [ + "Vulnerability Scanning" + ], + "vuln_web_files_437": [ + "Vulnerability Scanning" + ], + "vuln_web_files_438": [ + "Vulnerability Scanning" + ], + "vuln_web_files_440": [ + "Vulnerability Scanning" + ], + "vuln_web_files_441": [ + "Vulnerability Scanning" + ], + "vuln_web_files_443": [ + "Vulnerability Scanning" + ], + "vuln_web_files_444": [ + "Vulnerability Scanning" + ], + "vuln_web_files_445": [ + "Vulnerability Scanning" + ], + "vuln_web_files_446": [ + "Vulnerability Scanning" + ], + "vuln_web_files_447": [ + "Vulnerability Scanning" + ], + "vuln_web_files_448": [ + "Vulnerability Scanning" + ], + "vuln_web_files_451": [ + "Vulnerability Scanning" + ], + "vuln_web_files_453": [ + "Vulnerability Scanning" + ], + "vuln_web_files_454": [ + "Vulnerability Scanning" + ], + "vuln_web_files_457": [ + "Vulnerability Scanning" + ], + "vuln_web_files_458": [ + "Vulnerability Scanning" + ], + "vuln_web_files_459": [ + "Vulnerability Scanning" + ], + "vuln_web_files_462": [ + "Vulnerability Scanning" + ], + "vuln_web_files_463": [ + "Vulnerability Scanning" + ], + "vuln_web_files_466": [ + "Vulnerability Scanning" + ], + "vuln_web_files_467": [ + "Vulnerability Scanning" + ], + "vuln_web_files_472": [ + "Vulnerability Scanning" + ], + "vuln_web_files_473": [ + "Vulnerability Scanning" + ], + "vuln_web_files_474": [ + "Vulnerability Scanning" + ], + "vuln_web_files_479": [ + "Vulnerability Scanning" + ], + "vuln_web_files_480": [ + "Vulnerability Scanning" + ], + "vuln_web_files_481": [ + "Vulnerability Scanning" + ], + "vuln_web_files_482": [ + "Vulnerability Scanning" + ], + "vuln_web_files_483": [ + "Vulnerability Scanning" + ], + "vuln_web_files_484": [ + "Vulnerability Scanning" + ], + "vuln_web_files_485": [ + "Vulnerability Scanning" + ], + "vuln_web_files_486": [ + "Vulnerability Scanning" + ], + "vuln_web_files_487": [ + "Vulnerability Scanning" + ], + "vuln_web_files_488": [ + "Vulnerability Scanning" + ], + "vuln_web_files_489": [ + "Vulnerability Scanning" + ], + "vuln_web_files_492": [ + "Vulnerability Scanning" + ], + "vuln_web_files_493": [ + "Vulnerability Scanning" + ], + "vuln_web_files_494": [ + "Vulnerability Scanning" + ], + "vuln_web_files_495": [ + "Vulnerability Scanning" + ], + "vuln_web_files_496": [ + "Vulnerability Scanning" + ], + "vuln_web_files_497": [ + "Vulnerability Scanning" + ], + "vuln_web_files_50": [ + "Vulnerability Scanning" + ], + "vuln_web_files_502": [ + "Vulnerability Scanning" + ], + "vuln_web_files_503": [ + "Vulnerability Scanning" + ], + "vuln_web_files_505": [ + "Vulnerability Scanning" + ], + "vuln_web_files_508": [ + "Vulnerability Scanning" + ], + "vuln_web_files_51": [ + "Vulnerability Scanning" + ], + "vuln_web_files_510": [ + "Vulnerability Scanning" + ], + "vuln_web_files_511": [ + "Vulnerability Scanning" + ], + "vuln_web_files_514": [ + "Vulnerability Scanning" + ], + "vuln_web_files_515": [ + "Vulnerability Scanning" + ], + "vuln_web_files_518": [ + "Vulnerability Scanning" + ], + "vuln_web_files_519": [ + "Vulnerability Scanning" + ], + "vuln_web_files_52": [ + "Vulnerability Scanning" + ], + "vuln_web_files_520": [ + "Vulnerability Scanning" + ], + "vuln_web_files_521": [ + "Vulnerability Scanning" + ], + "vuln_web_files_522": [ + "Vulnerability Scanning" + ], + "vuln_web_files_524": [ + "Vulnerability Scanning" + ], + "vuln_web_files_53": [ + "Vulnerability Scanning" + ], + "vuln_web_files_530": [ + "Vulnerability Scanning" + ], + "vuln_web_files_533": [ + "Vulnerability Scanning" + ], + "vuln_web_files_535": [ + "Vulnerability Scanning" + ], + "vuln_web_files_536": [ + "Vulnerability Scanning" + ], + "vuln_web_files_538": [ + "Vulnerability Scanning" + ], + "vuln_web_files_54": [ + "Vulnerability Scanning" + ], + "vuln_web_files_540": [ + "Vulnerability Scanning" + ], + "vuln_web_files_541": [ + "Vulnerability Scanning" + ], + "vuln_web_files_542": [ + "Vulnerability Scanning" + ], + "vuln_web_files_543": [ + "Vulnerability Scanning" + ], + "vuln_web_files_546": [ + "Vulnerability Scanning" + ], + "vuln_web_files_547": [ + "Vulnerability Scanning" + ], + "vuln_web_files_548": [ + "Vulnerability Scanning" + ], + "vuln_web_files_549": [ + "Vulnerability Scanning" + ], + "vuln_web_files_55": [ + "Vulnerability Scanning" + ], + "vuln_web_files_550": [ + "Vulnerability Scanning" + ], + "vuln_web_files_551": [ + "Vulnerability Scanning" + ], + "vuln_web_files_557": [ + "Vulnerability Scanning" + ], + "vuln_web_files_559": [ + "Vulnerability Scanning" + ], + "vuln_web_files_56": [ + "Vulnerability Scanning" + ], + "vuln_web_files_560": [ + "Vulnerability Scanning" + ], + "vuln_web_files_563": [ + "Vulnerability Scanning" + ], + "vuln_web_files_564": [ + "Vulnerability Scanning" + ], + "vuln_web_files_566": [ + "Vulnerability Scanning" + ], + "vuln_web_files_57": [ + "Vulnerability Scanning" + ], + "vuln_web_files_570": [ + "Vulnerability Scanning" + ], + "vuln_web_files_572": [ + "Vulnerability Scanning" + ], + "vuln_web_files_573": [ + "Vulnerability Scanning" + ], + "vuln_web_files_574": [ + "Vulnerability Scanning" + ], + "vuln_web_files_576": [ + "Vulnerability Scanning" + ], + "vuln_web_files_58": [ + "Vulnerability Scanning" + ], + "vuln_web_files_581": [ + "Vulnerability Scanning" + ], + "vuln_web_files_582": [ + "Vulnerability Scanning" + ], + "vuln_web_files_586": [ + "Vulnerability Scanning" + ], + "vuln_web_files_587": [ + "Vulnerability Scanning" + ], + "vuln_web_files_588": [ + "Vulnerability Scanning" + ], + "vuln_web_files_589": [ + "Vulnerability Scanning" + ], + "vuln_web_files_59": [ + "Vulnerability Scanning" + ], + "vuln_web_files_590": [ + "Vulnerability Scanning" + ], + "vuln_web_files_593": [ + "Vulnerability Scanning" + ], + "vuln_web_files_595": [ + "Vulnerability Scanning" + ], + "vuln_web_files_596": [ + "Vulnerability Scanning" + ], + "vuln_web_files_598": [ + "Vulnerability Scanning" + ], + "vuln_web_files_601": [ + "Vulnerability Scanning" + ], + "vuln_web_files_602": [ + "Vulnerability Scanning" + ], + "vuln_web_files_603": [ + "Vulnerability Scanning" + ], + "vuln_web_files_605": [ + "Vulnerability Scanning" + ], + "vuln_web_files_607": [ + "Vulnerability Scanning" + ], + "vuln_web_files_61": [ + "Vulnerability Scanning" + ], + "vuln_web_files_615": [ + "Vulnerability Scanning" + ], + "vuln_web_files_616": [ + "Vulnerability Scanning" + ], + "vuln_web_files_618": [ + "Vulnerability Scanning" + ], + "vuln_web_files_619": [ + "Vulnerability Scanning" + ], + "vuln_web_files_620": [ + "Vulnerability Scanning" + ], + "vuln_web_files_623": [ + "Vulnerability Scanning" + ], + "vuln_web_files_624": [ + "Vulnerability Scanning" + ], + "vuln_web_files_625": [ + "Vulnerability Scanning" + ], + "vuln_web_files_626": [ + "Vulnerability Scanning" + ], + "vuln_web_files_627": [ + "Vulnerability Scanning" + ], + "vuln_web_files_628": [ + "Vulnerability Scanning" + ], + "vuln_web_files_629": [ + "Vulnerability Scanning" + ], + "vuln_web_files_63": [ + "Vulnerability Scanning" + ], + "vuln_web_files_630": [ + "Vulnerability Scanning" + ], + "vuln_web_files_631": [ + "Vulnerability Scanning" + ], + "vuln_web_files_637": [ + "Vulnerability Scanning" + ], + "vuln_web_files_64": [ + "Vulnerability Scanning" + ], + "vuln_web_files_641": [ + "Vulnerability Scanning" + ], + "vuln_web_files_642": [ + "Vulnerability Scanning" + ], + "vuln_web_files_643": [ + "Vulnerability Scanning" + ], + "vuln_web_files_644": [ + "Vulnerability Scanning" + ], + "vuln_web_files_645": [ + "Vulnerability Scanning" + ], + "vuln_web_files_648": [ + "Vulnerability Scanning" + ], + "vuln_web_files_649": [ + "Vulnerability Scanning" + ], + "vuln_web_files_65": [ + "Vulnerability Scanning" + ], + "vuln_web_files_651": [ + "Vulnerability Scanning" + ], + "vuln_web_files_652": [ + "Vulnerability Scanning" + ], + "vuln_web_files_655": [ + "Vulnerability Scanning" + ], + "vuln_web_files_656": [ + "Vulnerability Scanning" + ], + "vuln_web_files_659": [ + "Vulnerability Scanning" + ], + "vuln_web_files_662": [ + "Vulnerability Scanning" + ], + "vuln_web_files_663": [ + "Vulnerability Scanning" + ], + "vuln_web_files_664": [ + "Vulnerability Scanning" + ], + "vuln_web_files_667": [ + "Vulnerability Scanning" + ], + "vuln_web_files_668": [ + "Vulnerability Scanning" + ], + "vuln_web_files_67": [ + "Vulnerability Scanning" + ], + "vuln_web_files_671": [ + "Vulnerability Scanning" + ], + "vuln_web_files_675": [ + "Vulnerability Scanning" + ], + "vuln_web_files_676": [ + "Vulnerability Scanning" + ], + "vuln_web_files_677": [ + "Vulnerability Scanning" + ], + "vuln_web_files_678": [ + "Vulnerability Scanning" + ], + "vuln_web_files_679": [ + "Vulnerability Scanning" + ], + "vuln_web_files_68": [ + "Vulnerability Scanning" + ], + "vuln_web_files_682": [ + "Vulnerability Scanning" + ], + "vuln_web_files_685": [ + "Vulnerability Scanning" + ], + "vuln_web_files_686": [ + "Vulnerability Scanning" + ], + "vuln_web_files_688": [ + "Vulnerability Scanning" + ], + "vuln_web_files_689": [ + "Vulnerability Scanning" + ], + "vuln_web_files_690": [ + "Vulnerability Scanning" + ], + "vuln_web_files_691": [ + "Vulnerability Scanning" + ], + "vuln_web_files_692": [ + "Vulnerability Scanning" + ], + "vuln_web_files_693": [ + "Vulnerability Scanning" + ], + "vuln_web_files_698": [ + "Vulnerability Scanning" + ], + "vuln_web_files_7": [ + "Vulnerability Scanning" + ], + "vuln_web_files_700": [ + "Vulnerability Scanning" + ], + "vuln_web_files_701": [ + "Vulnerability Scanning" + ], + "vuln_web_files_703": [ + "Vulnerability Scanning" + ], + "vuln_web_files_708": [ + "Vulnerability Scanning" + ], + "vuln_web_files_71": [ + "Vulnerability Scanning" + ], + "vuln_web_files_711": [ + "Vulnerability Scanning" + ], + "vuln_web_files_716": [ + "Vulnerability Scanning" + ], + "vuln_web_files_717": [ + "Vulnerability Scanning" + ], + "vuln_web_files_718": [ + "Vulnerability Scanning" + ], + "vuln_web_files_719": [ + "Vulnerability Scanning" + ], + "vuln_web_files_72": [ + "Vulnerability Scanning" + ], + "vuln_web_files_721": [ + "Vulnerability Scanning" + ], + "vuln_web_files_722": [ + "Vulnerability Scanning" + ], + "vuln_web_files_725": [ + "Vulnerability Scanning" + ], + "vuln_web_files_726": [ + "Vulnerability Scanning" + ], + "vuln_web_files_727": [ + "Vulnerability Scanning" + ], + "vuln_web_files_728": [ + "Vulnerability Scanning" + ], + "vuln_web_files_729": [ + "Vulnerability Scanning" + ], + "vuln_web_files_73": [ + "Vulnerability Scanning" + ], + "vuln_web_files_730": [ + "Vulnerability Scanning" + ], + "vuln_web_files_735": [ + "Vulnerability Scanning" + ], + "vuln_web_files_736": [ + "Vulnerability Scanning" + ], + "vuln_web_files_737": [ + "Vulnerability Scanning" + ], + "vuln_web_files_739": [ + "Vulnerability Scanning" + ], + "vuln_web_files_74": [ + "Vulnerability Scanning" + ], + "vuln_web_files_742": [ + "Vulnerability Scanning" + ], + "vuln_web_files_744": [ + "Vulnerability Scanning" + ], + "vuln_web_files_745": [ + "Vulnerability Scanning" + ], + "vuln_web_files_746": [ + "Vulnerability Scanning" + ], + "vuln_web_files_749": [ + "Vulnerability Scanning" + ], + "vuln_web_files_75": [ + "Vulnerability Scanning" + ], + "vuln_web_files_750": [ + "Vulnerability Scanning" + ], + "vuln_web_files_756": [ + "Vulnerability Scanning" + ], + "vuln_web_files_757": [ + "Vulnerability Scanning" + ], + "vuln_web_files_759": [ + "Vulnerability Scanning" + ], + "vuln_web_files_760": [ + "Vulnerability Scanning" + ], + "vuln_web_files_761": [ + "Vulnerability Scanning" + ], + "vuln_web_files_765": [ + "Vulnerability Scanning" + ], + "vuln_web_files_766": [ + "Vulnerability Scanning" + ], + "vuln_web_files_767": [ + "Vulnerability Scanning" + ], + "vuln_web_files_769": [ + "Vulnerability Scanning" + ], + "vuln_web_files_77": [ + "Vulnerability Scanning" + ], + "vuln_web_files_772": [ + "Vulnerability Scanning" + ], + "vuln_web_files_775": [ + "Vulnerability Scanning" + ], + "vuln_web_files_776": [ + "Vulnerability Scanning" + ], + "vuln_web_files_779": [ + "Vulnerability Scanning" + ], + "vuln_web_files_780": [ + "Vulnerability Scanning" + ], + "vuln_web_files_782": [ + "Vulnerability Scanning" + ], + "vuln_web_files_784": [ + "Vulnerability Scanning" + ], + "vuln_web_files_786": [ + "Vulnerability Scanning" + ], + "vuln_web_files_787": [ + "Vulnerability Scanning" + ], + "vuln_web_files_789": [ + "Vulnerability Scanning" + ], + "vuln_web_files_790": [ + "Vulnerability Scanning" + ], + "vuln_web_files_792": [ + "Vulnerability Scanning" + ], + "vuln_web_files_793": [ + "Vulnerability Scanning" + ], + "vuln_web_files_795": [ + "Vulnerability Scanning" + ], + "vuln_web_files_799": [ + "Vulnerability Scanning" + ], + "vuln_web_files_800": [ + "Vulnerability Scanning" + ], + "vuln_web_files_803": [ + "Vulnerability Scanning" + ], + "vuln_web_files_804": [ + "Vulnerability Scanning" + ], + "vuln_web_files_805": [ + "Vulnerability Scanning" + ], + "vuln_web_files_806": [ + "Vulnerability Scanning" + ], + "vuln_web_files_807": [ + "Vulnerability Scanning" + ], + "vuln_web_files_809": [ + "Vulnerability Scanning" + ], + "vuln_web_files_810": [ + "Vulnerability Scanning" + ], + "vuln_web_files_811": [ + "Vulnerability Scanning" + ], + "vuln_web_files_813": [ + "Vulnerability Scanning" + ], + "vuln_web_files_814": [ + "Vulnerability Scanning" + ], + "vuln_web_files_815": [ + "Vulnerability Scanning" + ], + "vuln_web_files_817": [ + "Vulnerability Scanning" + ], + "vuln_web_files_818": [ + "Vulnerability Scanning" + ], + "vuln_web_files_819": [ + "Vulnerability Scanning" + ], + "vuln_web_files_821": [ + "Vulnerability Scanning" + ], + "vuln_web_files_822": [ + "Vulnerability Scanning" + ], + "vuln_web_files_824": [ + "Vulnerability Scanning" + ], + "vuln_web_files_825": [ + "Vulnerability Scanning" + ], + "vuln_web_files_826": [ + "Vulnerability Scanning" + ], + "vuln_web_files_827": [ + "Vulnerability Scanning" + ], + "vuln_web_files_829": [ + "Vulnerability Scanning" + ], + "vuln_web_files_831": [ + "Vulnerability Scanning" + ], + "vuln_web_files_832": [ + "Vulnerability Scanning" + ], + "vuln_web_files_833": [ + "Vulnerability Scanning" + ], + "vuln_web_files_834": [ + "Vulnerability Scanning" + ], + "vuln_web_files_836": [ + "Vulnerability Scanning" + ], + "vuln_web_files_838": [ + "Vulnerability Scanning" + ], + "vuln_web_files_839": [ + "Vulnerability Scanning" + ], + "vuln_web_files_84": [ + "Vulnerability Scanning" + ], + "vuln_web_files_840": [ + "Vulnerability Scanning" + ], + "vuln_web_files_842": [ + "Vulnerability Scanning" + ], + "vuln_web_files_843": [ + "Vulnerability Scanning" + ], + "vuln_web_files_844": [ + "Vulnerability Scanning" + ], + "vuln_web_files_846": [ + "Vulnerability Scanning" + ], + "vuln_web_files_847": [ + "Vulnerability Scanning" + ], + "vuln_web_files_848": [ + "Vulnerability Scanning" + ], + "vuln_web_files_850": [ + "Vulnerability Scanning" + ], + "vuln_web_files_851": [ + "Vulnerability Scanning" + ], + "vuln_web_files_852": [ + "Vulnerability Scanning" + ], + "vuln_web_files_853": [ + "Vulnerability Scanning" + ], + "vuln_web_files_854": [ + "Vulnerability Scanning" + ], + "vuln_web_files_855": [ + "Vulnerability Scanning" + ], + "vuln_web_files_856": [ + "Vulnerability Scanning" + ], + "vuln_web_files_857": [ + "Vulnerability Scanning" + ], + "vuln_web_files_858": [ + "Vulnerability Scanning" + ], + "vuln_web_files_859": [ + "Vulnerability Scanning" + ], + "vuln_web_files_862": [ + "Vulnerability Scanning" + ], + "vuln_web_files_863": [ + "Vulnerability Scanning" + ], + "vuln_web_files_864": [ + "Vulnerability Scanning" + ], + "vuln_web_files_866": [ + "Vulnerability Scanning" + ], + "vuln_web_files_868": [ + "Vulnerability Scanning" + ], + "vuln_web_files_869": [ + "Vulnerability Scanning" + ], + "vuln_web_files_87": [ + "Vulnerability Scanning" + ], + "vuln_web_files_871": [ + "Vulnerability Scanning" + ], + "vuln_web_files_873": [ + "Vulnerability Scanning" + ], + "vuln_web_files_878": [ + "Vulnerability Scanning" + ], + "vuln_web_files_879": [ + "Vulnerability Scanning" + ], + "vuln_web_files_881": [ + "Vulnerability Scanning" + ], + "vuln_web_files_882": [ + "Vulnerability Scanning" + ], + "vuln_web_files_885": [ + "Vulnerability Scanning" + ], + "vuln_web_files_886": [ + "Vulnerability Scanning" + ], + "vuln_web_files_887": [ + "Vulnerability Scanning" + ], + "vuln_web_files_89": [ + "Vulnerability Scanning" + ], + "vuln_web_files_892": [ + "Vulnerability Scanning" + ], + "vuln_web_files_893": [ + "Vulnerability Scanning" + ], + "vuln_web_files_895": [ + "Vulnerability Scanning" + ], + "vuln_web_files_896": [ + "Vulnerability Scanning" + ], + "vuln_web_files_897": [ + "Vulnerability Scanning" + ], + "vuln_web_files_898": [ + "Vulnerability Scanning" + ], + "vuln_web_files_9": [ + "Vulnerability Scanning" + ], + "vuln_web_files_90": [ + "Vulnerability Scanning" + ], + "vuln_web_files_900": [ + "Vulnerability Scanning" + ], + "vuln_web_files_901": [ + "Vulnerability Scanning" + ], + "vuln_web_files_902": [ + "Vulnerability Scanning" + ], + "vuln_web_files_903": [ + "Vulnerability Scanning" + ], + "vuln_web_files_904": [ + "Vulnerability Scanning" + ], + "vuln_web_files_905": [ + "Vulnerability Scanning" + ], + "vuln_web_files_907": [ + "Vulnerability Scanning" + ], + "vuln_web_files_91": [ + "Vulnerability Scanning" + ], + "vuln_web_files_910": [ + "Vulnerability Scanning" + ], + "vuln_web_files_911": [ + "Vulnerability Scanning" + ], + "vuln_web_files_912": [ + "Vulnerability Scanning" + ], + "vuln_web_files_913": [ + "Vulnerability Scanning" + ], + "vuln_web_files_915": [ + "Vulnerability Scanning" + ], + "vuln_web_files_916": [ + "Vulnerability Scanning" + ], + "vuln_web_files_917": [ + "Vulnerability Scanning" + ], + "vuln_web_files_918": [ + "Vulnerability Scanning" + ], + "vuln_web_files_92": [ + "Vulnerability Scanning" + ], + "vuln_web_files_920": [ + "Vulnerability Scanning" + ], + "vuln_web_files_922": [ + "Vulnerability Scanning" + ], + "vuln_web_files_923": [ + "Vulnerability Scanning" + ], + "vuln_web_files_924": [ + "Vulnerability Scanning" + ], + "vuln_web_files_925": [ + "Vulnerability Scanning" + ], + "vuln_web_files_926": [ + "Vulnerability Scanning" + ], + "vuln_web_files_927": [ + "Vulnerability Scanning" + ], + "vuln_web_files_929": [ + "Vulnerability Scanning" + ], + "vuln_web_files_932": [ + "Vulnerability Scanning" + ], + "vuln_web_files_934": [ + "Vulnerability Scanning" + ], + "vuln_web_files_935": [ + "Vulnerability Scanning" + ], + "vuln_web_files_936": [ + "Vulnerability Scanning" + ], + "vuln_web_files_937": [ + "Vulnerability Scanning" + ], + "vuln_web_files_939": [ + "Vulnerability Scanning" + ], + "vuln_web_files_94": [ + "Vulnerability Scanning" + ], + "vuln_web_files_941": [ + "Vulnerability Scanning" + ], + "vuln_web_files_943": [ + "Vulnerability Scanning" + ], + "vuln_web_files_945": [ + "Vulnerability Scanning" + ], + "vuln_web_files_947": [ + "Vulnerability Scanning" + ], + "vuln_web_files_948": [ + "Vulnerability Scanning" + ], + "vuln_web_files_949": [ + "Vulnerability Scanning" + ], + "vuln_web_files_95": [ + "Vulnerability Scanning" + ], + "vuln_web_files_950": [ + "Vulnerability Scanning" + ], + "vuln_web_files_951": [ + "Vulnerability Scanning" + ], + "vuln_web_files_954": [ + "Vulnerability Scanning" + ], + "vuln_web_files_955": [ + "Vulnerability Scanning" + ], + "vuln_web_files_957": [ + "Vulnerability Scanning" + ], + "vuln_web_files_958": [ + "Vulnerability Scanning" + ], + "vuln_web_files_959": [ + "Vulnerability Scanning" + ], + "vuln_web_files_96": [ + "Vulnerability Scanning" + ], + "vuln_web_files_960": [ + "Vulnerability Scanning" + ], + "vuln_web_files_962": [ + "Vulnerability Scanning" + ], + "vuln_web_files_964": [ + "Vulnerability Scanning" + ], + "vuln_web_files_966": [ + "Vulnerability Scanning" + ], + "vuln_web_files_967": [ + "Vulnerability Scanning" + ], + "vuln_web_files_968": [ + "Vulnerability Scanning" + ], + "vuln_web_files_969": [ + "Vulnerability Scanning" + ], + "vuln_web_files_97": [ + "Vulnerability Scanning" + ], + "vuln_web_files_973": [ + "Vulnerability Scanning" + ], + "vuln_web_files_978": [ + "Vulnerability Scanning" + ], + "vuln_web_files_979": [ + "Vulnerability Scanning" + ], + "vuln_web_files_980": [ + "Vulnerability Scanning" + ], + "vuln_web_files_981": [ + "Vulnerability Scanning" + ], + "vuln_web_files_982": [ + "Vulnerability Scanning" + ], + "vuln_web_files_984": [ + "Vulnerability Scanning" + ], + "vuln_web_files_985": [ + "Vulnerability Scanning" + ], + "vuln_web_files_986": [ + "Vulnerability Scanning" + ], + "vuln_web_files_988": [ + "Vulnerability Scanning" + ], + "vuln_web_files_989": [ + "Vulnerability Scanning" + ], + "vuln_web_files_99": [ + "Vulnerability Scanning" + ], + "vuln_web_files_990": [ + "Vulnerability Scanning" + ], + "vuln_web_files_993": [ + "Vulnerability Scanning" + ], + "vuln_web_files_995": [ + "Vulnerability Scanning" + ], + "vuln_web_files_996": [ + "Vulnerability Scanning" + ], + "vuln_web_files_997": [ + "Vulnerability Scanning" + ], + "vuln_web_files_998": [ + "Vulnerability Scanning" + ], + "vuln_web_filesacb6": [ + "Vulnerability Scanning" + ], + "vuln_web_filex_fast_reg_0": [ + "Vulnerability Scanning" + ], + "vuln_web_filex_fast_reg_1": [ + "Vulnerability Scanning" + ], + "xpath_injeciton_regex_0": [ + "Path Traversal" + ], + "xpath_injeciton_regex_1": [ + "Path Traversal" + ], + "xpath_injeciton_regex_2": [ + "Path Traversal" + ], + "xpath_injeciton_regex_3": [ + "Path Traversal" + ], + "xpath_injeciton_regex_4": [ + "Path Traversal" + ], + "xpath_injection671f": [ + "Path Traversal" + ], + "xpath_injection_regex_0": [ + "Path Traversal" + ], + "xpath_injection_regex_1": [ + "Path Traversal" + ], + "xpath_injection_regex_2": [ + "Path Traversal" + ], + "xpath_injection_regex_3": [ + "Path Traversal" + ], + "xss_html_cmds_high_acuracy2d26": [ + "Cross Site Scripting" + ], + "xss_html_cmds_high_acuracy3bfa": [ + "Cross Site Scripting" + ], + "xss_html_special": [ + "Cross Site Scripting" + ], + "xss_html_special0c79": [ + "Cross Site Scripting" + ], + "xss_html_special0e69": [ + "Cross Site Scripting" + ], + "xss_html_special171d": [ + "Cross Site Scripting" + ], + "xss_html_special1720": [ + "Cross Site Scripting" + ], + "xss_html_special27db": [ + "Cross Site Scripting" + ], + "xss_html_special31d4": [ + "Cross Site Scripting" + ], + "xss_html_special3ba9": [ + "Cross Site Scripting" + ], + "xss_html_special47b3": [ + "Cross Site Scripting" + ], + "xss_html_special4a8e": [ + "Cross Site Scripting" + ], + "xss_html_special4f36": [ + "Cross Site Scripting" + ], + "xss_html_special64b9": [ + "Cross Site Scripting" + ], + "xss_html_special6675": [ + "Cross Site Scripting" + ], + "xss_html_special6763": [ + "Cross Site Scripting" + ], + "xss_html_special6dda": [ + "Cross Site Scripting" + ], + "xss_html_special7168": [ + "Cross Site Scripting" + ], + "xss_html_special7b2e": [ + "Cross Site Scripting" + ], + "xss_html_special8338": [ + "Cross Site Scripting" + ], + "xss_html_special8524": [ + "Cross Site Scripting" + ], + "xss_html_special883e": [ + "Cross Site Scripting" + ], + "xss_html_special8893": [ + "Cross Site Scripting" + ], + "xss_html_special8a9f": [ + "Cross Site Scripting" + ], + "xss_html_special91ee": [ + "Cross Site Scripting" + ], + "xss_html_special94dc": [ + "Cross Site Scripting" + ], + "xss_html_special99fb": [ + "Cross Site Scripting" + ], + "xss_html_special_0": [ + "Cross Site Scripting" + ], + "xss_html_special_1": [ + "Cross Site Scripting" + ], + "xss_html_special_12": [ + "Cross Site Scripting" + ], + "xss_html_special_13": [ + "Cross Site Scripting" + ], + "xss_html_special_15": [ + "Cross Site Scripting" + ], + "xss_html_special_16": [ + "Cross Site Scripting" + ], + "xss_html_special_17": [ + "Cross Site Scripting" + ], + "xss_html_special_18": [ + "Cross Site Scripting" + ], + "xss_html_special_19": [ + "Cross Site Scripting" + ], + "xss_html_special_2": [ + "Cross Site Scripting" + ], + "xss_html_special_20": [ + "Cross Site Scripting" + ], + "xss_html_special_21": [ + "Cross Site Scripting" + ], + "xss_html_special_22": [ + "Cross Site Scripting" + ], + "xss_html_special_23": [ + "Cross Site Scripting" + ], + "xss_html_special_26": [ + "Cross Site Scripting" + ], + "xss_html_special_28": [ + "Cross Site Scripting" + ], + "xss_html_special_3": [ + "Cross Site Scripting" + ], + "xss_html_special_31": [ + "Cross Site Scripting" + ], + "xss_html_special_33": [ + "Cross Site Scripting" + ], + "xss_html_special_34": [ + "Cross Site Scripting" + ], + "xss_html_special_35": [ + "Cross Site Scripting" + ], + "xss_html_special_37": [ + "Cross Site Scripting" + ], + "xss_html_special_38": [ + "Cross Site Scripting" + ], + "xss_html_special_4": [ + "Cross Site Scripting" + ], + "xss_html_special_40": [ + "Cross Site Scripting" + ], + "xss_html_special_41": [ + "Cross Site Scripting" + ], + "xss_html_special_44": [ + "Cross Site Scripting" + ], + "xss_html_special_45": [ + "Cross Site Scripting" + ], + "xss_html_special_46": [ + "Cross Site Scripting" + ], + "xss_html_special_50": [ + "Cross Site Scripting" + ], + "xss_html_special_51": [ + "Cross Site Scripting" + ], + "xss_html_special_55": [ + "Cross Site Scripting" + ], + "xss_html_special_56": [ + "Cross Site Scripting" + ], + "xss_html_special_59": [ + "Cross Site Scripting" + ], + "xss_html_special_6": [ + "Cross Site Scripting" + ], + "xss_html_special_60": [ + "Cross Site Scripting" + ], + "xss_html_special_61": [ + "Cross Site Scripting" + ], + "xss_html_special_63": [ + "Cross Site Scripting" + ], + "xss_html_special_64": [ + "Cross Site Scripting" + ], + "xss_html_special_9": [ + "Cross Site Scripting" + ], + "xss_html_speciala329": [ + "Cross Site Scripting" + ], + "xss_html_speciala3af": [ + "Cross Site Scripting" + ], + "xss_html_speciala652": [ + "Cross Site Scripting" + ], + "xss_html_speciala9ba": [ + "Cross Site Scripting" + ], + "xss_html_specialb0c1": [ + "Cross Site Scripting" + ], + "xss_html_specialb902": [ + "Cross Site Scripting" + ], + "xss_html_specialba96": [ + "Cross Site Scripting" + ], + "xss_html_specialbe34": [ + "Cross Site Scripting" + ], + "xss_html_specialc12a": [ + "Cross Site Scripting" + ], + "xss_html_specialc3dd": [ + "Cross Site Scripting" + ], + "xss_html_specialc80e": [ + "Cross Site Scripting" + ], + "xss_html_specialcb24": [ + "Cross Site Scripting" + ], + "xss_html_speciald37a": [ + "Cross Site Scripting" + ], + "xss_html_speciald85b": [ + "Cross Site Scripting" + ], + "xss_html_specialdd4a": [ + "Cross Site Scripting" + ], + "xss_html_specialdec0": [ + "Cross Site Scripting" + ], + "xss_html_specialf1c4": [ + "Cross Site Scripting" + ], + "xss_html_specialfca1": [ + "Cross Site Scripting" + ], + "xss_html_specialfcc5": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy0ec1": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy11aa": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy2968": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy2c91": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy2d32": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy32c9": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy356c": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy3c13": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy5422": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy5d04": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy5e70": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy7058": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy7463": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy7f39": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_0": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_1": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_10": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_100": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_101": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_102": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_103": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_104": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_105": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_11": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_12": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_13": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_14": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_15": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_16": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_17": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_18": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_19": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_2": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_20": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_21": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_22": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_23": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_24": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_25": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_26": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_27": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_28": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_29": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_3": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_30": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_31": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_32": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_33": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_34": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_35": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_36": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_37": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_38": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_39": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_4": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_40": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_41": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_42": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_43": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_44": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_45": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_46": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_47": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_48": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_49": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_5": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_50": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_51": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_52": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_53": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_54": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_55": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_56": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_57": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_58": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_59": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_6": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_60": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_61": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_62": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_63": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_64": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_65": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_66": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_67": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_68": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_69": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_7": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_70": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_71": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_72": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_73": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_74": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_75": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_76": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_77": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_78": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_79": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_8": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_80": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_81": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_82": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_83": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_84": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_85": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_86": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_87": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_88": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_89": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_9": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_90": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_91": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_92": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_93": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_94": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_95": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_96": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_97": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_98": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracy_99": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracya34b": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracyaadf": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracybe83": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracyd0d4": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracydd7f": [ + "Cross Site Scripting" + ], + "xss_html_tags_high_acuracye36b": [ + "Cross Site Scripting" + ], + "xxe": [ + "XML External Entity" + ], + "xxe_0": [ + "XML External Entity" + ], + "xxe_1": [ + "XML External Entity" + ], + "xxe_2": [ + "XML External Entity" + ], + "xxe_3": [ + "XML External Entity" + ] + }, + "binary_data_kw_filter": "encoded.*|.*ev_fast_reg.*|.*fast_reg_evasion.*|ldap_injection_regex.*|code_execution_fast_reg.*|xpath_injeciton_regex.*|xpath_injection_regex.*|regex_code_execution.*|os_cmd_sep_medium_acuracy.*|high_acuracy_fast_reg_xss.*|regex_high_acuracy_crlf_inj.*|regex_postfix.*|url_scanning.*|ssti_fast_reg.*|os_cmd_high_acuracy_fast_reg.*|regex_xss.*|general_injection_regex.*|regex_sqli.*|vuln_os_dirs.*|sqli_medium_acuracy.*|sqli_fast_reg_0", + "comment_ev_pattern": "\\/\\/.*[\\r\\n]+", + "false_keywords": [ + "=", + "&", + "/www", + "http" + ], + "false_patterns_re_list": [ + "(?P\\w+=\\w+\\&)", + "(?P(^(http://[\\w\\.\\d\\\\/\\=\\-\\?\\&\\%]*)))" + ], + "filter_parameters": { + "cql": [ + "=", + "and", + "probing", + "quotes_ev_fast_reg_2", + "regex_postfix_1", + "regex_sqli_17", + "regex_sqli_22", + ">", + "regex_postfix_0", + "config.", + "function_name_bypass_regex_0", + "\"" + ], + "currentJql": [ + "\"", + "=", + "and", + "regex_postfix_0", + "regex_sqli_17", + "regex_sqli_22", + "regex_postfix_1", + "or", + "os_cmd_high_acuracy_fast_reg_0", + "quotes_ev_fast_reg_2", + "regex_sqli_26" + ], + "description": [ + "#", + "*", + "/card", + "and", + "comment_ev_fast_reg_0", + "create", + "encoded_\\r\\n", + "os_cmd_high_acuracy_fast_reg_3", + "quotes_ev_fast_reg_4", + "repetition", + "ssti_fast_reg_4", + "|", + "&", + "document." + ], + "jql": [ + "=", + "and", + "or", + "regex_postfix_0", + "\"", + "code_execution_fast_reg_0", + "os_cmd_high_acuracy_fast_reg_0", + "regex_postfix_0", + "regex_sqli_17", + "regex_sqli_22", + "regex_sqli_26", + "quotes_ev_fast_reg_2", + "regex_postfix_1" + ], + "nfeedJql": [ + "\"", + "=", + "and", + "regex_postfix_0", + "regex_sqli_17", + "regex_sqli_22", + "regex_postfix_1", + "or", + "os_cmd_high_acuracy_fast_reg_0", + "quotes_ev_fast_reg_2", + "regex_sqli_26" + ], + "rows.dimensions.include": [ + "*", + "].", + "code_execution_fast_reg_0", + "quotes_ev_fast_reg_4", + "ssti_fast_reg_4" + ], + "unrenderedMarkup": [ + "#", + "*", + "/card", + "and", + "comment_ev_fast_reg_0", + "create", + "encoded_\\n", + "os_cmd_high_acuracy_fast_reg_3", + "quotes_ev_fast_reg_4", + "repetition", + "ssti_fast_reg_4", + "|", + "\"", + "&", + "/file", + "/site", + "all", + "quotes_ev_fast_reg_2", + "null", + ".exe", + "null," + ] + }, + "format_magic_binary_re": "^%PDF|^PK\\x03\\x04|^FORM\\x00|^PACK|^RIFF|^GIF8[79]a|^\\xFF\\xD8\\xFF|^\\x89PNG\\x0D\\x0A\\x1A\\x0A", + "format_types_regex_list": { + "administration_config": "((?> |(\\d{1,3}\\.){3}\\d{1,3})(?!\\w).{0,100}?){6}", + "ampersand_delimiter": "^(?>.{1,100}?&){2,}", + "asterisk_delimiter": "^(?>.{1,100}?\\*){2,}", + "comma_delimiter": "^(?>.{1,100}?,){2,}", + "free_text": "((?<=^|\\s)(?>the|be|to|of|an|your|that|have|had|i(?>'m)?|it(?>'s)?|on|he(?>'s)?|you(?>'re)?|we(>?'re)|at|but|his|they|we|she(?>'s)|says?|will|my|one|would|there|was|were|are|what|how|when)(?>\\s|$)[\\w\\s\\.,:'!\\?]*?){2,}", + "html_input": "(<\\/?(?>div|li|ul|tr|th|p|table|body|html|title|h[1-6]|input|img|head|label|button|br|hr|a)\\b.*?>(?>.|[\\r\\n]){0,400}?){2}", + "local_file_path": "^((/?([\\w_\\-\\.]+/)+([\\w_\\-\\.]+\\.[a-zA-Z]{1,5}\\d*))|((([A-Za-z]:\\\\)|\\\\?)([\\w_\\-\\.]+\\\\)+([\\w_\\-\\.]+\\.[a-zA-Z]{1,5}\\d*)))$", + "long_random_text": "[^\\s]{40,}+", + "pipes": "^(?>.{1,100}?\\|){2,}", + "semicolon_delimiter": "^(?>.{1,100}?;){2,}", + "urls": "https?://([\\w\\.\\\\\\-_~\\%=?,]*/){3,}" + }, + "global_ignored": { + "keys": [ + "all", + "and", + "or", + "from", + "null" + ], + "patterns": [] + }, + "good_header_name_re": "^\\s?[\\[\\]\\w\\-]*$", + "good_header_value_re": "(^[\\w\\-\\s\\.s]*$|^(([wW]\\/)?(\\,?\\s?\"[^\"]+\")+|\\*)$|^(,?\\s?[\\w\\-]+\\s*=\\s*[\\w\\-\\.]+)+$|^[\\w\\/\\.\\-\\:]+$)", + "headers_re": { + "accept": "^(?>((?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*)\\/?){1,3}(?>=(?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*))?|(?>[,;]((?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*)\\/?){1,3}(?>=(?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*))?))+$", + "accept-charset": "^(?>((?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*)\\/?){1,3}(?>=(?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*))?|(?>[,;]((?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*)\\/?){1,3}(?>=(?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*))?))+$", + "accept-encoding": "^(?>((?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*)\\/?){1,3}(?>=(?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*))?|(?>[,;]((?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*)\\/?){1,3}(?>=(?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*))?))+$", + "accept-language": "^(?>((?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*)\\/?){1,3}(?>=(?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*))?|(?>[,;]((?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*)\\/?){1,3}(?>=(?>\\s*(?>\\*|[A-Za-z\\-_+][\\w\\-_+.]*|\\d+(?>\\.\\d+)?|\\.\\d+)\\s*))?))+$", + "cache-control": "^([\\w\\-\\=]|, ?)+$", + "content-type": "^[\\w\\-]+(/[\\w\\-]+)?(; ?[\\w\\-]+=[\\w\\-_\\.]+)*$", + "forwarded": ".*", + "from": "^[\\w\\(\\)\\.]+$", + "host": "^([\\d\\.:]+|[\\w/\\.\\-]+)*$", + "if-match": "^(([wW]\\/)?(\\,?\\s?\"[^\"]+\")+|\\*)$", + "if-modified-since": "^[\\w\\s,\\-\\:]+$", + "if-none-match": "^(([wW]\\/)?(\\,?\\s?\"[^\"]+\")+|\\*)$", + "if-range": "(^[\\w\\s,\\-\\:]+$|^(([wW]\\/)?(\\,?\\s?\"[^\"]+\")+|\\*)$)", + "if-unmodified-since": "^[\\w\\s,\\-\\:]+$", + "intervention": "^<(https?|[\\w\\-]+app):\\/\\/[\\w\\.\\/\\-]+(:\\d+\\/)?[\\w\\.\\?=&%\\-]*>;\\s*\\w+=[\\\\\\\"\\w]+$", + "last-modified": "^[\\w\\s,\\-\\:]+$", + "origin": "^https?://[\\w\\./]+$", + "range": "^[\\w\\-\\=]+$", + "referer": "^https?://.*", + "sec-ch-ua": "^(\\s*\".+?\"\\s*;\\s*v=\"\\d+(\\.\\d+)?\",?)+\\s*$", + "sec-ch-ua-full-version": "^\\d(\\.\\d)*$", + "singularityheader": "^(?:(?:[\\w\\-_]+=[\\w\\-_\\|\\?/:]+)\\*)+(?:[\\w\\-_]+=[\\w\\-_\\|\\?/:]+)$", + "surrogate-capability": ".*", + "te": "^\\s*(compress|deflate|gzip|trailers)|(\\s*;\\s*q=[0,1](\\.\\d{1,3})*)$", + "unless-modified-since": "^[\\w\\s,\\-\\:]+$", + "user-agent": "^(([\\w\\/\\@\\-\\,\\s\\/;\\+]|(\\.[^\\.])|(\\.$)|(:[\\/\\\\]{2})|(:[^\\/\\\\]));?|\\s|\\((\\*\\s*\\d+|[\\w@;:~\"\\{\\}#\\=\\+\\s\\(\\)\\/\\.\\,\\-?])+\\)|\\[[\\(\\)\\w\\/;\\.,\\&\\-\\.\\#\\s{=}:]+\\])*$", + "via": "^(([\\w\\/\\@\\-\\,\\s\\/;\\+]|(\\.[^\\.])|(\\.$)|(:[\\/\\\\]{2})|(:[^\\/\\\\]));?|\\s|\\((\\*\\s*\\d+|[\\w@;:~\"\\{\\}#\\=\\+\\s\\(\\)\\/\\.\\,\\-?])+\\)|\\[[\\(\\)\\w\\/;\\.,\\&\\-\\.\\#\\s{=}:]+\\])*$", + "x-fb-flow-capture": "^[\\w\\=<>]+$", + "x-forwarded-for": "^(,?\\s?([\\d\\.]+|[\\w:]+))+$", + "x-logsourceip": "^(,?\\s?([\\d\\.]+|[\\w:]+))+$", + "x-operamini-features": "^(\\s*\\w+\\s*,)+(\\s*\\w+\\s*)+$", + "x-operamini-phone": ".*", + "x-operamini-phone-ua": "^(([\\w\\/\\@\\-\\,\\s\\/;\\+]|(\\.[^\\.])|(\\.$)|(:[\\/\\\\]{2})|(:[^\\/\\\\]));?|\\s|\\((\\*\\s*\\d+|[\\w@;:~\"\\{\\}#\\=\\+\\s\\(\\)\\/\\.\\,\\-?])+\\)|\\[[\\(\\)\\w\\/;\\.,\\&\\-\\.\\#\\s{=}:]+\\])*$", + "x-ucbrowser-ua": "^(\\w+\\(([\\s\\w\\*\\+\\-\\/\\.\\,\\'\\\"\\(\\)\\[\\]]*?)\\);)+$" + }, + "ignored_for_headers": { + "keys": [ + ";", + "code_execution_fast_reg_0", + "|", + "all", + "and", + "or", + "from", + "null" + ], + "patterns": [ + "--", + "=", + ";", + "&", + "/", + "|", + "os_cmd_sep_medium_acuracy", + "code_execution_fast_reg_0" + ], + "regex": "^$" + }, + "ignored_for_nospace_long_value": [ + "--", + "=", + ";", + "&", + "/" + ], + "ignored_for_url": { + "keys": [ + "--", + "&", + "/wp", + "/admin", + "/upload", + "/includes/", + "character_encoding", + "/uploads", + "/cgibin", + "/home", + "all", + "and", + "or", + "from", + "null" + ], + "patterns": [ + "regex_sqli_14" + ], + "regex": "^[\\w/_\\-\\&]+((\\.(js|css|woff|woff2|json|html|jpeg|png))|/)$" + }, + "longtext_re": "\\w{16,}|(\\.(jpg|jpeg|png|gif)$)", + "pattern_regex_list": [ + "(?P=\\s*('|\")\\w+)", + "(?P\\w+\\[\\s*['\"\\w]+\\s*\\]\\s*\\()", + "(?P<\\w+\\/)", + "(?P\\(\\s*\\w+\\s*=\\s*\\w+\\s*\\w+\\*?\\s*\\))", + "(?P[,\\)]\\s*null)", + "(?P\\(\\s*(userpassword|surname|name|cn|sn|objectclass|mail|givenname|commonname)(?!\\w))", + "(?Psrc=\\s*\\w)", + "(?P(backup|db|dump|htdocs|home|html|data|backup|database|setup|install|localhost|backup|wordpress|blog|admin|eshop|admin|store|m|mariadb|mage|1)[\\w\\-~\\.]*\\.(rar|zip|tar|sql|7z|zip|gz|bak|config|connect|old|cfg))", + "(?P/\\w+\\s*(:|\\())", + "(?Psys\\.[\\w]+\\s*\\()", + "(?P:\\s*\\w+\\s*\\()", + "(?P\\w+\\s*:\\s*(expression|url)\\s*\\()", + "(?P^[^[\\[]+\\]\\s*,.*\\[[^\\]]+$)", + "(?Plike\\s['\"][^'\"]*$)", + "(?P(limit|offset)\\s+\\d+)", + "(?P^[\\d\\s+\\'\\)\";]+or\\s)", + "(?P(?/\\w+\\s*\\[)", + "(?P^[\\w\\s]*('|\"|;|\\|\\&)+\\s+(and|or|having))", + "(?Pcase\\s*when\\s+\\w+)", + "(?Padmin\\s*\\*)", + "(?Punion[\\w\\s]+select[\\w\\s]+from[\\w\\s]+)", + "(?P^[\\w\\s]*('|\"|;|\\|\\&)+\\s)", + "(?Pselect.*(,\\w+).*from.*where)", + "(?P\\[\\s*\\w+[\\(<>=!])", + "(?P<(script|img|iframe)[^>]*[a-z]*(src|on\\w+)\\s*=)", + "(?P@\\s*\\*)", + "(?P\\w*\\s*=\\s*\\w*\\*)", + "(?P\\(\\s*/)", + "(?P(\\)|\\(|\\*)\\s*(\\(|\\||\\%))", + "(?P\\r\\n\\w+\\s*:\\s)", + "(?P/book\\[[\\d\"'])", + "(?P\\s(and|or|union)\\s.*([\\);'\"\\|]{2,}|--|/\\*|#))", + "(?Pinsert\\s+into\\s+\\w)", + "(?P('|\"|\\);)\\s*--')", + "(?Pfunction\\s+[^\\s]+\\s*\\()", + "(?Pcontent-length.*\\r\\n\\r\\n.*<)", + "(?P\\s(waitfor|delay)\\s.*\\d+:\\d+:\\d+)", + "(?P\\\\r\\\\n\\w+\\s*:\\s)", + "(?P\\[\\s*'eval'\\s*\\])", + "(?Pexec\\s*cmd=\\s*('.*'|\".*\"))", + "(?Punion\\s*(all\\s*)?select)", + "(?P(=|or|and|select|union|rlike|like|waitfor|having|null|is|limit|offset|order|by|all|case|when)\\s*//)", + "(?P[)&|;`]+\\s*\\w+\\s*(\\-\\w|http|ftp|file|\\.*\\/))", + "(?P\\[\\s*@)", + "(?Pwaitfor[\\s+]delay[\\s+][\"']\\d+:\\d:\\d+[\"'])", + "(?P^\\w+\\s*,\\s*\"[^\\\\\"]*\"\\s*:[\\w_\"]+$)", + "(?P(and|\\||\\&|\\|\\||\\&\\&)\\s*\\d+\\s*=)", + "(?P\\{[^\"']*\\()", + "(?P^[\\.\\-\\w\\^\\']+\\s*union\\s*select)", + "(?Pcontent-length.*\\\\r\\\\n\\\\r\\\\n.*<)", + "(?Pnull\\s*[,\\)])", + "(?P(\\d{1,3}\\.){3}\\d{1,3})", + "(?P('|\"|\\)|;|\\||\\&)+\\s*(and|\\||\\&|\\|\\||\\&\\&|or|having|order\\s+by)\\s)", + "(?P\\)\\s*=\\s*[\\w'\"])", + "(?P\\/\\s*\\@)", + "(?P\\([^\\)]+\\$[^\\)]+\\)\\s*\\()", + "(?P[\\/\\\\](?:[?p][?s]|[?i][?d]|[?l][?s]|[?l][?l]|[?l][?a]|[?t][?r]|[?s][?h]|[?w][?c])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?w][?m][?l]|[?w][?e][?b]|[?o][?p][?t]|[?b][?i][?n]|[?l][?o][?g]|[?c][?a][?t]|[?p][?w][?d]|[?a][?w][?k]|[?c][?g][?i]|[?e][?t][?c]|[?s][?e][?d]|[?v][?a][?r]|[?t][?m][?p]|[?l][?i][?b]|[?u][?s][?r]|[?d][?i][?r])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?s][?o][?r][?t]|[?h][?t][?t][?p]|[?l][?e][?s][?s]|[?s][?e][?l][?f]|[?c][?u][?r][?l]|[?c][?o][?n][?f]|[?l][?o][?g][?s]|[?d][?a][?s][?h]|[?p][?r][?o][?c]|[?.][?e][?x][?e]|[?p][?a][?t][?h]|[?b][?a][?s][?h]|[?.][?d][?l][?l]|[?p][?i][?n][?g]|[?m][?a][?i][?l]|[?e][?c][?h][?o]|[?w][?g][?e][?t])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?p][?i][?n][?g][?6]|[?l][?o][?c][?a][?l]|[?s][?h][?a][?r][?e]|[?u][?n][?a][?m][?e]|[?w][?i][?n][?n][?t]|[?h][?o][?s][?t][?s]|[?n][?e][?t][?s][?h])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?s][?h][?a][?d][?o][?w]|[?b][?a][?c][?k][?u][?p]|[?w][?e][?b][?a][?c][?c]|[?w][?h][?o][?a][?m][?i]|[?m][?a][?s][?t][?e][?r]|[?e][?x][?p][?o][?r][?t]|[?$][?s][?h][?e][?l][?l]|[?p][?a][?s][?s][?w][?d]|[?s][?y][?s][?t][?e][?m])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?w][?i][?n][?.][?i][?n][?i]|[?t][?r][?a][?c][?e][?r][?t]|[?w][?w][?w][?r][?o][?o][?t]|[?n][?e][?t][?s][?t][?a][?t]|[?w][?i][?n][?d][?o][?w][?s]|[?i][?n][?e][?t][?p][?u][?b]|[?e][?n][?v][?i][?r][?o][?n]|[?o][?p][?e][?n][?s][?s][?l])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?n][?e][?t][? ][?v][?i][?e][?w]|[?n][?s][?l][?o][?o][?k][?u][?p]|[?i][?p][?c][?o][?n][?f][?i][?g]|[?i][?f][?c][?o][?n][?f][?i][?g]|[?p][?a][?s][?s][?w][?o][?r][?d]|[?h][?o][?s][?t][?n][?a][?m][?e]|[?b][?o][?o][?t][?.][?i][?n][?i]|[?n][?e][?t][? ][?u][?s][?e][?r])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?a][?l][?l][?c][?f][?g][?c][?o][?n][?v]|[?t][?r][?a][?c][?e][?r][?o][?u][?t][?e]|[?l][?o][?c][?a][?l][?g][?r][?o][?u][?p])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?d][?e][?s][?k][?t][?o][?p][?.][?i][?n][?i]|[?t][?r][?a][?c][?e][?r][?o][?u][?t][?e][?6])(?=[^\\w?<>:]|$))", + "(?P[\\/\\\\](?:[?n][?e][?t][?s][?h][? ][?f][?i][?r][?e][?w][?a][?l][?l])(?=[^\\w?<>:]|$))", + "(?P\\\\?['\"](system|echo|exit|bck|eval|benchmark|pgsleep|attr|class|request|subclasses|class|writefile|getpath|getruntime|exec|clearconfig|setcache|loadtemplate|getfilter|ex|config|sum|convert|concat|ascii|randomblob|elt|like|sha|rand|lower|substring|upper|count|gethostaddress|username|isnull|varchar|nvarchar|nchar|sleep|nameconst|unhex|hex|version|basedecode|loadfile|systemuser|hash|extractvalue|cast|avg|case|user|reverse|min|gtidsubset|updatexml|updatexml|hashbytes|database|informationschema|sys|database|user|groupconcat|dbo|md|extractvalue|master|sysmessages|this|conf|exe|ini|function|alert|char|pregreplace|sleep|body|appendchild|createelement|self|document|components|lookupmethod|window|location|catch|hash|constructor|constructor|parent|ownerdocument|alert|execscript|slice|expression|setinterval|top|find|history|forward|url|settimeout|back|prompt|msgbox|javascriptval|phpinfo|eval|popen|execute|vardump|func|mid|len|isnumeric|passthru|system|include|basename|realpath|moveuploadedfile|printr|sprintf|fopen|require|copy|readfile|tempnam|touch|assert|fileputcontents|exec|filegetcontents|fileputcontents|unserialize|requireonce|popen|createfunction|strrev|function|die|basedecode|arraymap|chr|pregreplace|isset|fread|strreplace|calluserfunc|ord|decode|request|getparameter|fileoutputstream|application|getrealpath|response|write|getbytes|setcookie|res|end|readdirsync|tostring|serialize|phpuname|phpversion|array|thread|join|valueof|length|writeln|decodeuri|navigate|reflect|open|set)\\\\?['\"])", + "(?Pprintf\\s+['\"\"])", + "(?P\\w+\\s*\\[\\s*\\$)", + "(?P\\(\\s*exec\\s*\\))", + "(?P\\w+\\s*=\\s*<%)", + "(?P\\)\\s*\\(\\s*\"\\w+\"\\s*\\))", + "(?P^\\s*\\.\\s*return)", + "(?P-?\\d+(\\.\\d+)?\\s+(or|and|\\||\\&|\\|\\||\\&\\&|having)(\\s*not\\s*)?\\s+-?\\d+(\\.\\d+)?\\s*(!|=|<|>|is))", + "(?P(['\"]|\\d)\\s+(and|\\||\\&|\\|\\||\\&\\&|or|having)(\\s*not\\s*)?\\s+[\"']\\w+[\"']\\s*(=|is))", + "(?P^\\s*(and|\\||\\&|\\|\\||\\&\\&|or|having)(\\s*not\\s*)?\\s*\\d+\\s*([^\\w\\s]+|$))", + "(?P^\\s*(and|\\||\\&|\\|\\||\\&\\&|or|having)(\\s*not\\s*)?.*is\\s*?(not\\s*)null)", + "(?P(\\s(and|\\||\\&|\\|\\||\\&\\&|or|having)|\\^)(\\s*not\\s*)?\\s+([\"'\\.\\-_\\(\\),\\w]+)\\s*([=%>&<+\\-\\!\\|]+|(like|rlike))[\\w\\s])", + "(?P(and|\\||\\&|\\|\\||\\&\\&|or|having)(\\s*not\\s*)?\\s+\\w+\\s*\\()", + "(?P('|and|\\||\\&|\\|\\||\\&\\&|or|having)(\\s*not\\s*)?.*select\\s+(.*,){3,}.*(from|[\\);'\"\\|]{2,}|--|/\\*|#))", + "(?P\\s(and|\\||\\&|\\|\\||\\&\\&|or|having|order\\s+by)(\\s*not\\s*)?\\s[\\s\\w\\(\\)]*([\\);'\"\\|]{2,}|--|\\/\\*|#))", + "(?P(and|or)(\\s*not\\s*)?\\s+('|\"))", + "(?Pselect[\\w\\s\\-\\.\\^\\@~]+from)", + "(?P^\\s*\\w+\\s*[<>]+\\s*\\w+\\s*$)", + "(?P'\\s+(and|\\||\\&|\\|\\||\\&\\&)(\\s*not\\s*)?\\s+'[^']+'\\s*([=\\!]+|like|rlike)\\s*')", + "(?Por\\s+(\\s*not\\s*)?\\d+(\\.\\d+)?\\s*[=<>]+\\s*\\d+(\\.\\d+)?)", + "(?Pselect\\s*@)", + "(?Pdeclare\\s*@)", + "(?P^\\d(\\^\\w+)*\\s*(and|\\||\\&|\\|\\||\\&\\&|or|having)(\\s*not\\s*)?\\s*\\w$)", + "(?P[^\\w]on(canplaythrough|help|show|layoutcomplete|beforeeditfocus|move|focus|medialoadfailed|ended|toggle|pointerout|afterprint|selectstart|beforepaste|mediaslip|loadend|cut|transitionstart|durationchange|volumechange|rowsinserted|aftercopy|stalled|mouseout|input|focusin|cuechange|seeking|datasetcomplete|stop|keydown|mousemove|resizestart|webkitanimationstart|movestart|offline|beforeupdate|pointerrawupdate|dragenter|seek|drop|hashchange|transitionrun|beforedeactivate|loadedmetadata|pointerenter|beforescriptexecute|loadeddata|activate|animationstart|rowdelete|rowexit|begin|bounce|selectionchange|repeat|resizeend|webkittransitionend|dragover|close|pointermove|losecapture|animationiteration|pagehide|webkitanimationiteration|deactivate|keypress|fullscreenchange|waiting|blur|progress|dragleave|touchend|animationend|resume|undo|pointerdown|pause|trackchange|beforeactivate|change|search|seeksegmenttime|mediacomplete|reverse|canplay|mediaerror|textinput|load|suspend|datasetchanged|emptied|auxclick|beforeprint|dragstart|rowsdelete|message|redo|transitionend|select|timeupdate|seeked|paste|propertychange|submit|seeksegmenttime|start|dragdrop|syncrestored|errorupdate|mouseenter|pageshow|pointerup|outofsync|copy|resize|reset|ratechange|unload|dataavailable|rowsexit|popstate|rowsenter|error|rowenter|animationcancel|moveend|transitioncancel|focusout|mouseup|controlselect|abort|resync|unhandledrejection|urlflip|beforeunload|webkitanimationend|cellchange|end|touchstart|loadstart|keyup|beforecopy|invalid|click|readystatechange|touchmove|afteractivate|online|urlflip|wheel|play|finish|mousewheel|scriptcommand|filterchange|storage|drag|mousedown|timeerror|beforecut|pointerover|mouseleave|rowinserted|contextmenu|afterscriptexecute|scroll|pointerleave|dragend|dblclick|afterupdate|mouseover|playing|mozfullscreenchange)\\s*=)", + "(?Padmin\" #)" + ], + "precondition_keys": [ + "", + "\n", + "\r", + " ", + "!", + "!!", + "!![]", + "\"", + "\"=\"", + "\"username\"", + "#", + "$", + "$*", + "$@", + "$_cookie[", + "$_files", + "$_get", + "$_get[", + "$_post[", + "$_request[", + "$_server[", + "$comment", + "$env{", + "$http_get_vars[", + "$php_md5", + "$query", + "$shell", + "$where", + "${", + "%", + "%25c0%25ae%25c0%25ae/", + "%>", + "%env", + "%u22", + "%uefc8", + "%uf025", + "%uff0e", + "&", + "r", + "<", + "<", + "<", + "t", + "<", + "", + "e", + "<", + "l", + " ", + " ", + "<", + "", + "e", + "'", + "'--", + "'80040e", + "';", + "'='", + "'or", + "'username'", + "'||", + "(", + ")", + ");/", + ");id;", + ");id|", + ")|/", + ")|id", + ")|id;", + "*", + "*/", + "+acj-", + "+ad4apb-", + "+ad7-", + "+adz-", + ",", + ",null", + "-", + "--", + ".", + ".7z", + ".bak", + ".cfg", + ".cobalt", + ".config", + ".connect", + ".gz", + ".inc", + ".old", + ".rar", + ".sql", + ".tar", + ".zip", + "/", + "/%c0%ae", + "/%c0%ae%c0%ae", + "/%c0%ae%c0%ae/", + "/*", + "/**/", + "//filter/", + "/3tvars", + "/4iv9", + "/5vkmc", + "/5ytus", + "/?", + "/_showjavartdetails", + "/_showpooldetails", + "/a_domlog", + "/a_security", + "/acart2_0", + "/access", + "/access-options", + "/account", + "/accounts", + "/active", + "/addalink", + "/addcontent", + "/adovbs", + "/aedating4cms", + "/aedatingcms", + "/aexp2", + "/aexp2b", + "/aexp3", + "/aexp4", + "/aexp4b", + "/agentrunner", + "/ains_main", + "/alog", + "/amprops", + "/analyse", + "/anything", + "/apage", + "/apzufu", + "/architext_query", + "/args", + "/attach", + "/attrib", + "/auth_user_file", + "/author", + "/authors", + "/awebvisit", + "/awstats", + "/backup", + "/ban", + "/basilix", + "/bc4j", + "/bdir", + "/bdjra5dcb", + "/beaninfo", + "/bigconf", + "/billing", + "/bin", + "/biztalkhttpreceive", + "/blah-whatever", + "/blah-whatever-badfile", + "/blahb", + "/bookmark", + "/books", + "/botinfs", + "/bots", + "/buddies", + "/buddy", + "/buddylist", + "/buffer", + "/buffer2", + "/buffer4", + "/busytime", + "/calendar", + "/carbo", + "/carello", + "/cartcart", + "/catalog", + "/ccbill", + "/cersvr", + "/certa", + "/certlog", + "/certsrv", + "/cf-sinfo", + "/cfcache", + "/cfcexplorer", + "/cfdocs", + "/cfgwiz", + "/cfmlsyntaxcheck", + "/cgi", + "/cgi-sys/cgiecho", + "/cgi-sys/countedit", + "/cgichkmasterpwd", + "/cgimail", + "/chatlog", + "/chetcpasswd", + "/chkvol", + "/clbusy", + "/cldbdir", + "/clients", + "/clusta4", + "/clusterframe", + "/cnf_gi", + "/code", + "/codebrw", + "/collect4", + "/com", + "/com_minibb", + "/command", + "/convert", + "/copy", + "/countdown", + "/counter", + "/cpa", + "/cphost", + "/cplogfile", + "/cpshost", + "/cschatrbox", + "/csguestbook", + "/cslivesupport", + "/csnews", + "/cte", + "/ctguestb", + "/cthzrcbsobmimq", + "/ctss", + "/customerdata", + "/da", + "/dadentries", + "/dan_o", + "/db", + "/db2000", + "/dba4", + "/dbconnect", + "/dbprod2_prod", + "/dclf", + "/deasappdesign", + "/deaslog", + "/deaslog0", + "/deaslog02", + "/deaslog03", + "/deaslog04", + "/deaslog05", + "/decsadm", + "/decsdoc", + "/decslog", + "/deesadmin", + "/delete", + "/deptodoc", + "/desktop", + "/detail", + "/details", + "/diag_dbtest", + "/displayopenedfile", + "/doladmin", + "/dols_help", + "/domadmin", + "/domcfg", + "/domguide", + "/domlog", + "/dpnecentral", + "/dpnepolicyservice", + "/dsn", + "/dsnform", + "/dspug", + "/duxqcmbiq", + "/dvwssr", + "/dwssap", + "/e7uo7v7d", + "/easylog", + "/ecxotaping", + "/eipc", + "/english", + "/entropybanner", + "/entropysearch", + "/env", + "/environ", + "/etc", + "/etc/passwd", + "/evaluate", + "/event", + "/events", + "/events4", + "/events5", + "/exprcalc", + "/ext", + "/extends", + "/extends2", + "/ezadmin", + "/ezboard", + "/fastjsdata", + "/fck_flash", + "/fck_image", + "/fck_link", + "/fcring", + "/fdir", + "/file-that-is-not-real-2002", + "/fileexists", + "/filetime", + "/form_results", + "/formmail-clone", + "/forms5", + "/forum", + "/fp30reg", + "/fpadmcgi", + "/fpcount", + "/fpremadm", + "/fpsrvadm", + "/ftayrbj", + "/funhist", + "/generalchassisconfig", + "/get_od_toc", + "/getdrvrs", + "/getfile", + "/getrend", + "/getservers", + "/gettempdirectory", + "/getvars", + "/getwhen", + "/glist", + "/gm-2-b2", + "/gozila", + "/group", + "/groups", + "/gwweb", + "/haffzeqgulj", + "/hellouser", + "/help4", + "/help5_admin", + "/help5_client", + "/help5_designer", + "/helpadmin", + "/helpdesk", + "/helplt4", + "/hidden", + "/hits", + "/hnvyuzwaqq", + "/hosts", + "/htpasswd", + "/hywsrkdlyfhyrb", + "/i8ya5llb0qb", + "/icoduserguide", + "/id", + "/iisadmpwd", + "/imadminlogon", + "/import", + "/internet", + "/intersl", + "/ip_password_result", + "/ism", + "/ixmail_netattach", + "/javapg", + "/jdkrqnotify", + "/jluwpkdfrgvwfs", + "/jotter", + "/judy_tech_book", + "/judysort", + "/junk", + "/junk988", + "/junk999", + "/junk_nonexistant", + "/kbccv", + "/kbnv", + "/kbssvv", + "/krkiuwjugrom", + "/kywndbrexogmih", + "/l_domlog", + "/lancard", + "/lancgi", + "/lang", + "/language", + "/lccon", + "/lcgitest", + "/lcon", + "/ldap", + "/ldhpsaoeanyd", + "/learn-msg", + "/leiadm", + "/leilog", + "/leivlt", + "/lib", + "/license", + "/link", + "/linkinfo", + "/local", + "/lpt9", + "/lsxlc", + "/lygmasbkidzlu/cgi-bin", + "/mab", + "/main", + "/mainframeset", + "/manage", + "/master", + "/mbox-list", + "/mchat", + "/md", + "/mdefre8m4ml", + "/member_log", + "/metacart", + "/middle_help_intro", + "/midicart", + "/migrate", + "/mime", + "/motd", + "/mountain", + "/mpcsoftweb_guestdata", + "/msdwda", + "/msg", + "/mtatbls", + "/mtstore", + "/musicqueue", + "/mysql", + "/names", + "/nbxovzsmbguzvznzzqpiu", + "/nd00000", + "/nd000000", + "/nd000002", + "/nd000003", + "/nd000004", + "/ndslogin", + "/ndsobj", + "/netbasic", + "/netdetector", + "/netpanzer", + "/newdsn", + "/newpro", + "/news", + "/nikto", + "/nikto-test-7zpdybyd", + "/nikto-test-bgl4esul", + "/nikto-test-ksa8x6xq", + "/nikto-test-ons", + "/nikto-test-ttjw6", + "/nntppost", + "/no-such-file", + "/notes", + "/npn_admn", + "/npn_rn", + "/nsmanager", + "/ntp_primer", + "/ntsync4", + "/ntsync45", + "/nul", + "/null", + "/obwupzwyakykba", + "/oder", + "/oem", + "/ofscan", + "/okjdkewqqdobah/cgi-bin", + "/onrequestend", + "/openfile", + "/openview5", + "/opt", + "/order", + "/order_log", + "/order_log_v", + "/orders", + "/ovlaunch", + "/ovlogin", + "/owa_util", + "/pagedouble", + "/pageimport2", + "/pageiserrorpage", + "/pageutil", + "/parse_xml", + "/passgen", + "/passwd", + "/passwdfile", + "/password", + "/passwords", + "/payload_encoding_call4", + "/payload_encoding_fnstenv", + "/payload_encoding_jmp_call", + "/pbserver", + "/people", + "/perl/printenv", + "/perweb", + "/pfzozrh", + "/pitc_ag", + "/planning_superdome_configs", + "/ppzcljsmvsnzwofqxug", + "/pqbopmnkhoxsisdh", + "/pqjgjw", + "/print", + "/private", + "/probe", + "/proc", + "/pt_config", + "/ptg_upgrade_pkg", + "/pubfld", + "/public", + "/qfullhit", + "/qpadmin", + "/qstart50", + "/qsumrhit", + "/query", + "/queryhit", + "/quikstore", + "/randhtml", + "/rd", + "/rdprocess", + "/reademail", + "/realhelpdesk", + "/realsignup", + "/registry", + "/release-msg", + "/ren", + "/reports", + "/reports/ndrqm", + "/reports/yumjnuzv", + "/repqof", + "/rhhvengt26x6rh", + "/rpc", + "/rtm", + "/rvbshld", + "/rvdhe880gl", + "/sam", + "/sample/site3w4646", + "/schema50", + "/secret", + "/self", + "/send", + "/sendemail", + "/sendmail", + "/service", + "/services", + "/session", + "/session/admnlogin", + "/set", + "/setpasswd", + "/setsecurity", + "/shadow", + "/share", + "/shop", + "/shopper", + "/shopping300", + "/shopping400", + "/shtml", + "/simple", + "/site", + "/site_searcher", + "/sitemap", + "/skbvqsy", + "/slist", + "/smadmin", + "/smbcfg", + "/smconf", + "/smency", + "/smg_smxcfg30", + "/smhelp", + "/smmsg", + "/smquar", + "/smsolar", + "/smtime", + "/smtp", + "/smtpibwq", + "/smtpobwq", + "/smtptbls", + "/smvlog", + "/snmpviewer", + "/snoop", + "/soapconfig", + "/software", + "/source", + "/spywall", + "/sqljdemo", + "/sqlnet", + "/srchadm", + "/srvinst", + "/srvnam", + "/ss", + "/sscd_suncourier", + "/stat", + "/stat_what", + "/statmail", + "/statrep", + "/stats", + "/statusmap", + "/stauths", + "/stautht", + "/stconf", + "/stconfig", + "/stdnaset", + "/stdomino", + "/stlog", + "/streg", + "/stsrc", + "/svacl", + "/svcacl", + "/syxwptffnnuyexftov", + "/tmp", + "/today", + "/toolbar", + "/tovvjrbwrdrpmonx", + "/tqmm8", + "/trace", + "/tradecli", + "/trends", + "/tstisapi", + "/turwwwwhhm", + "/type", + "/url", + "/usebean", + "/usr", + "/uurfnmhfhvtn", + "/uygv2i3lv6ij", + "/var", + "/vfolder", + "/viewexample", + "/volscgi", + "/vpuserinfo", + "/vwchqjxorzitbm", + "/vxvm_ag", + "/vxvm_hwnotes", + "/vxvm_ig", + "/vxvm_mig", + "/vxvm_notes", + "/vxvm_tshoot", + "/vxvm_ug", + "/w3proxy", + "/w3tvars", + "/welcome", + "/wfreassign", + "/wg_user-info", + "/whatever", + "/whateverwrzb", + "/whereami", + "/win", + "/windows", + "/winmsdp", + "/wksinst", + "/wml", + "/wp-config", + "/wpconfig", + "/writeto", + "/ws_ftp", + "/wwforum", + "/wwsample", + "/xagogktctnspa", + "/xsqlconfig", + "/yabb", + "/ynnwsuao", + "/yokhehviqwnn", + "/zskwhg8jniabcd", + "00relnotes", + "08a80340-06d3-11ea-9f87-0242ac11000f", + "0x", + "0x800a0bcd", + "1", + "27", + "2f", + "2guest", + "3mduh", + "45a0mzr", + "6", + "7z", + "80040e", + ":", + ";", + ";--", + ";dir", + ";id", + ";id;", + ";id|", + ";|/", + "<", + "