Seaworthy-Prüfungsreferenz

Jede von Seaworthy ausgeführte Prüfung erklärt. Klicken Sie auf eine Prüfung, um zu sehen, was sie findet, warum das wichtig ist und wie Sie es beheben.

Sicherheit (74 Prüfungen)

Hardcoded secrets

id: security.hardcoded-secrets🔗

KritischKostenlos
Gescannte Sprachen:All

Was sie findet

API keys, tokens, passwords, connection strings in source

Warum das wichtig ist

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

Was zu tun ist

Move this value to an environment variable and reference it via process.env.

Missing authentication

id: security.auth-missing-endpoints🔗

KritischPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Route handler lacks authentication middleware, leaving endpoints unprotected.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Apply authentication middleware to this route handler. Use requireAuth, passport, JWT verification, or session-based auth.

SQL injection surface

id: security.sql-injection-surface🔗

KritischPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaSQL

Was sie findet

Raw string concatenation in SQL queries

Warum das wichtig ist

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

Was zu tun ist

Use parameterised queries or an ORM instead of string interpolation. Never concatenate user input into SQL strings.

OS command injection surface

id: security.os-command-injection🔗

KritischKostenlos
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects OS command execution with potentially unsafe arguments

Warum das wichtig ist

Unsafe execution of dynamic strings as code or shell commands can lead to arbitrary code execution, letting attackers take complete control of the host machine (CWE-94).

Was zu tun ist

Avoid shell execution with interpolated strings. Use parameterised APIs (e.g. execFile with args array, subprocess.run with list args).

Dynamic file inclusion

id: security.file-inclusion🔗

KritischPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects include/require with user-controlled or dynamic paths

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Avoid dynamic include/require paths from user input. Use an allow-list of permitted files and resolve paths against a trusted base directory.

Unsafe deserialization

id: security.unsafe-deserialization🔗

KritischPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects deserialization of untrusted data with pickle, yaml.load, or marshal

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Never deserialize untrusted data. Use yaml.safe_load, JSON, or signed formats. Avoid pickle and marshal on external input.

Hardcoded passwords

id: security.hardcoded-passwords🔗

KritischPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects password values assigned directly in source code

Warum das wichtig ist

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

Was zu tun ist

Store passwords in environment variables or a secrets manager. Never commit credentials to source code.

HTML/CSS comment secrets

id: security.html-css-comments-secrets🔗

KritischPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Hardcoded secrets inside HTML or CSS comments and commented JSON/config snippets

Warum das wichtig ist

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

Was zu tun ist

Remove secrets from comments and sample config blocks. Move credentials to runtime environment variables or a secure secret manager.

Committed .env file

id: security.committed-env🔗

HochKostenlos
Gescannte Sprachen:All

Was sie findet

A .env file is tracked by Git, exposing configuration and potential secrets in version history.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Add .env to .gitignore. If the file is already tracked, use git rm --cached to untrack it without deleting, or rotate any exposed secrets.

Overly permissive CORS

id: security.cors-too-permissive🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJava

Was sie findet

CORS configuration uses a wildcard origin, allowing requests from any domain.

Warum das wichtig ist

Weak HTTP headers, CORS policies, or referrer configurations expose the site to clickjacking, data exfiltration, and sensitive data leakage to third parties.

Was zu tun ist

Restrict Access-Control-Allow-Origin to your specific frontend domains rather than using a wildcard.

Sensitive data in logs

id: security.sensitive-data-in-logs🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Logging statements may leak sensitive data such as credentials or PII.

Warum das wichtig ist

Improper logging and monitoring configurations can expose sensitive debugging details to attackers or fail to provide alert visibility during active service outages.

Was zu tun ist

Redact sensitive fields before logging. Use a logging library with automatic PII scrubbing or log only non-sensitive summary data.

XSS surface

id: security.xss-surface🔗

HochKostenlos
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects XSS-prone APIs such as innerHTML and document.write()

Warum das wichtig ist

Cross-site scripting (XSS) allows attackers to inject malicious client-side scripts. This can lead to session hijacking, cookie theft, or unauthorized actions on behalf of users (CWE-79).

Was zu tun ist

Use textContent, React children, or a sanitization library like DOMPurify instead of innerHTML or document.write().

Shell arbitrary evaluation

id: security.shell-arbitrary-evaluation🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Shell eval or source command uses an unquoted dynamic argument.

Warum das wichtig ist

Unsafe execution of dynamic strings as code or shell commands can lead to arbitrary code execution, letting attackers take complete control of the host machine (CWE-94).

Was zu tun ist

Avoid eval and source for dynamic input. If a shell command is required, validate against an allow-list and pass quoted, fixed arguments.

Unescaped shell path deletion

id: security.shell-unescaped-path-deletion🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

rm command uses an unquoted variable path that may expand unexpectedly.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Quote shell path variables and validate them before deletion. Prefer rm -rf -- "$TARGET_DIR" after checking the path is non-empty and under an expected base directory.

Open redirect

id: security.open-redirect🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects redirects that may use user-controlled URLs

Warum das wichtig ist

Unvalidated redirects allow attackers to redirect users to malicious websites, facilitating phishing campaigns and social engineering attacks.

Was zu tun ist

Validate redirect targets against an allow-list of trusted domains. Never pass raw user input into Location headers.

Unsafe file upload

id: security.unsafe-file-upload🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects file uploads that use user-controlled destination paths

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Validate file type and extension server-side, generate random filenames, and store uploads outside the web root.

HTML inline unsafe script

id: security.html-inline-unsafe-script🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Inline HTML scripts and event handlers should not perform unsafe DOM writes or execute dynamic code

Warum das wichtig ist

Cross-site scripting (XSS) allows attackers to inject malicious client-side scripts. This can lead to session hijacking, cookie theft, or unauthorized actions on behalf of users (CWE-79).

Was zu tun ist

Replace unsafe inline DOM writes and dynamic code with safe DOM APIs, escaped text nodes, and validated event handling.

Weak key/token entropy

id: security.weak-key-entropy🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects low-entropy random generation (under 16 bytes / 128 bits) used for keys, tokens, or identifiers

Warum das wichtig ist

Low-entropy keys or tokens can be predicted or brute-forced by attackers, leading to bypass of authentication or cryptographic controls (CWE-326).

Was zu tun ist

Use at least randomBytes(16) (128 bits) for keys, tokens, and identifiers. For license keys, prefer randomBytes(16) or crypto.getRandomValues() with 16+ bytes.

Insecure API URL default

id: security.insecure-api-url-default🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects HTTP (non-HTTPS) default URLs for API endpoints in configuration code

Warum das wichtig ist

Using cleartext HTTP defaults for API endpoints exposes communication to man-in-the-middle (MITM) attacks, potentially leaking sensitive data or allowing traffic interception (CWE-319).

Was zu tun ist

Default all API URLs to HTTPS. Override via environment variable if needed for local development, but never default to cleartext HTTP for production endpoints.

Command injection via tainted data

id: security.taint-command-injection🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

User-controlled data flows to a command execution sink without sanitisation.

Warum das wichtig ist

Command injection lets attackers execute arbitrary operating-system commands on your server. This can lead to full server compromise, data exfiltration, or ransomware deployment (CWE-78).

Was zu tun ist

Avoid shell execution with interpolated strings. Use parameterised APIs (e.g. execFile with args array).

Path traversal via tainted data

id: security.taint-path-traversal🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

User-controlled data flows to a filesystem sink without path validation.

Warum das wichtig ist

Path traversal allows attackers to read or write files outside the intended directory, potentially exposing source code, configuration files, or secrets (CWE-22).

Was zu tun ist

Resolve paths against a trusted base directory, reject parent-segment sequences, and avoid passing raw user strings into fs APIs.

XXE-vulnerable XML parsing

id: security.xxe-surface🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

XML parser invoked with external entity expansion enabled (e.g. libxml noent: true), enabling XXE attacks.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Disable external entity expansion in the XML parser. Use a library that is XXE-safe by default.

Permissive grants

id: security.permissive-grants🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Granting extensive privileges (like GRANT ALL) to public or anonymous roles is insecure.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Restrict privileges by granting only necessary permissions (e.g. SELECT, INSERT) to specific, authorized roles rather than PUBLIC or anonymous roles.

Missing or weak row-level security

id: security.sql-rls-static🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

PostgreSQL tables containing private tenant data must enable and enforce Row-Level Security (RLS).

Warum das wichtig ist

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

Was zu tun ist

Enable Row-Level Security via ALTER TABLE ... ENABLE ROW LEVEL SECURITY and FORCE ROW LEVEL SECURITY, and define restrictive policies with user boundary checks.

Security definer function search path

id: security.sql-security-definer-search-path🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Functions defined as SECURITY DEFINER execute with privileges of the owner and must lock the search_path to prevent hijacking.

Warum das wichtig ist

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

Was zu tun ist

Add an explicit "SET search_path = public" or trusted schema when creating SECURITY DEFINER functions to lock execution context.

Missing RLS on sensitive tables (Pro)

id: security.sql-missing-rls🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

PostgreSQL tables containing private tenant data must enable and enforce Row-Level Security (RLS).

Warum das wichtig ist

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

Was zu tun ist

Define a policy with CREATE POLICY ... ON ... USING (...) to restrict data access to authorized users.

JWT allows algorithm "none"

id: security.jwt-alg-none🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

JWT verification does not restrict algorithms, allowing forged unsigned tokens via the "none" algorithm

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Always pass an explicit algorithms allowlist to jwt.verify() (e.g. { algorithms: ["HS256"] }). Never accept "none" as a valid algorithm.

Refresh token in localStorage

id: security.refresh-token-in-localstorage🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Refresh tokens or long-lived credentials stored in localStorage are vulnerable to theft via XSS

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Store refresh tokens in httpOnly, Secure, SameSite=Strict cookies — not localStorage or sessionStorage. XSS cannot read httpOnly cookies.

Path traversal surface

id: security.path-traversal🔗

HochKostenlos
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

File path constructed by concatenating user input, enabling directory traversal attacks.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Resolve and validate file paths against a base directory. Reject paths containing ../ or absolute paths from user input.

Unsafe innerHTML assignment

id: security.unsafe-innerhtml🔗

HochKostenlos
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Assignment to innerHTML can lead to XSS if user input is included.

Warum das wichtig ist

Cross-site scripting (XSS) allows attackers to inject malicious client-side scripts. This can lead to session hijacking, cookie theft, or unauthorized actions on behalf of users (CWE-79).

Was zu tun ist

Use textContent or sanitize HTML before assigning to innerHTML. Use a library like DOMPurify.

Untrusted deserialization

id: security.untrusted-deserialization🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Deserialization of user-controlled data without validation, enabling code execution attacks.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Validate and sanitise deserialized data. Prefer safe parsers with type schemas. Avoid pickle.loads on untrusted input.

XML external entity parsing

id: security.xxe-parsing🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

XML parser called without disabling external entity expansion, enabling XXE attacks.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Disable external entity expansion in the XML parser. Use a library that is XXE-safe by default.

Dangerous eval usage

id: security.dangerous-eval🔗

HochKostenlos
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects dangerous dynamic code execution such as eval(), exec(), and new Function()

Warum das wichtig ist

Unsafe execution of dynamic strings as code or shell commands can lead to arbitrary code execution, letting attackers take complete control of the host machine (CWE-94).

Was zu tun ist

Avoid eval(), exec(), and new Function(). Use safer alternatives like JSON.parse for data parsing, or refactor to eliminate dynamic code execution.

HTML missing CSP

id: security.html-missing-csp🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Full HTML pages should include a robust Content Security Policy or receive one from static-host headers

Warum das wichtig ist

Weak HTTP headers, CORS policies, or referrer configurations expose the site to clickjacking, data exfiltration, and sensitive data leakage to third parties.

Was zu tun ist

Add a strong Content Security Policy via the HTML head or static-host headers. Avoid unsafe wildcards and inline execution where possible.

HTML static host headers

id: security.html-static-host-headers🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Static site host config should supply route-wide security headers for browser pages

Warum das wichtig ist

Weak HTTP headers, CORS policies, or referrer configurations expose the site to clickjacking, data exfiltration, and sensitive data leakage to third parties.

Was zu tun ist

Configure route-wide security headers in the static host config, including CSP, Referrer-Policy, X-Content-Type-Options, frame protection, and Permissions-Policy.

HTML referrer leak

id: security.html-referrer-leak🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

target="_blank" anchors or forms without rel protection can leak the referrer and enable tabnabbing

Warum das wichtig ist

Weak HTTP headers, CORS policies, or referrer configurations expose the site to clickjacking, data exfiltration, and sensitive data leakage to third parties.

Was zu tun ist

Add rel="noopener noreferrer" to target="_blank" anchors and forms. Avoid opening untrusted destinations in a new tab without rel protection.

CSS insecure import

id: security.css-insecure-import🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

External CSS imports or URL loads over HTTP can leak content and enable network interception

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Load CSS and fonts over HTTPS only. Remove cleartext HTTP imports and URL loads from stylesheets.

HTML mixed content

id: security.html-mixed-content🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Page resources or embedded styles load over unencrypted HTTP instead of HTTPS

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Upgrade all embedded resource URLs to HTTPS. Avoid loading page assets or embedded styles over cleartext HTTP.

HTML external asset integrity

id: security.html-external-asset-integrity🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Third-party scripts and stylesheets should include subresource integrity and compatible crossorigin attributes

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Add integrity and crossorigin to third-party scripts and stylesheets, or self-host the asset.

HTML insecure form action

id: security.html-insecure-form-action🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Forms submitting over cleartext or scheme-relative URLs can leak user input and bypass transport security

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Submit forms over HTTPS or to a same-origin relative endpoint. Avoid cleartext HTTP and scheme-relative action URLs for sensitive submissions.

HTML iframe sandbox

id: security.html-iframe-sandbox🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

External iframes should use restrictive sandboxing to limit script and origin access

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Add a restrictive sandbox attribute to third-party iframes. Avoid combining allow-scripts and allow-same-origin unless the content is fully trusted.

HTML unsafe embed

id: security.html-unsafe-embed🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

External object and embed elements should not load active plugin content without tight type restrictions

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Prefer sandboxed iframes or self-hosted assets. Avoid loading third-party plugin content with object or embed, and restrict MIME types to safe passive content where possible.

HTML meta refresh redirect

id: security.html-meta-redirect🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Short-delay meta refresh redirects can be used for phishing, open redirects, or policy bypasses

Warum das wichtig ist

Unvalidated redirects allow attackers to redirect users to malicious websites, facilitating phishing campaigns and social engineering attacks.

Was zu tun ist

Replace meta refresh redirects with server-side redirects or validated client navigation. Avoid short-delay refreshes that point to external URLs or internal paths.

HTML base tag hijack

id: security.html-base-tag-hijack🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

External or mispositioned base tags can rewrite relative URLs and alter page navigation

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Remove external base tags or place a same-origin base URL inside <head>. Avoid base target="_blank" on untrusted pages.

HTML import map integrity

id: security.html-import-map-integrity🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Import maps should not redirect module specifiers to external origins without trust controls

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Keep import map entries on same-origin or relative URLs. Avoid mapping module specifiers to external CDNs unless you can trust and verify the source.

CSS data exfiltration

id: security.css-data-exfiltration🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Attribute selectors combined with external HTTP URLs can exfiltrate sensitive values from forms

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Remove attribute-selector rules that fetch external URLs. Keep sensitive form value matching and URL loads out of untrusted CSS.

CSS external font integrity

id: security.css-external-font-integrity🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

External CDN fonts loaded from @font-face can be supply-chain risks when self-hosting is not used

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Self-host font files or use a trusted local font source. Avoid loading fonts from public CDNs in production stylesheets.

Insecure random number generator

id: security.insecure-random🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects use of non-cryptographic random in security-sensitive contexts

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Use a cryptographically secure random generator (e.g. crypto.getRandomValues() in JS, secrets module in Python, SecureRandom in Java, crypto/rand in Go).

Dynamic SQL column names

id: security.dynamic-sql-columns🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects template literal or string interpolation used to build SQL column names, which can allow injection if values come from user input

Warum das wichtig ist

Interpolating dynamic column names in SQL queries bypasses parameterized query protection, introducing SQL injection risks where attackers can manipulate database structures (CWE-89).

Was zu tun ist

Use a whitelist mapping from input keys to allowed column names. Never interpolate user-supplied strings into SQL column positions.

Weak email validation regex

id: security.weak-email-validation🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects overly permissive email validation regexes that accept invalid or unsafe inputs

Warum das wichtig ist

Overly permissive email validation patterns allow malformed, spoofed, or malicious inputs to bypass business rules, leading to account validation issues or data corruption (CWE-20).

Was zu tun ist

Use a stricter regex pattern (e.g. RFC 5322 subset) or a dedicated email validation library (e.g. Zod .email(), validator.js isEmail). At minimum, require a domain with a TLD of 2+ characters.

Structured idempotency key

id: security.idempotency-key-leak🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects idempotency keys containing structured identifiers (subscription IDs, license IDs) that leak business data to external providers

Warum das wichtig ist

Embedding structured internal identifiers in idempotency keys leaks business-sensitive data (such as subscription or license IDs) to payment providers or third-party log systems (CWE-200).

Was zu tun ist

Generate idempotency keys using randomUUID() or an HMAC derived from the operation key. Never embed subscription IDs, license IDs, or other business identifiers that external providers could log.

XSS via tainted data

id: security.taint-xss🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

User-controlled data flows to an XSS sink without sanitisation.

Warum das wichtig ist

An attacker who can control data sent to an XSS sink can inject malicious scripts that execute in victims' browsers. This can lead to session hijacking, credential theft, or defacement.

Was zu tun ist

Sanitise user input before rendering. Use encodeURIComponent for URLs, or a library like DOMPurify for HTML.

SQL injection via tainted data

id: security.taint-sql-injection🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

User-controlled data flows to a SQL query sink without parameterisation.

Warum das wichtig ist

SQL injection allows attackers to read, modify, or delete database records. It is consistently one of the most common and damaging web vulnerabilities (CWE-89).

Was zu tun ist

Use parameterised queries or an ORM. Never concatenate user input into SQL strings.

Open redirect via tainted data

id: security.taint-open-redirect🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

User-controlled data flows to a redirect sink without URL validation.

Warum das wichtig ist

Unvalidated redirects allow attackers to redirect users to malicious websites, facilitating phishing campaigns and social engineering attacks.

Was zu tun ist

Validate redirect targets against an allow-list of trusted domains. Never pass raw user input into redirect helpers or Location headers.

Prototype pollution via tainted data

id: security.taint-prototype-pollution🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

User-controlled data flows to an object merge or assignment sink without sanitisation.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Validate and block __proto__, constructor, and prototype keys before merging objects. Use Object.create(null) for dictionaries.

Code execution via tainted data

id: security.taint-code-execution🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

User-controlled data flows to a dynamic code execution sink without sanitisation.

Warum das wichtig ist

Unsafe execution of dynamic strings as code or shell commands can lead to arbitrary code execution, letting attackers take complete control of the host machine (CWE-94).

Was zu tun ist

Avoid eval(), exec(), and new Function() with user input. Use safer alternatives like JSON.parse for data parsing.

Missing CSRF protection

id: security.missing-csrf-protection🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

State-changing route handler without visible CSRF token verification.

Warum das wichtig ist

Cross-Site Request Forgery (CSRF) allows malicious sites to perform actions on behalf of authenticated users without their consent, potentially leading to unauthorized state modifications.

Was zu tun ist

Add CSRF token verification to all state-changing endpoints. Use a CSRF middleware for your framework.

Weak session identifier

id: security.weak-session-id🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Session identifier derived from user-controlled or predictable input.

Warum das wichtig ist

Weak session identifiers or insecure cookies can be intercepted or predicted by attackers, leading to session hijacking and unauthorized account access.

Was zu tun ist

Generate session identifiers server-side with a cryptographically secure random source. Never accept client-supplied session IDs.

Rails mass assignment

id: security.rails-mass-assignment🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Active Record model created or updated with raw params hash, bypassing strong parameters.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Use strong parameters with params.require(:model).permit(:attr1, :attr2) to whitelist allowed attributes.

Rails insecure session config

id: security.rails-insecure-session-config🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Session cookie is missing secure flags (secure, httponly, same_site).

Warum das wichtig ist

Weak session identifiers or insecure cookies can be intercepted or predicted by attackers, leading to session hijacking and unauthorized account access.

Was zu tun ist

Set secure: true, httponly: true, and same_site: :strict on session cookies in config/initializers/session_store.rb.

Unhedged unsafe blocks

id: security.rust-unsafe-blocks🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Usage of unsafe blocks without a preceding safety documentation comment.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Document every unsafe block with a preceding "// SAFETY: <explanation>" comment explaining why the invariants are satisfied.

Missing HTTP security headers

id: security.missing-security-headers🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Application does not set HTTP security response headers (HSTS, X-Content-Type-Options, X-Frame-Options, Permissions-Policy)

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Add helmet() (Node.js) or equivalent security-header middleware. At minimum set Strict-Transport-Security, X-Content-Type-Options: nosniff, X-Frame-Options, and Permissions-Policy.

Unpinned GitHub Actions

id: security.gh-actions-unpinned🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

GitHub Actions workflow steps reference third-party actions by mutable tag rather than a full commit SHA

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Pin every third-party action to a full 40-character commit SHA, e.g. uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683. Use a tool like Renovate or pin-github-action to automate this.

GraphQL introspection in production

id: security.graphql-introspection-prod🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

GraphQL server exposes introspection without disabling it for production environments

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Disable GraphQL introspection in production: set introspection: process.env.NODE_ENV !== "production" in Apollo Server, or use a validationRules plugin that blocks introspection queries.

GraphQL missing depth limit

id: security.graphql-no-depth-limit🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

GraphQL server has no query depth or complexity limiting, enabling denial-of-service via deeply nested queries

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Add query depth limiting with graphql-depth-limit or complexity analysis with graphql-query-complexity. Wire the validation rule into ApolloServer validationRules or the equivalent for your framework.

JWT issued without expiry

id: security.jwt-no-expiry🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

JWT tokens are signed without an expiry claim (exp / expiresIn), making them valid indefinitely

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Set a short expiry on all issued JWTs using expiresIn (jsonwebtoken), .setExpirationTime() (jose), or an "exp" claim in the payload (PyJWT). Use refresh tokens to extend sessions.

Broken cryptographic algorithm

id: security.broken-crypto-algorithm🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Use of a deprecated or broken encryption algorithm such as DES or RC4.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Use AES-256-GCM or ChaCha20-Poly1305. Never use DES, RC4, or ECB mode.

HTTP method override

id: security.http-method-override🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

methodOverride middleware enabled, allowing clients to override HTTP methods via query parameters or headers.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Disable methodOverride or restrict it to trusted clients. Prefer standard HTTP methods.

HTTP URL without TLS

id: security.http-no-tls🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Hardcoded HTTP URL that should use HTTPS for transport security.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Use HTTPS URLs. Configure HSTS and redirect HTTP to HTTPS at the server level.

Weak encryption mode

id: security.weak-encryption-mode🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Use of a raw cipher initialisation that may lack authentication (AEAD).

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Use authenticated encryption (AES-256-GCM, ChaCha20-Poly1305). Avoid raw CBC/CTR without a MAC.

Weak hash algorithm

id: security.weak-hash-algorithm🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Use of a cryptographically weak hash function such as MD5 or SHA1.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Use SHA-256 or stronger. For password hashing use bcrypt, scrypt, or Argon2.

Unsafe document.write usage

id: security.no-document-write🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects the use of document.write which can lead to XSS vulnerabilities

Warum das wichtig ist

Cross-site scripting (XSS) allows attackers to inject malicious client-side scripts. This can lead to session hijacking, cookie theft, or unauthorized actions on behalf of users (CWE-79).

Was zu tun ist

Avoid document.write(). Use DOM APIs like appendChild(), innerHTML with sanitization, or a templating system instead.

HTML javascript URI

id: security.html-javascript-uri🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

javascript: URLs execute code directly from HTML attributes and can enable XSS-style execution

Warum das wichtig ist

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

Was zu tun ist

Replace javascript: URLs with normal links or buttons and event handlers. Avoid direct script execution in HTML attributes.

Excessive GitHub Actions permissions

id: security.gh-actions-excessive-permissions🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

GitHub Actions workflow grants overly broad or undeclared default permissions

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Add a top-level "permissions: {}" block and grant only the minimum scopes needed per job, e.g. "permissions: { contents: read }".

Resilienz (19 Prüfungen)

No input validation

id: resilience.no-input-validation🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

User input is not validated before processing, increasing risk of injection and data corruption.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Validate user input with a schema library like zod, joi, or yup. Set request size limits on your HTTP server.

Missing error handling

id: resilience.missing-error-handling🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Async operations lack error handling, which may cause unhandled rejections or crashes.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Add try/catch blocks around async operations. Ensure all promises have .catch() handlers or are inside an async function with error handling.

Swallowed catch block

id: resilience.swallowed-catch🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Empty catch blocks swallow errors without handling

Warum das wichtig ist

Swallowed errors hide bugs, make debugging impossible in production, and can mask security incidents such as failed authentication attempts or database corruption (CWE-391).

Was zu tun ist

Add proper error handling in catch blocks. Log errors, re-throw when appropriate, or handle the specific error case.

Destructive migration operation

id: resilience.destructive-sql-migration🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Destructive operations like DROP TABLE, DROP COLUMN, or TRUNCATE pose high risk of data loss.

Warum das wichtig ist

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

Was zu tun ist

Verify that this destructive change is intended and has safe rollback/data preservation procedures in place.

Broad data mutation

id: resilience.sql-broad-mutation🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

UPDATE or DELETE statements without a WHERE clause (or with a tautology like WHERE true) mutate the entire table.

Warum das wichtig ist

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

Was zu tun ist

Specify a restrictive WHERE clause on the UPDATE or DELETE statement to target only intended rows.

Routing handler thread-panics

id: resilience.rust-handler-panics🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Use of panicking methods like unwrap or expect inside asynchronous routing handlers.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Avoid calling unwrap(), expect(), or panic!() inside async routing handlers. Propagate errors using the "?" operator, or return a Result with a proper error response.

No rate limiting

id: resilience.no-rate-limiting🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Public API endpoints lack rate limiting, making them vulnerable to abuse and DoS attacks.

Warum das wichtig ist

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

Was zu tun ist

Add rate-limiting middleware to public routes. Use express-rate-limit, rate-limiter-flexible, or a gateway-level limiter.

No pagination

id: resilience.no-pagination🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

List endpoints return unlimited results without pagination, risking performance degradation.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Add LIMIT and OFFSET (or .limit() / .skip() in your ORM) to list queries. Use cursor-based pagination for large datasets.

Missing timeout

id: resilience.missing-timeout🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

HTTP requests or database queries lack timeouts, potentially causing indefinite hangs.

Warum das wichtig ist

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

Was zu tun ist

Add a timeout to this HTTP call. Use AbortSignal.timeout() for fetch, or the timeout option for axios.

No retry logic

id: resilience.no-retry-logic🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

External service calls lack retry logic, reducing resilience to transient failures.

Warum das wichtig ist

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

Was zu tun ist

Wrap external calls with retry logic using p-retry, async-retry, or implement exponential backoff manually.

Webhook and Subscription Processing Defects

id: resilience.webhook-processing-defects🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Checks webhook handlers for missing signature checks, missing idempotency, out-of-order delivery race conditions, and lack of reconciliation fallbacks.

Warum das wichtig ist

Relying on payments provider webhooks without verifying signatures leads to security bypasses, while missing idempotency, sequence checks, or active sync checks causes out-of-sync subscriptions and payment processing loops.

Was zu tun ist

Validate headers using webhook signature secrets, log and check event IDs in a persistent cache or database, compare events occurred_at timestamps, and implement a cron fallback or check-on-access reconciliation mechanism to query the payments provider API.

HTML inline resilience

id: resilience.html-inline-resilience🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Inline script blocks should handle network failures explicitly and avoid infinite retries or swallowed errors

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Add timeout, retry, and explicit error handling to inline fetch/XHR logic. Avoid empty catch blocks and infinite retry loops in page scripts.

Missing backoff jitter

id: resilience.no-backoff-jitter🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Retry loops without jitter cause thundering herd

Warum das wichtig ist

Without jitter, all retries from multiple clients can align and overwhelm a recovering service, causing cascading failures (CWE-770).

Was zu tun ist

Add exponential backoff with jitter to retry logic. Use a library like p-retry or implement jitter with Math.random().

Missing circuit breaker

id: resilience.no-circuit-breaker🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Missing circuit breaker around external calls

Warum das wichtig ist

Without a circuit breaker, a failing downstream service can tie up all your connections and threads, causing your own service to fail (CWE-1042).

Was zu tun ist

Add a circuit breaker around external service calls. Use a library like opossum or implement a simple state machine.

Infinite retry loop

id: resilience.infinite-retry🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Retry loops without max-attempts

Warum das wichtig ist

Infinite retries can exhaust memory, CPU, and network resources. They also delay failure detection, making incident response harder (CWE-834).

Was zu tun ist

Add a maximum attempt counter to retry loops. Use a for loop with a fixed limit or a while loop with a counter and break condition.

Missing transaction guard in large migrations

id: resilience.missing-transaction-guard🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Large migrations with multiple data mutations should run inside a transaction to prevent partial applications and state corruption.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Wrap the entire migration script inside a transaction using BEGIN; and COMMIT; statements.

ORM N+1 query pattern

id: resilience.orm-n-plus-one🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

ORM results are iterated with a per-row database query instead of a single batch load

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Replace per-row queries inside loops with a single batch query using include/eager loading (Prisma include, Sequelize eager loading, SQLAlchemy joinedload, ActiveRecord includes).

Missing memory limit

id: resilience.missing-memory-limit🔗

🧠 KI-gestütztNiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Buffer.alloc used without a maximum size check for user-controlled sizes.

Warum das wichtig ist

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

Was zu tun ist

Enforce a maximum allocation size before calling Buffer.alloc. Reject user-controlled sizes above a safe threshold.

Missing timeout configuration

id: resilience.missing-timeout-config🔗

🧠 KI-gestütztNiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

HTTP client call without an explicit timeout configuration.

Warum das wichtig ist

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

Was zu tun ist

Add a timeout to HTTP requests. Use AbortSignal.timeout() for fetch or the timeout option for axios.

Ops (15 Prüfungen)

Secrets in Dockerfile ENV

id: ops.dockerfile-secrets-in-env🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Dockerfile bakes secrets or credentials into image layers via ENV or ARG instructions

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Never pass secrets via ENV or ARG — they persist in image history. Use Docker BuildKit secrets (RUN --mount=type=secret), environment variables injected at container start, or a secrets manager.

No version control

id: ops.no-version-control🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

No Git repository detected. Version control is essential for collaboration and code recovery.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Initialize a Git repository with git init and commit your code. Regular commits provide history, collaboration, and a safety net for recovery.

No graceful shutdown

id: ops.no-graceful-shutdown🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Server lacks graceful shutdown handling, risking dropped requests and data loss on restart.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Listen for SIGTERM and SIGINT signals. Gracefully close server connections and drain in-flight requests before exiting.

Missing observability

id: ops.missing-observability🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

No metrics, tracing, or structured telemetry hooks

Warum das wichtig ist

Without observability, you cannot detect outages, debug performance regressions, or measure the impact of deployments. Incidents become blind hunts (CWE-778).

Was zu tun ist

Add metrics, tracing, or structured logging to your service. Use libraries like prom-client, dd-trace, or OpenTelemetry to emit observable telemetry.

Secret rotation friction

id: ops.secret-rotation-friction🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Hardcoded secret paths impeding automated rotation

Warum das wichtig ist

When secrets are hardcoded, rotating them requires a code change, review, build, and deployment. This friction leads to long-lived secrets and increases blast radius if a credential is leaked (CWE-798).

Was zu tun ist

Load secrets from a secret manager (e.g., AWS Secrets Manager, HashiCorp Vault, Azure Key Vault) instead of hardcoding them. This enables automated rotation without redeploying code.

Environment drift

id: ops.env-drift🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

.env.example is out of sync with runtime environment variable usage

Warum das wichtig ist

Drift between `.env.example` and runtime usage causes deployment failures, hidden misconfigurations, and secret sprawl. New developers may miss required variables (CWE-1188).

Was zu tun ist

Keep .env.example in sync with the variables your code reads at runtime. Add a CI check or lint rule that flags missing or unused environment variables.

Dockerfile runs as root

id: ops.dockerfile-runs-as-root🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Container image has no non-root USER directive — all processes run as root

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Create a non-root user and switch to it before CMD/ENTRYPOINT: RUN addgroup -S app && adduser -S app -G app followed by USER app.

Debug mode enabled

id: ops.debug-mode-enabled🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Debug / verbose logging enabled in production config or source code

Warum das wichtig ist

Improper logging and monitoring configurations can expose sensitive debugging details to attackers or fail to provide alert visibility during active service outages.

Was zu tun ist

Disable debug logging and verbose mode in production. Use environment-specific config files or flags.

Hardcoded localhost

id: ops.hardcoded-localhost🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

localhost URL is hardcoded rather than configured via environment variables.

Warum das wichtig ist

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

Was zu tun ist

Replace localhost with a configurable base URL. Use environment variables or a config module.

No health check endpoint

id: ops.no-health-check🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

No health check endpoint is defined, making it harder to monitor service availability.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Add a /health or /healthz endpoint that returns a 200 status when your service is operational.

Missing structured logging

id: ops.missing-structured-logging🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Logging uses unstructured format, making log analysis and monitoring more difficult.

Warum das wichtig ist

Improper logging and monitoring configurations can expose sensitive debugging details to attackers or fail to provide alert visibility during active service outages.

Was zu tun ist

Use a structured logging library like pino or winston with JSON output for machine-readable logs.

Dockerfile missing HEALTHCHECK

id: ops.dockerfile-no-healthcheck🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Dockerfile has no HEALTHCHECK instruction — container orchestrators cannot detect unhealthy state

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Add a HEALTHCHECK instruction, e.g.: HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/health || exit 1

Missing .dockerignore

id: ops.missing-dockerignore🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Dockerfile is present without a .dockerignore — build context may include node_modules, .env files, or other sensitive data

Warum das wichtig ist

Demnächst - wir schreiben detaillierte Erklärungen für jede Prüfung.

Was zu tun ist

Add a .dockerignore file listing directories and files to exclude from the build context: node_modules, .env, .git, *.log, dist, coverage.

Hardcoded port

id: ops.hardcoded-port🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Server port number hardcoded rather than configured via environment variables.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Use process.env.PORT with a fallback value. Never hardcode port numbers in source.

Insecure file permissions

id: ops.insecure-file-permissions🔗

NiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

fs.chmod call that may set overly permissive file permissions.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Use the most restrictive file permissions possible. Prefer 0o600 for secrets, 0o644 for config.

Abhängigkeiten (10 Prüfungen)

Missing lockfile

id: dependencies.missing-lockfile🔗

HochKostenlos
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

No lockfile found. Unpinned dependencies are a reproducibility and supply-chain risk.

Warum das wichtig ist

Unpinned dependency versions make builds non-deterministic and expose the application to unexpected breaking updates or supply-chain attacks.

Was zu tun ist

Commit a lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml, Gemfile.lock, go.sum, composer.lock) or Maven/Gradle reproducibility artifacts (mvnw, gradle.lockfile) to pin exact dependency versions.

Known CVEs in dependencies

id: dependencies.known-cves🔗

HochKostenlos
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

Dependencies have known security vulnerabilities with published CVEs.

Warum das wichtig ist

Dependencies with known CVEs introduce documented vulnerabilities that attackers can exploit to compromise the application. Keeping packages updated is a core security baseline.

Was zu tun ist

Run npm audit fix or upgrade the affected dependency to a patched version.

HTML CDN vulnerable versions

id: dependencies.html-cdn-vulnerable-versions🔗

HochPro
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

CDN-loaded scripts and stylesheets can expose known-vulnerable library versions

Warum das wichtig ist

Dependencies with known CVEs introduce documented vulnerabilities that attackers can exploit to compromise the application. Keeping packages updated is a core security baseline.

Was zu tun ist

Upgrade the CDN asset to a patched version or self-host the library with a pinned release and integrity controls.

Known CVEs in Cargo dependencies

id: dependencies.cargo-known-cves🔗

HochKostenlos
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

Cargo.lock dependencies have known security advisories from the RustSec database.

Warum das wichtig ist

Dependencies with known CVEs introduce documented vulnerabilities that attackers can exploit to compromise the application. Keeping packages updated is a core security baseline.

Was zu tun ist

Run `cargo update` to upgrade to a patched version. Check the RustSec advisory for migration guidance.

Known CVEs in Bundler dependencies

id: dependencies.bundler-known-cves🔗

HochKostenlos
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

Gemfile.lock dependencies have known security advisories from the Ruby advisory database.

Warum das wichtig ist

Dependencies with known CVEs introduce documented vulnerabilities that attackers can exploit to compromise the application. Keeping packages updated is a core security baseline.

Was zu tun ist

Run `bundle update` to upgrade affected gems, or `bundle audit check` to list advisories. Pin patched versions in your Gemfile.

Dev dependencies in production

id: dependencies.dev-deps-in-prod🔗

MittelPro
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

Development-only dependencies are installed in the production dependency tree.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Move this dependency from dependencies to devDependencies in package.json.

Unpinned dependency versions

id: dependencies.unpinned-versions🔗

MittelPro
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

Package.json contains version ranges (^, ~, *, latest) instead of exact pinned versions.

Warum das wichtig ist

Unpinned dependency versions make builds non-deterministic and expose the application to unexpected breaking updates or supply-chain attacks.

Was zu tun ist

Pin this dependency to an exact version. Replace ^, ~, *, or latest with a specific version number.

HTML CDN unpinned versions

id: dependencies.html-cdn-unpinned-versions🔗

MittelPro
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

CDN dependencies without exact versions can change unexpectedly and should be pinned

Warum das wichtig ist

Unpinned dependency versions make builds non-deterministic and expose the application to unexpected breaking updates or supply-chain attacks.

Was zu tun ist

Pin the CDN asset to an exact version and use Subresource Integrity or self-host the dependency.

Unpinned Cargo dependency versions

id: dependencies.cargo-unpinned-versions🔗

MittelPro
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

Cargo.toml dependency with wildcard, bare semver, or unpinned git reference. Pin to an exact version.

Warum das wichtig ist

Unpinned dependency versions make builds non-deterministic and expose the application to unexpected breaking updates or supply-chain attacks.

Was zu tun ist

Pin to an exact semver version (e.g. "1.2.3"). For git dependencies, include a rev, tag, or branch.

Deprecated function usage

id: dependencies.deprecated-functions🔗

NiedrigPro
Gescannte Sprachen:JSTSPythonGoRuby

Was sie findet

Use of a Node.js or library function that has been deprecated.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Replace deprecated functions with their recommended alternatives. Check the library migration guide.

Konfiguration (5 Prüfungen)

Secrets in source

id: configuration.secrets-in-source🔗

HochKostenlos
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Secrets in source rather than environment variables

Warum das wichtig ist

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

Was zu tun ist

Use environment variables instead. Store the secret value in process.env and reference it by key name.

Default credentials

id: configuration.default-credentials🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Default or hardcoded credentials are used instead of unique, environment-specific credentials.

Warum das wichtig ist

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

Was zu tun ist

Change default credentials immediately. Use strong, unique passwords and store them in environment variables.

TLS verification disabled

id: configuration.missing-ssl-verification🔗

HochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

rejectUnauthorized set to false, disabling TLS certificate validation.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Never set rejectUnauthorized to false in production. Use proper TLS certificates.

No environment separation

id: configuration.no-env-separation🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Configuration does not differentiate between development, staging, and production environments.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Create separate config files per environment or use environment variables to differentiate dev/staging/prod settings.

id: configuration.insecure-cookie-flags🔗

MittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Cookie set without explicit security flags (HttpOnly, Secure, SameSite).

Warum das wichtig ist

Weak session identifiers or insecure cookies can be intercepted or predicted by attackers, leading to session hijacking and unauthorized account access.

Was zu tun ist

Set HttpOnly, Secure, and SameSite=Strict on session cookies.

Datenexposition (12 Prüfungen)

Verbose error messages

id: data-exposure.verbose-errors🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Error responses include stack traces or internal details, leaking implementation information to clients.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Catch errors in your middleware and return generic error messages to clients. Log the full error server-side only.

PII in API responses

id: data-exposure.pii-in-responses🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

API responses include personally identifiable information without proper filtering.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Filter API responses to exclude PII fields. Use select or projection to return only necessary fields.

No response filtering

id: data-exposure.no-response-filtering🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

API responses return full database rows without filtering sensitive or unnecessary fields.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Select only the fields you need from database queries. Never return full rows to clients without filtering.

Sensitive columns without protection

id: data-exposure.unprotected-sensitive-sql-columns🔗

🧠 KI-gestütztHochPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Storing highly sensitive fields (like SSNs, cards, or plain API keys) without encryption or hashing poses high data exposure risks.

Warum das wichtig ist

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

Was zu tun ist

Encrypt sensitive data columns at rest, or use hashed/digest representations for fields like passwords or API tokens.

HTML form PII exposure

id: data-exposure.html-form-pii-exposure🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Forms should not keep PII in hidden inputs or expose sensitive autofill settings on fields

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Avoid storing PII in hidden inputs and set autocomplete="off" on sensitive fields. Keep sensitive data server-side when possible.

Secret in plaintext email

id: data-exposure.plaintext-secret-in-email🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Detects license keys, tokens, or API keys rendered in plain-text email bodies without warning that email is not encrypted in transit

Warum das wichtig ist

Sending license keys or credentials in plaintext email bodies exposes them to interception or unauthorized access, as standard email is not encrypted in transit (CWE-319).

Was zu tun ist

Add a warning to the plain-text email body that email is not encrypted in transit. Consider omitting the secret from the plain-text part entirely, or linking to a secure dashboard instead.

Composite PII fields

id: data-exposure.composite-pii🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Multiple PII attributes collected together enabling re-identification

Warum das wichtig ist

Combining seemingly harmless fields can uniquely identify individuals. This violates privacy regulations (GDPR, CCPA) and exposes users to identity theft (CWE-359).

Was zu tun ist

Split or pseudonymise composite PII fields. Avoid storing multiple identifying attributes in the same record or API response.

Derived identifiers

id: data-exposure.derived-identifiers🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Derived or synthetic identifiers that enable record linkage across sessions or datasets

Warum das wichtig ist

Derived identifiers can re-identify pseudonymised users and track them without their consent. This undermines privacy guarantees and may violate regulations (CWE-359).

Was zu tun ist

Avoid creating derived identifiers from user data for tracking or correlation. Use anonymous session tokens that cannot be reversed to identify the user.

Unredacted logs

id: data-exposure.unredacted-logs🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

PII or sensitive data written to logs without redaction

Warum das wichtig ist

Logs are often stored in plaintext, aggregated across services, and accessible to many engineers. Unredacted PII in logs is a frequent source of data breaches and compliance violations (CWE-532).

Was zu tun ist

Redact or mask sensitive fields before logging. Use a structured logging library with automatic PII scrubbing or log only non-sensitive summary data.

Sensitive data in localStorage

id: data-exposure.localstorage-sensitive-data🔗

🧠 KI-gestütztMittelPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Storing sensitive data (password, token, secret) in localStorage is insecure.

Warum das wichtig ist

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

Was zu tun ist

Do not store sensitive data in localStorage. Use httpOnly cookies or secure server-side storage.

Debugger or production debug statement

id: data-exposure.debug-artifacts🔗

🧠 KI-gestütztNiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

Debugger statement or debug import left in production code, potentially exposing runtime state.

Warum das wichtig ist

Improper logging and monitoring configurations can expose sensitive debugging details to attackers or fail to provide alert visibility during active service outages.

Was zu tun ist

Remove debugger statements and debug imports before deploying to production.

Hardcoded IP address

id: data-exposure.hardcoded-ip🔗

🧠 KI-gestütztNiedrigPro
Gescannte Sprachen:JSTSTSXPythonGoPHPRubyJavaRustBash

Was sie findet

A literal IP address in source code, which may leak internal infrastructure details.

Warum das wichtig ist

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

Was zu tun ist

Move IP addresses to configuration or environment variables. Use DNS names where possible.