Lucene search
+L

Windows Host Security Configuration Reporter

🗓️ 23 Sep 2026 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 41 Views

Windows Host Security Configuration Reporter reports host security settings as host tags.

Code
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
##

include('compat.inc');

if (description)
{
  script_id(349457);
  script_version("1.2");
  script_set_attribute(attribute:"plugin_modification_date", value:"2026/10/06");

  script_name(english:"Windows Host Security Configuration Reporter");
  script_set_attribute(attribute:"synopsis", value:
"Reports Windows host security configuration settings as internal host tags.");
  script_set_attribute(attribute:"description", value:
"This plugin aggregates Windows host security configuration settings collected by individual detection plugins and
reports the result as a structured internal host tag. The structured data object is reported even when only a subset of
the source plugins ran.");
  script_set_attribute(attribute:"solution", value:"n/a");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/09/23");
  script_set_attribute(attribute:"plugin_type", value:"summary");
  script_set_attribute(attribute:"agent", value:"windows");
  script_set_attribute(attribute:"always_run", value:TRUE);
  script_end_attributes();

  script_category(ACT_END);
  script_family(english:"General");

  script_copyright(english:"This script is Copyright (C) 2026 and is owned by Tenable, Inc. or an Affiliate thereof.");

  script_require_keys("trigger/host_security_configuration_reporter");

  exit(0);
}

include('debug.inc');
include('structured_data_host_security_configuration.inc');

# the KB key 'trigger/host_security_configuration_reporter' is used within script_require_keys to manage when this plugin runs.
# listing the other KB keys produced by the source plugins in script_require_ports won't work reliably in all cases,
# as the value of 0 is handled the same as not present.

# setting boolean values explicitly to lowercase true / false throughout the plugin is required for the SD object serialisation
# to work as intended.

# plugin 159929

var lsa_run_as_ppl = get_kb_item('plugins/159929/RunAsPPL');
if (!isnull(lsa_run_as_ppl))
{
  var lsa_status_map = {1: 'ENABLED_WITH_UEFI_LOCK', 2: 'ENABLED'};
  var lsa_status = lsa_status_map[lsa_run_as_ppl];
  if (isnull(lsa_status)) lsa_status = 'NOT_CONFIGURED';

  structured_data_host_security_configuration.set('lsa_protection', lsa_status);
}

# plugin 159817, from System\CurrentControlSet\Control\DeviceGuard\EnableVirtualizationBasedSecurity

var cg_vbs = get_kb_item('plugins/159817/EnableVirtualizationBasedSecurity');
var cg_vbs_status = NULL;
if (!isnull(cg_vbs))
{
  if (cg_vbs == 1) cg_vbs_status = true;
  else cg_vbs_status = false;
}

if (!isnull(cg_vbs_status))
{
  var cg = { 'vbs_status' : cg_vbs_status };

  # plugin 159817, from System\CurrentControlSet\Control\LSA\LsaCfgFlags

  var cg_lsa_flags = get_kb_item('plugins/159817/LsaCfgFlags');
  if (!isnull(cg_lsa_flags))
  {
    if (cg_lsa_flags == 1 || cg_lsa_flags == 2) cg.lsa_cfg_flags.enabled = true;
    else cg.lsa_cfg_flags.enabled = false;

    if (cg_lsa_flags == 1) cg.lsa_cfg_flags.uefi_lock = true;
    else cg.lsa_cfg_flags.uefi_lock = false;
  }

  # plugin 159817, from System\CurrentControlSet\Control\DeviceGuard\RequirePlatformSecurityFeatures

  var cg_psf = get_kb_item('plugins/159817/RequirePlatformSecurityFeatures');
  if (!isnull(cg_psf))
  {
    if (cg_psf == 1 || cg_psf == 3) cg.require_platform_security_features.secure_boot = true;
    else cg.require_platform_security_features.secure_boot = false;

    if (cg_psf == 3) cg.require_platform_security_features.dma_protection = true;
    else cg.require_platform_security_features.dma_protection = false;
  }

  # overall cg status

  # this matches the logic in credential_guard_status.nasl
  var cg_status = 0;
  if (cg_vbs_status) cg_status++;
  if (cg.lsa_cfg_flags.enabled) cg_status++;
  if (cg.require_platform_security_features.secure_boot) cg_status++;
  
  if (cg_status == 3) cg_status = 'ENABLED';
  else if (cg_status > 0) cg_status = 'PARTIALLY_ENABLED';
  else cg_status = 'DISABLED';

  cg.status = cg_status;

  structured_data_host_security_configuration.set('credential_guard', cg);
}

# plugin 162174

var always_install_elevated_hklm = get_kb_item('plugins/162174/hklm');
var always_install_elevated_hku = get_kb_item('plugins/162174/hku');
if (!isnull(always_install_elevated_hklm) && !isnull(always_install_elevated_hku))
{
  # HKLM
  var machine_policy_enabled = false;
  if (always_install_elevated_hklm == 1) machine_policy_enabled = true;

  # HKU
  var user_policy_enabled = false;
  if (always_install_elevated_hku == 1) user_policy_enabled = true;

  # aggregation
  var any_user_effective = false;
  if (machine_policy_enabled && user_policy_enabled) any_user_effective = true;

  var always_install_elevated = {};
  always_install_elevated.machine_policy_enabled = machine_policy_enabled;
  always_install_elevated.user_policy_enabled = user_policy_enabled;
  always_install_elevated.any_user_effective = any_user_effective;
    
  structured_data_host_security_configuration.set('always_install_elevated', always_install_elevated);
}

var script_execution = {};

# plugin 92367

var ps_native = get_kb_item('plugins/92367/native');
var ps_wow = get_kb_item('plugins/92367/wow6432node');

# schema enforcement in the unlikely case we got invalid input
var ps_allowed = {'UNRESTRICTED': 1, 'BYPASS': 1, 'ALLSIGNED': 1, 'REMOTESIGNED': 1, 'RESTRICTED': 1, 'UNDEFINED': 1};

if (!isnull(ps_native) && ps_allowed[toupper(ps_native)])
  script_execution.powershell_policy.native = toupper(ps_native);
if (!isnull(ps_wow) && ps_allowed[toupper(ps_wow)])
  script_execution.powershell_policy.wow6432node = toupper(ps_wow);

# plugin 164690

var disable_cmd = get_kb_item('plugins/164690/DisableCMD');
if (!isnull(disable_cmd))
{
  if (disable_cmd == 1) disable_cmd = 'CMD_AND_SCRIPTS_DISABLED';
  else if (disable_cmd == 2) disable_cmd = 'CMD_DISABLED';
  else disable_cmd = 'NOT_RESTRICTED';

  script_execution.cmd_restricted = disable_cmd;
}

if (!empty_or_null(keys(script_execution)))
{
  structured_data_host_security_configuration.set("script_execution", script_execution);
}

# plugin 83265

var laps_installed = get_kb_item('plugins/83265/laps_installed');
if (!isnull(laps_installed))
{
  if (laps_installed == 1) laps_installed = true;
  else laps_installed = false;

  structured_data_host_security_configuration.set('laps_installed', laps_installed);
}

# plugin 57608

var smb_signing_required = get_kb_item('plugins/57608/signing_required');
if (!isnull(smb_signing_required))
{
  if (smb_signing_required == 1) smb_signing_required = true;
  else smb_signing_required = false;

  var smb = {
    server: {
      signing_required: smb_signing_required
    }
  };

  structured_data_host_security_configuration.set('smb', smb);
}

# only emit the tag if any of the source plugins ran
if (max_index(keys(structured_data_host_security_configuration.data)) > 0)
  structured_data_host_security_configuration.report_internal();

var FLATLINE_TEST = !isnull(get_kb_item("flatline/TEST"));
if (FLATLINE_TEST)
{
  dbg::enable();
  dbg::set_log_level(2);

  var sd_data = structured_data_host_security_configuration.data;
  var output = strcat(
    'lsa_protection: ', string(sd_data["lsa_protection"]), '.\n',
    'credential_guard.status: ', string(sd_data["credential_guard"]["status"]), '.\n',
    'credential_guard.vbs_status: ', string(sd_data["credential_guard"]["vbs_status"]), '.\n',
    'credential_guard.lsa_cfg_flags.enabled: ', string(sd_data["credential_guard"]["lsa_cfg_flags"]["enabled"]), '.\n',
    'credential_guard.lsa_cfg_flags.uefi_lock: ', string(sd_data["credential_guard"]["lsa_cfg_flags"]["uefi_lock"]), '.\n',
    'credential_guard.require_platform_security_features.secure_boot: ', string(sd_data["credential_guard"]["require_platform_security_features"]["secure_boot"]), '.\n',
    'credential_guard.require_platform_security_features.dma_protection: ', string(sd_data["credential_guard"]["require_platform_security_features"]["dma_protection"]), '.\n',
    'always_install_elevated.machine_policy_enabled: ', string(sd_data["always_install_elevated"]["machine_policy_enabled"]), '.\n',
    'always_install_elevated.user_policy_enabled: ', string(sd_data["always_install_elevated"]["user_policy_enabled"]), '.\n',
    'always_install_elevated.any_user_effective: ', string(sd_data["always_install_elevated"]["any_user_effective"]), '.\n',
    'script_execution.powershell_policy.native: ', string(sd_data["script_execution"]["powershell_policy"]["native"]), '.\n',
    'script_execution.powershell_policy.wow6432node: ', string(sd_data["script_execution"]["powershell_policy"]["wow6432node"]), '.\n',
    'script_execution.cmd_restricted: ', string(sd_data["script_execution"]["cmd_restricted"]), '.\n',
    'laps_installed: ', string(sd_data["laps_installed"]), '.\n',
    'smb.server.signing_required: ', string(sd_data["smb"]["server"]["signing_required"]), '.\n'
  );

  dbg::detailed_log(lvl:1, src:SCRIPT_NAME, msg:output);
}

exit(0, "This plugin does not produce output.");

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

06 Oct 2026 00:00Current
5.8Medium risk
Vulners AI Score5.8
41