Skip to content

VNX-453: Insecure default: a security parameter defaults to its unsafe value

Detects Python and JavaScript/TypeScript function signatures whose security parameter defaults to the weaker setting (verify/verify_ssl/check_hostname/rejectUnauthorized/strictSSL = false, secure/httponly = false, autoescape or CSRF off, insecure/skip_verify/shell/debug = true), so every caller that omits it gets the insecure behaviour.

Updated 02 Nov 2026Checked against cli@de9b52a
Field Value
Rule ID VNX-453
Severity Medium
SARIF level warning
Kind sast
Languages Python, JavaScript / TypeScript
CWE CWE-453
CAPEC CAPEC-66
ATT&CK T1190
CWSS vector CWSS:1.0/TI:M/AP:RU/AL:S/IC:N/FC:LT/RP:RU/RL:S/AV:L/AS:N/IN:A/SC:A/BI:M/DI:H/EX:M/EC:N/P:C
Tags insecure-default configuration cwe-453
Source internal/sast/rules/vnx-453.rego

Overview

VNX-453 maps to CWE-453: Insecure Default Variable Initialization. A helper written as def fetch(url, verify=False) makes the insecure behaviour the one every caller gets unless they remember to opt out. Defaults are where most callers end up, so the default must be the safe value.

The rule reports a function signature (Python def, single or multi-line, with or without type annotations; JS/TS function declarations, arrow functions, methods, constructors and destructured option defaults) where:

  • a verification or protection parameter defaults to off: verify, verify_ssl, ssl_verify, check_hostname, validate_certs, verify_signature, rejectUnauthorized, strictSSL, secure, httponly/httpOnly, autoescape, csrf*, require_auth, login_required;
  • an unsafe switch defaults to on: insecure, insecure_skip_verify, skip_verify, no_verify, skip_auth, allow_unsafe*, allow_pickle, shell, debug.

Not reported: a call that passes the weak value explicitly (requests.get(url, verify=False) is a call-site concern for other rules), object literals ({ rejectUnauthorized: false }), ordinary assignments, safe defaults, transport choices such as ssl=False or use_tls=False whose right value depends on the deployment, mutable default arguments (a correctness bug, not an insecure security default), comments, strings, docstrings and test files.

What Gets Flagged

# FLAGGED
def fetch_invoice(url, timeout=10, verify=False):
    return requests.get(url, timeout=timeout, verify=verify)

def set_session_cookie(response, value, secure=False, httponly=False):
    ...
// FLAGGED
function createAgent({ keepAlive = true, rejectUnauthorized = false } = {}) {
  return new https.Agent({ keepAlive, rejectUnauthorized });
}

Remediation

Make the safe value the default (verify=True, rejectUnauthorized = true, secure=True, shell=False) and let the rare caller that needs otherwise opt out explicitly, where reviewers can see it.

References

Suppressing this rule

Put a nosec comment on the line, or on line 1 to cover the whole file. Use the comment marker of the file’s language (#, //, -- or ;):

# nosec vnx-453
// nosec vnx-453

Or record an ignore rule: vulnetix ignore add --rule vnx-453 --reason "...". See Suppressing findings.

Edit this pageSources: cli/internal/sast/rules/vnx-453.rego, cli/internal/sast/docs/vnx-453.md
esc
↑ ↓ move↵ openSearches in your browser. A key like autonomy.max or a code like threshold_required jumps straight to it.