diff --git a/CHANGELOG b/CHANGELOG index 015fc4299b023803b9aefd950a51e0b9a6c241cd..bc4090894705a0227ac5bff2d42ad19fd358a1d9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -27,3 +27,6 @@ added files_skipped and errors, files/directories scanned lower levels 2021-12-29: changed scanner to version 2.6.5 (detects also CVE-2021-44832 RCE vulnerability for log4j 2.17.0, 2.12.3, 2.3.1) added step by step walk through for the enterprise/free edition of CMK to the HOWTO +2021-12-30: added bulk config for search path end exclude path +2022-01-02: changed scanner to version 2.7.1 + added options for syslog facility, rfc5424 syslog message format, append reporting to file diff --git a/HOWTO.md b/HOWTO.md index 32fe6b4f99386a117c73fcb643bda1455061a6d4..cae6e966de8f567af8a0b5f62c0aaad9a5ef7d2c 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -171,14 +171,14 @@ OPTIONS=--all-drives --syslog-level debug --syslog-udp checkmk --report-dir "D:\ - under *NIX check if the files are executable - look for leftovers from older versions and remove them (see next toppic) - run the scaner manually +- run the plugin manually - run the agent manually, (look for the plugin output starting with `<<<cve_2021_44228_log4j:sep(0)>>>`) -- try the plugin manually - clear the cache `sudo rm /var/lib/check_mk_agent/cache/*cve*` -- use only "Search Path"/"Drives to scan", try to exclude large volumes so the scan time comes down, if you are succesfull try aditional options step by step -- try to increase the "Scanner timeout" setting -- if there are only `*.new` files in the chache directory for the cve_2021_44228_log4j plugin, then the scanner has not finished to scan the system. +- use only _Search Path_ / _Drives to scan_, try to exclude large volumes so the scan time comes down, if you are succesfull try aditional options step by step +- look at the `Completed in xx.xx seconds` and adjust the _Scanner timeout_ setting (the scanner needs much more time in the background, so double the time) +- if there are only `*.new` files in the chache directory for the cve_2021_44228_log4j plugin, then the scanner has not finished to scan the system, maybe the timeout is still to low. -Windows cmd +Manual run of the Windows version of the pluguin (use a admin shell) ``` Microsoft Windows [Version 10.0.19042.1083] (c) Microsoft Corporation. All rights reserved. @@ -199,7 +199,7 @@ Completed in 36.59 seconds C:\> ``` -Linux shell +Manual run of the Linux version of the plugin ``` thl-cmk@checkmk:~$sudo /usr/lib/check_mk_agent/plugins/86400/cve_2021_44228_log4j.sh <<<cve_2021_44228_log4j:sep(0)>>> diff --git a/README.md b/README.md index 69600e2c098a9e071c0a8ce864fe677a808294db..6618dffb9e34cae60e72f9ef41f67a27ea2d564b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The scanner (and so the plugin) can discover the following log4j issues - [CVE-2021-45046](https://github.com/advisories/GHSA-7rjr-3q55-vv33) - [CVE-2021-44832 RCE](https://logging.apache.org/log4j/2.x/security.html) -**Note**: Included in this package is the scanner for Linux and Windows in version 2.6.3 (2021-12-27) +**Note**: Included in this package is the scanner for Linux and Windows in version 2.6.5 (2021-12-29) You will find the release notes/latest version for the logpresso scanner here [logpresso CVE-2021-44228-Scanner Releases](https://github.com/logpresso/CVE-2021-44228-Scanner/releases) @@ -24,7 +24,7 @@ To use this check you need to deploy the scanner and the plugin for your destina **Note**: If you have created (baked) a new agent package you need to redeploy the agent (automatic update/software deployment) -If you have any issues or using use the RAW edition of CMK or have a platform that is not supported by the bakery have a look at the [how to information](HOWTO.md "how to"). Thre you will also find some information whats going on under the hood. +If you have any issues or using the RAW edition of CMK or have a platform that is not supported by the bakery have a look at the [how to information](HOWTO.md "how to"). There you will also find some information whats going on under the hood. --- Check Info: diff --git a/agents/bakery/cve_2021_44228_log4j.py b/agents/bakery/cve_2021_44228_log4j.py index 9bff269369c22231ee7ad99d790d215e3d01b4ab..507abe0126696f505c0590e48e4ca1d7ddf67a8d 100755 --- a/agents/bakery/cve_2021_44228_log4j.py +++ b/agents/bakery/cve_2021_44228_log4j.py @@ -10,7 +10,9 @@ # bakery plugin for check_mk # # 2021-12-23: reworked options handling -# +# 2021-12-30: changed handling for search paths and excluded paths +# 2022-01-01: streamlined search path +# 2022-01-02: added options for syslog facility, rfc5424 syslog message format, append reporting to file from pathlib import Path from typing import List @@ -19,42 +21,56 @@ from cmk.base.cee.plugins.bakery.bakery_api.v1 import FileGenerator, OS, Plugin, def get_cve_2021_44228_log4j_files(conf: List[any]) -> FileGenerator: + options = conf[1].copy() + options_array: List = [] search_path_array: List = [] separator: str = ' ' # needs matching separator in the shell scripts - options = conf[1].copy() + exclude_paths = None + include_paths = None + config_path = '' + search_path = '' + path_separator = '' + interval = 86400 + timeout = 300 - interval = options.get('interval', 86400) - timeout = options.get('timeout', 300) + if options.get('interval'): + interval = options['interval'] + options.pop('interval') + + if options.get('timeout'): + timeout = options['timeout'] + options.pop('timeout') - search_path = '' if conf[0] == 'linux': - for path in options['search_linux']: + config_path = '/etc/check_mk/' + path_separator = '/' + elif conf[0] == 'windows': + config_path = 'C:\\ProgramData\\checkmk\\agent\\config\\' + path_separator = '\\' + + if options['search_in'] == 'all_drives': + options_array.append('--all-drives') + elif 'drives_to_scan' in options['search_in']: + label, drives_to_scan = options['search_in'] + drives_to_scan = f'--drives {",".join(drives_to_scan)}' + options_array.append(drives_to_scan) + elif 'search_paths' in options['search_in']: + label, search_path = options['search_in'] + for path in search_path: path = path.strip(' ').strip("'").strip('"') search_path_array.append(f'"{path}"') - search_path = separator.join(search_path_array) - elif conf[0] == 'windows': - if options['search_windows'] == 'all_drives': - options_array.append('--all-drives') - elif 'drives_to_scan' in options['search_windows']: - label, drives_to_scan = options['search_windows'] - drives_to_scan = f'--drives {",".join(drives_to_scan)}' - options_array.append(drives_to_scan) - elif 'search_paths' in options['search_windows']: - label, search_path = options['search_windows'] - for path in search_path: - path = path.strip(' ').strip("'").strip('"') - search_path_array.append(f'"{path}"') - search_path = separator.join(search_path) - - for path in options.get('exclude_paths', []): - path = path.strip(' ').strip("'").strip('"') - options_array.append(f'--exclude "{path}"') + search_path = separator.join(search_path) + elif 'include_paths_file' in options['search_in']: + label, include_paths = options['search_in'] + options_array.append(f'-f {config_path}cve_2021_44228_log4j_search.cfg') + options.pop('search_in') if options.get('exclude_fs'): exclude_fs = ','.join(options['exclude_fs']) options_array.append(f'--exclude-fs {exclude_fs}') + options.pop('exclude_fs') if options.get('syslog'): options_array.append(f'--syslog-level {options["syslog"].get("syslog_level", "info")}') @@ -65,13 +81,26 @@ def get_cve_2021_44228_log4j_files(conf: List[any]) -> FileGenerator: else: syslog_port = '' options_array.append(f'{syslog_server}{syslog_port}') + if options['syslog'].get('syslog_facility'): + options_array.append(f'--syslog-facility {options["syslog"]["syslog_facility"]}') + if options['syslog'].get('syslog_rfc5424'): + options_array.append(f'--rfc5424') + options.pop('syslog') if options.get('reporting'): - report_dir = options["reporting"]["report_dir"].strip(' ').strip("'").strip('"') - options_array.append(f'--report-dir "{report_dir}"') - options_array.append(options['reporting'].get('report_format', '--report-csv')) + report_dir = options['reporting']['report_dir'].strip(' ').strip("'").strip('"') + if options['reporting'].get('log_path'): + log_path = options['reporting']['log_path'] + if options['reporting'].get('report_format') == '--report-json': + options_array.append(f'--json-log-path "{report_dir}{path_separator}{log_path}"') + else: + options_array.append(f'--csv-log-path "{report_dir}{path_separator}{log_path}"') + else: + options_array.append(f'--report-dir "{report_dir}"') + options_array.append(options['reporting'].get('report_format', '--report-csv')) if options['reporting'].get('no_empty_report'): options_array.append('--no-empty-report') + options.pop('reporting') if options.get('fix_files'): backup_dir = options["fix_files"]["backup_dir"].strip(' ').strip("'").strip('"') @@ -80,22 +109,18 @@ def get_cve_2021_44228_log4j_files(conf: List[any]) -> FileGenerator: options_array.append(f'--exclude "{backup_dir}"') if options['fix_files'].get('force_fix'): options_array.append(f'--force-fix') + options.pop('fix_files') - for key in [ - 'interval', - 'timeout', - 'search_linux', - 'search_windows', - 'exclude_paths', - 'exclude_fs', - 'syslog', - 'reporting', - 'fix_files', - ]: - try: - options.pop(key) - except KeyError: - pass + if options.get('exclude_paths'): + if 'exclude_paths' in options['exclude_paths']: + label, paths = options['exclude_paths'] + for path in paths: + path = path.strip(' ').strip("'").strip('"') + options_array.append(f'--exclude "{path}"') + elif 'exclude_paths_file' in options['exclude_paths']: + label, exclude_paths = options['exclude_paths'] + options_array.append(f'--exclude-config {config_path}cve_2021_44228_log4j_exclude.cfg') + options.pop('exclude_paths') for value in options.values(): options_array.append(value) @@ -125,6 +150,22 @@ def get_cve_2021_44228_log4j_files(conf: List[any]) -> FileGenerator: include_header=True, ) + if exclude_paths: + yield PluginConfig( + base_os=OS.LINUX, + lines=[exclude_paths], + target=Path('cve_2021_44228_log4j_exclude.cfg'), + include_header=False, + ) + + if include_paths: + yield PluginConfig( + base_os=OS.LINUX, + lines=[include_paths], + target=Path('cve_2021_44228_log4j_search.cfg'), + include_header=False, + ) + elif conf[0] == 'windows': yield Plugin( base_os=OS.WINDOWS, @@ -146,6 +187,22 @@ def get_cve_2021_44228_log4j_files(conf: List[any]) -> FileGenerator: include_header=True, ) + if exclude_paths: + yield PluginConfig( + base_os=OS.WINDOWS, + lines=[exclude_paths], + target=Path('cve_2021_44228_log4j_exclude.cfg'), + include_header=False, + ) + + if include_paths: + yield PluginConfig( + base_os=OS.WINDOWS, + lines=[include_paths], + target=Path('cve_2021_44228_log4j_search.cfg'), + include_header=False, + ) + register.bakery_plugin( name='cve_2021_44228_log4j', diff --git a/agents/plugins/log4j2-scan.linux b/agents/plugins/log4j2-scan.linux index d1294f10cdaaf8ecdc93fe17af96d753cc2416e4..28cb8a40f7bf98cd6d79a9c99aa7859f5df7e59e 100755 Binary files a/agents/plugins/log4j2-scan.linux and b/agents/plugins/log4j2-scan.linux differ diff --git a/agents/plugins/log4j2-scan.windows b/agents/plugins/log4j2-scan.windows index fc5a1905b1c2c21fa92ddc5bbce82557a6287bf7..09a97bf4a5ba1bcdea3a070a72848bf7dfa5a7c2 100755 Binary files a/agents/plugins/log4j2-scan.windows and b/agents/plugins/log4j2-scan.windows differ diff --git a/cve_2021_44228_log4j.mkp b/cve_2021_44228_log4j.mkp index a17006e6d7942a3f7fe566c798cdda0c409b95f0..d28039fc1141ccccdda4e068b884adfab15f0fe2 100644 Binary files a/cve_2021_44228_log4j.mkp and b/cve_2021_44228_log4j.mkp differ diff --git a/packages/cve_2021_44228_log4j b/packages/cve_2021_44228_log4j index 5413d0f90c5e2bb7d70d7ab8bab242b659eaf645..1b55f6d8f1086bd361e56c3931090dc45ec75ca4 100644 --- a/packages/cve_2021_44228_log4j +++ b/packages/cve_2021_44228_log4j @@ -32,7 +32,7 @@ 'name': 'cve_2021_44228_log4j', 'num_files': 10, 'title': 'CVE-2021-44228-log4j scanner plugin', - 'version': '20211229.v0.0.6', + 'version': '20220103.v0.0.7', 'version.min_required': '2.0.0', 'version.packaged': '2021.09.20', 'version.usable_until': None} \ No newline at end of file diff --git a/web/plugins/wato/cve_2021_44228_log4j.py b/web/plugins/wato/cve_2021_44228_log4j.py index 2a67d23c93802f3c7babcf91d67cf6b1c950ae3e..15f707394f46d0e1571d0f9a62480c6f151487c8 100644 --- a/web/plugins/wato/cve_2021_44228_log4j.py +++ b/web/plugins/wato/cve_2021_44228_log4j.py @@ -12,6 +12,8 @@ # 2021-12.19: added WATO options scan_logback, log4j_1, no_symlink, scan_zip, silent # 2021-12-23: reworked structure for windows all-drives/drives/search path # 2021-12-27: added files_skipped and errors, files/directories scanned lower levels +# 2021-12-30: added bulk config for search path end exclude path +# 2022-01-02: added options for syslog facility, rfc5424 syslog message format, append reporting to file # from cmk.gui.i18n import _ @@ -27,6 +29,9 @@ from cmk.gui.valuespec import ( ListOfStrings, ListChoice, DropdownChoice, + TextAreaUnicode, + # FileUpload, + # UploadOrPasteTextFile, ) from cmk.gui.plugins.wato import ( @@ -36,11 +41,15 @@ from cmk.gui.plugins.wato import ( HostRulespec, ) +from cmk.gui.mkeventd import ( + syslog_facilities, +) + from cmk.gui.cee.plugins.wato.agent_bakery.rulespecs.utils import ( RulespecGroupMonitoringAgentsAgentPlugins, ) -bakery_plugin_version = '2021-12-23-0.0.1d' +bakery_plugin_version = '2022-01-02-0.0.3' ############################################################## # @@ -184,6 +193,7 @@ rulespec_registry.register( # ############################################################## + _base_options_config_fix_files = ( 'fix_files', Dictionary( @@ -198,10 +208,10 @@ _base_options_config_fix_files = ( )), ('backup_dir', TextUnicode( - title=_('Backup directory'), + title=_('Backup directory (must exist)'), help=_( 'Specify backup file path. Remember the directory must exist ' - 'and scanner must be able to write there!' + 'and the scanner must be able to write there!' ), allow_empty=False, )), @@ -304,16 +314,6 @@ _base_option_config_exclude_fs = ( ) ) -_base_option_config_exclude_paths = ( - 'exclude_paths', - ListOfStrings( - title=_('Exclude paths'), - orientation='horizontal', - allow_empty=False, - valuespec=TextInput(allow_empty=False, regex='[^|<>]'), - help=_('Exclude specified paths from the scanning'), - ) -) _base_option_config_syslog = ( 'syslog', @@ -348,6 +348,59 @@ _base_option_config_syslog = ( ], default_value='info', )), + ('syslog_facility', + DropdownChoice( + title=_('Facility'), + help=_('Default value is 16 (local0). Facility value must be in the range of 0 to 23'), + choices=syslog_facilities, + + # from ~/lib/check_mk/gui/mkeventd.py + # syslog_facilities: DropdownChoices = [ + # (0, "kern"), + # (1, "user"), + # (2, "mail"), + # (3, "daemon"), + # (4, "auth"), + # (5, "syslog"), + # (6, "lpr"), + # (7, "news"), + # (8, "uucp"), + # (9, "cron"), + # (10, "authpriv"), + # (11, "ftp"), + # (12, "(12: unused)"), + # (13, "(13: unused)"), + # (14, "(14: unused)"), + # (15, "(15: unused)"), + # (16, "local0"), + # (17, "local1"), + # (18, "local2"), + # (19, "local3"), + # (20, "local4"), + # (21, "local5"), + # (22, "local6"), + # (23, "local7"), + # (31, "snmptrap"), + # ] + default_value=16, + )), + ('syslog_rfc5424', + FixedValue( + '--rfc5424', + title=_('Use RFC5424 syslog format'), + totext=_('Formatting of syslog messages as in RFC5424 enabled'), + help=_('Without formatting the message as of RFC5424, the message looks like this \"<133>{\"time\": ' + '\"2022-01-01 19:35:25+0100\", \"hostname\": \"checkmk\", \"path\": ' + '\"/usr/bin/pycharm/pycharm-community-2021.1.3/lib/log4j.jar\", \"entry\": \"\", \"product\": ' + '\"Log4j 1\", \"version\": \"1.2.17.2\", \"cve\": \"CVE-2021-4104\", \"status\": ' + '\"MITIGATED\", \"fixed\": false}\". \nThis will break some syslog implementations becaus of ' + 'the missing/wrong syslog header. For example CMKs event console will show \"{\"time\":\" as ' + 'the Application. With RFC5424 enabled the message is changed like this ' + '\"<133> 1 2022-01-01T23:20:50.52Z HOSTNAME LOPGRESSO LOG4J2-SCAN DETECT - {your message}\". ' + 'APP-NAME: LOPGRESSO, PROCID: LOG4J2-SCAN, MSGID: DETECT. MSGID can also be ERROR in case of a ' + 'scan error, for example on broken zip or jar files.' + ), + )), ], required_keys=['syslog_server'] ), @@ -360,8 +413,18 @@ _base_option_config_report = ( elements=[ ('report_dir', TextUnicode( - title=_('Report output directory'), - help=_('Specify report output directory. Remember the scanner must be able to write there!'), + title=_('Report output directory (must exist)'), + help=_('Specify report output directory. If report file is not configured, the scanner will create on ' + 'each run a new file in the format "log4j2_scan_report_yyyyMMdd_HHmmss" with the extension ' + '"csv" or "json". Remember the scanner must be able to write there!'), + allow_empty=False, + )), + ('log_path', + TextUnicode( + title=_('Name of the file to report to'), + help=_('Specify json log file. If report file exists, log will be appended. The report file will ' + 'be created in the "Report output directory" (see above). Remember the scanner must be able ' + 'to write there!'), allow_empty=False, )), ('report_format', @@ -409,6 +472,37 @@ _base_options_config_trace = ( ) +_base_option_config_exclude_paths = ( + 'exclude_paths', + CascadingDropdown( + title=_('Exclude paths'), + default_value='exclude_paths', + sorted=False, + choices=[ + ('exclude_paths', + _('Exclude paths'), + ListOfStrings( + orientation='horizontal', + allow_empty=False, + valuespec=TextInput(allow_empty=False, regex='[^|<>]'), + help=_('Exclude specified paths from the scanning'), + )), + ('exclude_paths_file', + _('Exclude paths (bulk)'), + TextAreaUnicode( + help='Specify path list. Paths should be separated by new line. Prepend # for comment.', + allow_empty=False, + forbidden_chars='|<>', + strip=True, + cols=85, + rows=5, + default_value='# Specify path list. Paths should be separated by new line. Prepend # for comment.\n' + )) + ], + ) +) + + def _valuespec_agent_config_cve_2021_44228_log4j(): return CascadingDropdown( title=_('CVE-2021-44228-log4j'), @@ -416,89 +510,120 @@ def _valuespec_agent_config_cve_2021_44228_log4j(): f'If you activate this option, then the agent plugin <tt>cve_2021_44228_log4j</tt> will be deployed. ' f'This will scan for files with the CVE-2021-44228-log4j issue. (Plugin version: {bakery_plugin_version})' ), + sorted=False, choices=[ - ( - 'linux', - _('Deploy Linux CVE-2021-44228-log4j agent plugin'), - Dictionary(elements=[ - ('search_linux', - ListOfStrings( - title=_('Search paths'), - orientation='horizontal', - allow_empty=False, - valuespec=TextInput(allow_empty=False, regex='[^|<>]'), - help=_('Paths where the scanner searches for vulnerable files'), - default_value=['/'], - )), - _base_options_config_scan_logback, - _base_options_config_log4j_1, - _base_options_config_scan_zip, - _base_options_config_fix_files, - _base_options_config_no_symlink, - _base_option_config_exclude_paths, - _base_option_config_exclude_fs, - _base_options_config_silent, - _base_options_config_interval, - _base_options_config_timeout, - _base_option_config_syslog, - _base_option_config_report, - _base_options_config_debug, - # _base_options_config_trace, # run takes to long, produces to much output - ], - required_keys=['search_linux'] - ), - ), - ( - 'windows', - _('Deploy Windows CVE-2021-44228-log4j agent plugin'), - Dictionary(elements=[ - ('search_windows', - CascadingDropdown( - title=_('Search method'), - default_value='all_drives', - choices=[ - ('all_drives', _('All drives')), - ('drives_to_scan', - _('Drives to scan'), - ListOfStrings( - orientation='horizontal', - allow_empty=False, - valuespec=TextInput(size=1, maxlen=1, minlen=1, allow_empty=False, regex='[a-zA-Z]'), - help=_('This drives will be scanned, default is "--all-drives"'), - default_value=['C'], - )), - ('search_paths', - _('Search paths'), - ListOfStrings( - orientation='horizontal', - allow_empty=False, - valuespec=TextInput(allow_empty=False, regex='[^|<>]'), - help=_('Paths where the scanner searches for vulnerable files'), - default_value=['C:\\'], - )), - ], - )), - _base_options_config_scan_logback, - _base_options_config_log4j_1, - # _base_options_config_no_symlink, # sym links on windows? - _base_options_config_scan_zip, - _base_options_config_fix_files, - _base_option_config_exclude_paths, - # _base_option_config_exclude_fs, # filesystem type on windows? - _base_options_config_silent, - _base_options_config_interval, - _base_options_config_timeout, - _base_option_config_syslog, - _base_option_config_report, - _base_options_config_debug, - # _base_options_config_trace, # run takes to long, produces to much output - ], - required_keys=['search_windows'] - ), - ), + ('linux', + _('Deploy Linux CVE-2021-44228-log4j agent plugin'), + Dictionary(elements=[ + ('search_in', + CascadingDropdown( + title=_('Search method'), + default_value='search_paths', + sorted=False, + choices=[ + ('search_paths', + _('Search paths'), + ListOfStrings( + orientation='horizontal', + allow_empty=False, + valuespec=TextInput(allow_empty=False, regex='[^|<>]'), + help=_('Paths where the scanner searches for vulnerable files'), + default_value=['/'], + )), + ('include_paths_file', + _('Search paths (bulk)'), + TextAreaUnicode( + help='Specify path list. Paths should be separated by new line. Prepend # for comment.', + allow_empty=False, + forbidden_chars='|<>', + strip=True, + cols=85, + rows=5, + default_value='# Specify path list. Paths should be separated by new line. ' + 'Prepend # for comment.\n' + '/\n', + )) + ], + )), + _base_options_config_scan_logback, + _base_options_config_log4j_1, + _base_options_config_scan_zip, + _base_options_config_fix_files, + _base_option_config_exclude_paths, + _base_option_config_exclude_fs, + _base_options_config_no_symlink, + _base_option_config_syslog, + _base_option_config_report, + _base_options_config_silent, + _base_options_config_interval, + _base_options_config_timeout, + _base_options_config_debug, + # _base_options_config_trace, # run takes to long, produces to much output + ], + required_keys=['search_in'] + )), + ('windows', + _('Deploy Windows CVE-2021-44228-log4j agent plugin'), + Dictionary(elements=[ + ('search_in', + CascadingDropdown( + title=_('Search method'), + default_value='all_drives', + sorted=False, + choices=[ + ('all_drives', _('All drives')), + ('drives_to_scan', + _('Drives to scan'), + ListOfStrings( + orientation='horizontal', + allow_empty=False, + valuespec=TextInput(size=1, maxlen=1, minlen=1, allow_empty=False, regex='[a-zA-Z]'), + help=_('This drives will be scanned, default is "--all-drives"'), + default_value=['C'], + )), + ('search_paths', + _('Search paths'), + ListOfStrings( + orientation='horizontal', + allow_empty=False, + valuespec=TextInput(allow_empty=False, regex='[^|<>]'), + help=_('Paths where the scanner searches for vulnerable files'), + default_value=['C:\\'], + )), + ('include_paths_file', + _('Search paths (bulk)'), + TextAreaUnicode( + help='Specify path list. Paths should be separated by new line. Prepend # for comment.', + allow_empty=False, + forbidden_chars='|<>', + strip=True, + cols=85, + rows=5, + default_value='# Specify path list. Paths should be separated by new line. ' + 'Prepend # for comment.\r\n' + 'C:\\\r\n', + )) + ], + )), + _base_options_config_scan_logback, + _base_options_config_log4j_1, + _base_options_config_scan_zip, + _base_options_config_fix_files, + _base_option_config_exclude_paths, + # _base_option_config_exclude_fs, # filesystem type on windows? + # _base_options_config_no_symlink, # sym links on windows? + _base_option_config_syslog, + _base_option_config_report, + _base_options_config_silent, + _base_options_config_interval, + _base_options_config_timeout, + _base_options_config_debug, + # _base_options_config_trace, # run takes to long, produces to much output + ], + required_keys=['search_in'] + )), (None, _('Do not deploy the CVE-2021-44228-log4j agent plugin')), ], - )