action plan
Findings sorted by severity for remediation prioritisation.
Security (SAST) Remediation
High
rules.sast.php.php-md5-password-hash — Php MD5 Password Hash
File: login.php:4 | CWE-287, CWE-327
Fix: md5() or sha1() is used to hash a password. These algorithms are fast and unsalted, making them trivially crackable with rainbow tables or GPU brute force. Use password_hash() with PASSWORD_BCRYPT or PASSWORD_ARGON2ID instead.
Critical
rules.sast.php.php-command-injection-taint — Php Command Injection Taint
File: vulnerabilities/cmdi/home.php:38 | CWE-77, CWE-78
Fix: User-controlled input flows to an OS command execution function. This enables arbitrary command injection. Use escapeshellarg() on individual arguments, or avoid shell commands entirely by using PHP built-in functions.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/cmdi/home.php:39 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-command-injection-taint — Php Command Injection Taint
File: vulnerabilities/cmdi/home.php:42 | CWE-77, CWE-78
Fix: User-controlled input flows to an OS command execution function. This enables arbitrary command injection. Use escapeshellarg() on individual arguments, or avoid shell commands entirely by using PHP built-in functions.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/cmdi/home.php:43 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/crypto/home.php:46 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/crypto/home.php:71 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/crypto/home.php:77 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/crypto/home.php:82 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
High
rules.sast.php.php-md5-password-hash — Php MD5 Password Hash
File: vulnerabilities/csrf/home.php:41 | CWE-287, CWE-327
Fix: md5() or sha1() is used to hash a password. These algorithms are fast and unsalted, making them trivially crackable with rainbow tables or GPU brute force. Use password_hash() with PASSWORD_BCRYPT or PASSWORD_ARGON2ID instead.
High
rules.sast.php.php-md5-password-hash-direct — Php MD5 Password Hash Direct
File: vulnerabilities/csrf/home.php:41 | CWE-327, CWE-328
Fix: md5() used for password hashing. MD5 is cryptographically broken and unsuitable for password storage. Use password_hash() with PASSWORD_BCRYPT or PASSWORD_ARGON2ID instead.
High
rules.sast.php.php-path-traversal-include-taint — Php Path Traversal Include Taint
File: vulnerabilities/fi/home.php:36 | CWE-22, CWE-98
Fix: User-controlled input flows to a file inclusion function (include/require). This enables Local File Inclusion (LFI) or Remote File Inclusion (RFI), allowing attackers to execute arbitrary code. Validate file paths against a whitelist and use basename() to strip directory traversal sequences.
High
rules.sast.php.php-unrestricted-file-upload-taint — Php Unrestricted File Upload Taint
File: vulnerabilities/fileupload/home.php:70 | CWE-434
Fix: User-controlled filename flows to move_uploaded_file() without proper validation. Attackers can upload executable PHP files (e.g., shell.php) to gain remote code execution. Validate file extension against a whitelist, check MIME type, and use a generated filename instead of the original.
Critical
rules.sast.php.php-insecure-deserialization-taint — Php Insecure Deserialization Taint
File: vulnerabilities/php_object_injection/home.php:38 | CWE-502
Fix: User-controlled input flows to unserialize(). Deserializing untrusted data in PHP can trigger __wakeup() and __destruct() magic methods in arbitrary classes, enabling remote code execution via gadget chains. Use json_decode() instead, or specify allowed_classes in the options array: unserialize($data, ["allowed_classes" => false]).
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/php_object_injection/home.php:42 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-direct-output — Php XSS Direct Output
File: vulnerabilities/reflected_xss/home.php:32 | CWE-79
Fix: Superglobal directly echoed to output without encoding. This is a reflected XSS vulnerability. Use htmlspecialchars($input, ENT_QUOTES, 'UTF-8').
Critical
rules.sast.php.php-sql-injection-taint — Php SQL Injection Taint
File: vulnerabilities/sqli/home.php:57 | CWE-89
Fix: User-controlled input flows to a SQL query without parameterization. Use prepared statements: $stmt = $pdo->prepare("SELECT * FROM t WHERE id = ?"); $stmt->execute([$id]); or mysqli_prepare() + bind_param().
High
rules.sast.php.php-xpath-injection-taint — Php Xpath Injection Taint
File: vulnerabilities/sqli/home.php:57 | CWE-643
Fix: User-controlled input flows to an XPath query without sanitization. This enables XPath injection, allowing attackers to modify query logic to bypass authentication or extract XML data. Parameterize XPath queries or validate/escape user input before inclusion in XPath expressions.
Critical
rules.sast.php.php-sql-injection-taint — Php SQL Injection Taint
File: vulnerabilities/sqli/home.php:61 | CWE-89
Fix: User-controlled input flows to a SQL query without parameterization. Use prepared statements: $stmt = $pdo->prepare("SELECT * FROM t WHERE id = ?"); $stmt->execute([$id]); or mysqli_prepare() + bind_param().
High
rules.sast.php.php-xpath-injection-taint — Php Xpath Injection Taint
File: vulnerabilities/sqli/home.php:61 | CWE-643
Fix: User-controlled input flows to an XPath query without sanitization. This enables XPath injection, allowing attackers to modify query logic to bypass authentication or extract XML data. Parameterize XPath queries or validate/escape user input before inclusion in XPath expressions.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli/home.php:67 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli/home.php:68 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli/home.php:69 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli/home.php:70 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli/home.php:71 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-sql-injection-taint — Php SQL Injection Taint
File: vulnerabilities/sqli_blind/home.php:55 | CWE-89
Fix: User-controlled input flows to a SQL query without parameterization. Use prepared statements: $stmt = $pdo->prepare("SELECT * FROM t WHERE id = ?"); $stmt->execute([$id]); or mysqli_prepare() + bind_param().
High
rules.sast.php.php-xpath-injection-taint — Php Xpath Injection Taint
File: vulnerabilities/sqli_blind/home.php:55 | CWE-643
Fix: User-controlled input flows to an XPath query without sanitization. This enables XPath injection, allowing attackers to modify query logic to bypass authentication or extract XML data. Parameterize XPath queries or validate/escape user input before inclusion in XPath expressions.
Critical
rules.sast.php.php-sql-injection-taint — Php SQL Injection Taint
File: vulnerabilities/sqli_blind/home.php:62 | CWE-89
Fix: User-controlled input flows to a SQL query without parameterization. Use prepared statements: $stmt = $pdo->prepare("SELECT * FROM t WHERE id = ?"); $stmt->execute([$id]); or mysqli_prepare() + bind_param().
High
rules.sast.php.php-xpath-injection-taint — Php Xpath Injection Taint
File: vulnerabilities/sqli_blind/home.php:62 | CWE-643
Fix: User-controlled input flows to an XPath query without sanitization. This enables XPath injection, allowing attackers to modify query logic to bypass authentication or extract XML data. Parameterize XPath queries or validate/escape user input before inclusion in XPath expressions.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli_blind/home.php:71 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli_blind/home.php:72 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli_blind/home.php:73 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli_blind/home.php:74 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/sqli_blind/home.php:75 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
High
rules.sast.php.php-path-traversal-include-taint — Php Path Traversal Include Taint
File: vulnerabilities/ssrf_xspa/home.php:33 | CWE-22, CWE-98
Fix: User-controlled input flows to a file inclusion function (include/require). This enables Local File Inclusion (LFI) or Remote File Inclusion (RFI), allowing attackers to execute arbitrary code. Validate file paths against a whitelist and use basename() to strip directory traversal sequences.
High
rules.sast.php.php-ssrf-taint — Php SSRF Taint
File: vulnerabilities/ssrf_xspa/home.php:33 | CWE-918
Fix: User-controlled input flows to an outbound HTTP request without URL validation. This enables Server-Side Request Forgery (SSRF) allowing attackers to probe internal services, read cloud metadata endpoints, or pivot to internal networks. Validate URLs against an allowlist of permitted hosts and schemes.
High
rules.sast.php.php-path-traversal-include-taint — Php Path Traversal Include Taint
File: vulnerabilities/ssrf_xspa/home.php:35 | CWE-22, CWE-98
Fix: User-controlled input flows to a file inclusion function (include/require). This enables Local File Inclusion (LFI) or Remote File Inclusion (RFI), allowing attackers to execute arbitrary code. Validate file paths against a whitelist and use basename() to strip directory traversal sequences.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/ssrf_xspa/home.php:36 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/ssti/home.php:51 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/ssti/ssti.php:22 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-sql-injection-taint — Php SQL Injection Taint
File: vulnerabilities/xpath/home.php:10 | CWE-89
Fix: User-controlled input flows to a SQL query without parameterization. Use prepared statements: $stmt = $pdo->prepare("SELECT * FROM t WHERE id = ?"); $stmt->execute([$id]); or mysqli_prepare() + bind_param().
High
rules.sast.php.php-xpath-injection-taint — Php Xpath Injection Taint
File: vulnerabilities/xpath/home.php:10 | CWE-643
Fix: User-controlled input flows to an XPath query without sanitization. This enables XPath injection, allowing attackers to modify query logic to bypass authentication or extract XML data. Parameterize XPath queries or validate/escape user input before inclusion in XPath expressions.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/xpath/home.php:35 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/xpath/home.php:49 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Critical
rules.sast.php.php-xss-taint — Php XSS Taint
File: vulnerabilities/xpath/home.php:50 | CWE-79
Fix: User-controlled input flows to HTML output without encoding. This enables cross-site scripting (XSS). Apply output encoding using htmlspecialchars($input, ENT_QUOTES, 'UTF-8') before rendering in HTML.
Medium
rules.sast.php.php-session-fixation — Php Session Fixation
File: login.php:16 | CWE-287, CWE-384
Fix: Session variable is set to mark the user as authenticated, but session_regenerate_id() is not called. This allows session fixation attacks where an attacker pre-sets the session ID and waits for the victim to authenticate. Call session_regenerate_id(true) before setting session authentication variables.
Medium
rules.sast.php.php-deprecated-mcrypt — Php Deprecated Mcrypt
File: vulnerabilities/crypto/PasswordHash.php:45 | CWE-327
Fix: mcrypt extension is deprecated (PHP 7.1) and removed (PHP 7.2). The mcrypt library has known vulnerabilities and is unmaintained. Migrate to openssl_encrypt()/openssl_decrypt() with AES-256-GCM.
Medium
rules.sast.php.php-deprecated-mcrypt — Php Deprecated Mcrypt
File: vulnerabilities/crypto/home.php:59 | CWE-327
Fix: mcrypt extension is deprecated (PHP 7.1) and removed (PHP 7.2). The mcrypt library has known vulnerabilities and is unmaintained. Migrate to openssl_encrypt()/openssl_decrypt() with AES-256-GCM.
Medium
rules.sast.php.php-deprecated-mcrypt — Php Deprecated Mcrypt
File: vulnerabilities/crypto/home.php:62 | CWE-327
Fix: mcrypt extension is deprecated (PHP 7.1) and removed (PHP 7.2). The mcrypt library has known vulnerabilities and is unmaintained. Migrate to openssl_encrypt()/openssl_decrypt() with AES-256-GCM.
Medium
rules.sast.php.php-regex-nested-quantifier — Php Regex Nested Quantifier
File: vulnerabilities/dom_xss/home.php:30 | CWE-1333
Fix: Regular expression contains nested quantifiers (e.g., (a+)+, (a*)*, ([0-9]+)+) which cause catastrophic backtracking on non-matching input. An attacker who controls the matched string can craft a payload that hangs the PHP process, causing denial of service. Rewrite the regex to eliminate the outer quantifier on the group or use atomic groups (?>...) to prevent backtracking.
Medium
rules.sast.php.php-weak-random-number — Php Weak Random Number
File: vulnerabilities/fileupload/home.php:51 | CWE-330
Fix: Use of a weak pseudo-random number generator (rand() or mt_rand()) for security-sensitive purposes. These functions produce predictable output and are unsuitable for tokens, passwords, nonces, or cryptographic keys. Use random_int() for integers or random_bytes() for raw bytes instead.
Medium
rules.sast.php.php-csv-injection-taint — Php Csv Injection Taint
File: vulnerabilities/formula_injection/export.php:13 | CWE-1236
Fix: User-controlled input flows to a CSV write function (fputcsv, fwrite to CSV). If the input starts with =, +, -, or @, spreadsheet applications will interpret it as a formula, enabling CSV injection (formula injection). Sanitize by prepending a single quote or stripping formula-triggering characters: ltrim($input, "=+-@\t\r").
Medium
rules.sast.php.php-dangerous-eval — Php Dangerous Eval
File: vulnerabilities/php_object_injection/home.php:32 | CWE-94
Fix: Use of eval() is inherently dangerous and can lead to code injection if any part of the evaluated string is influenced by external data. Avoid eval() entirely; use json_decode(), array functions, or template engines instead.
Medium
rules.sast.php.php-open-redirect-taint — Php Open Redirect Taint
File: vulnerabilities/redirect/home.php:31 | CWE-601
Fix: User-controlled input flows to a redirect header without URL validation. This enables open redirect attacks, where attackers craft URLs that redirect users to malicious sites. Validate redirect targets against an allowlist of trusted domains, or restrict to relative paths.
Medium
rules.sast.php.php-open-redirect-taint — Php Open Redirect Taint
File: vulnerabilities/redirect/redirect.php:5 | CWE-601
Fix: User-controlled input flows to a redirect header without URL validation. This enables open redirect attacks, where attackers craft URLs that redirect users to malicious sites. Validate redirect targets against an allowlist of trusted domains, or restrict to relative paths.
Medium
rules.sast.php.php-session-fixation — Php Session Fixation
File: vulnerabilities/sessionflaws/logout.php:3 | CWE-287, CWE-384
Fix: Session variable is set to mark the user as authenticated, but session_regenerate_id() is not called. This allows session fixation attacks where an attacker pre-sets the session ID and waits for the victim to authenticate. Call session_regenerate_id(true) before setting session authentication variables.
Medium
rules.sast.php.php-display-errors-enabled — Php Display Errors Enabled
File: vulnerabilities/sqli/home.php:31 | CWE-209
Fix: display_errors enabled in production. PHP error messages can reveal file paths, database details, and application structure. Set display_errors to Off in production and use error logging instead.
Medium
rules.sast.php.php-csrf-direct-post-to-sql — Php CSRF Direct Post To SQL
File: vulnerabilities/sqli/home.php:57 | CWE-352
Fix: User input from $_POST flows to a SQL query without CSRF token validation. State-changing operations triggered by POST data should verify a CSRF token. This may also indicate a SQL injection vulnerability (CWE-89).
Medium
rules.sast.php.php-csrf-direct-post-to-sql — Php CSRF Direct Post To SQL
File: vulnerabilities/sqli/home.php:61 | CWE-352
Fix: User input from $_POST flows to a SQL query without CSRF token validation. State-changing operations triggered by POST data should verify a CSRF token. This may also indicate a SQL injection vulnerability (CWE-89).
Medium
rules.sast.php.php-csrf-direct-post-to-sql — Php CSRF Direct Post To SQL
File: vulnerabilities/sqli_blind/home.php:55 | CWE-352
Fix: User input from $_POST flows to a SQL query without CSRF token validation. State-changing operations triggered by POST data should verify a CSRF token. This may also indicate a SQL injection vulnerability (CWE-89).
Medium
rules.sast.php.php-csrf-direct-post-to-sql — Php CSRF Direct Post To SQL
File: vulnerabilities/sqli_blind/home.php:62 | CWE-352
Fix: User input from $_POST flows to a SQL query without CSRF token validation. State-changing operations triggered by POST data should verify a CSRF token. This may also indicate a SQL injection vulnerability (CWE-89).
Medium
rules.sast.php.php-weak-random-number — Php Weak Random Number
File: vulnerabilities/ssrf_xspa/home.php:34 | CWE-330
Fix: Use of a weak pseudo-random number generator (rand() or mt_rand()) for security-sensitive purposes. These functions produce predictable output and are unsuitable for tokens, passwords, nonces, or cryptographic keys. Use random_int() for integers or random_bytes() for raw bytes instead.
Medium
rules.sast.php.php-csrf-direct-post-to-sql — Php CSRF Direct Post To SQL
File: vulnerabilities/xpath/home.php:10 | CWE-352
Fix: User input from $_POST flows to a SQL query without CSRF token validation. State-changing operations triggered by POST data should verify a CSRF token. This may also indicate a SQL injection vulnerability (CWE-89).
Secrets Remediation
Medium
entropy-detect — Hardcoded Cryptographic Key
File: vulnerabilities/crypto/PasswordHash.php:45
Fix: Investigate this high-entropy string. If it is a secret, rotate it and use a secrets manager.
Medium
entropy-detect — Hardcoded Cryptographic Key
File: vulnerabilities/crypto/home.php:58
Fix: Investigate this high-entropy string. If it is a secret, rotate it and use a secrets manager.
Medium
entropy-detect — High-Entropy String (Potential Secret)
File: vulnerabilities/crypto/home.php:62
Fix: Investigate this high-entropy string. If it is a secret, rotate it and use a secrets manager.