Referencia de comprobaciones de Seaworthy

Cada comprobación que ejecuta Seaworthy, explicada. Haz clic en cualquier comprobación para ver qué encuentra, por qué importa y cómo arreglarla.

Seguridad (74 comprobaciones)

Hardcoded secrets

id: security.hardcoded-secrets🔗

CríticaGratis
Idiomas analizados:All

Qué encuentra

API keys, tokens, passwords, connection strings in source

Por qué importa

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

Qué hacer

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

Missing authentication

id: security.auth-missing-endpoints🔗

CríticaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Route handler lacks authentication middleware, leaving endpoints unprotected.

Por qué importa

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

Qué hacer

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

SQL injection surface

id: security.sql-injection-surface🔗

CríticaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaSQL

Qué encuentra

Raw string concatenation in SQL queries

Por qué importa

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

Qué hacer

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🔗

CríticaGratis
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Detects OS command execution with potentially unsafe arguments

Por qué importa

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).

Qué hacer

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🔗

CríticaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Detects include/require with user-controlled or dynamic paths

Por qué importa

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

Qué hacer

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🔗

CríticaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

CríticaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Detects password values assigned directly in source code

Por qué importa

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

Qué hacer

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🔗

CríticaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaGratis
Idiomas analizados:All

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJava

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaGratis
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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

Shell arbitrary evaluation

id: security.shell-arbitrary-evaluation🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Shell eval or source command uses an unquoted dynamic argument.

Por qué importa

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).

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Detects redirects that may use user-controlled URLs

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Detects file uploads that use user-controlled destination paths

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Permissive grants

id: security.permissive-grants🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

JWT allows algorithm "none"

id: security.jwt-alg-none🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

AltaGratis
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaGratis
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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

Untrusted deserialization

id: security.untrusted-deserialization🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Dangerous eval usage

id: security.dangerous-eval🔗

AltaGratis
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

HTML mixed content

id: security.html-mixed-content🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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.

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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

Open redirect via tainted data

id: security.taint-open-redirect🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

State-changing route handler without visible CSRF token verification.

Por qué importa

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.

Qué hacer

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

Weak session identifier

id: security.weak-session-id🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Session identifier derived from user-controlled or predictable input.

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Rails insecure session config

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

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Usage of unsafe blocks without a preceding safety documentation comment.

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

GraphQL server exposes introspection without disabling it for production environments

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

HTTP method override

id: security.http-method-override🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

HTTP URL without TLS

id: security.http-no-tls🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Hardcoded HTTP URL that should use HTTPS for transport security.

Por qué importa

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

Qué hacer

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

Weak encryption mode

id: security.weak-encryption-mode🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Weak hash algorithm

id: security.weak-hash-algorithm🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Unsafe document.write usage

id: security.no-document-write🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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

HTML javascript URI

id: security.html-javascript-uri🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

GitHub Actions workflow grants overly broad or undeclared default permissions

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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

Resiliencia (19 comprobaciones)

No input validation

id: resilience.no-input-validation🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Empty catch blocks swallow errors without handling

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Broad data mutation

id: resilience.sql-broad-mutation🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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.

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Retry loops without jitter cause thundering herd

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Missing circuit breaker around external calls

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Retry loops without max-attempts

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

ORM N+1 query pattern

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

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

🧠 Asistido por IABajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IABajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

HTTP client call without an explicit timeout configuration.

Por qué importa

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

Qué hacer

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

Ops (15 comprobaciones)

Secrets in Dockerfile ENV

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

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Missing observability

id: ops.missing-observability🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

No metrics, tracing, or structured telemetry hooks

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Hardcoded secret paths impeding automated rotation

Por qué importa

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).

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Debug / verbose logging enabled in production config or source code

Por qué importa

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

Qué hacer

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

Hardcoded localhost

id: ops.hardcoded-localhost🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

localhost URL is hardcoded rather than configured via environment variables.

Por qué importa

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

Qué hacer

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

No health check endpoint

id: ops.no-health-check🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Missing structured logging

id: ops.missing-structured-logging🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Dockerfile missing HEALTHCHECK

id: ops.dockerfile-no-healthcheck🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

Próximamente - estamos escribiendo explicaciones detalladas para cada comprobación.

Qué hacer

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🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Server port number hardcoded rather than configured via environment variables.

Por qué importa

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

Qué hacer

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

Insecure file permissions

id: ops.insecure-file-permissions🔗

BajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Dependencias (10 comprobaciones)

Missing lockfile

id: dependencies.missing-lockfile🔗

AltaGratis
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaGratis
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

Dependencies have known security vulnerabilities with published CVEs.

Por qué importa

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

Qué hacer

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

HTML CDN vulnerable versions

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

AltaPro
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaGratis
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

AltaGratis
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Unpinned dependency versions

id: dependencies.unpinned-versions🔗

MediaPro
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

MediaPro
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

BajaPro
Idiomas analizados:JSTSPythonGoRuby

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Configuración (5 comprobaciones)

Secrets in source

id: configuration.secrets-in-source🔗

AltaGratis
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Secrets in source rather than environment variables

Por qué importa

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

Qué hacer

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

Default credentials

id: configuration.default-credentials🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

TLS verification disabled

id: configuration.missing-ssl-verification🔗

AltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

rejectUnauthorized set to false, disabling TLS certificate validation.

Por qué importa

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

Qué hacer

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

No environment separation

id: configuration.no-env-separation🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

id: configuration.insecure-cookie-flags🔗

MediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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

Exposición de datos (12 comprobaciones)

Verbose error messages

id: data-exposure.verbose-errors🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

API responses include personally identifiable information without proper filtering.

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAAltaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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).

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

Multiple PII attributes collected together enabling re-identification

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

PII or sensitive data written to logs without redaction

Por qué importa

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).

Qué hacer

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🔗

🧠 Asistido por IAMediaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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🔗

🧠 Asistido por IABajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

Remove debugger statements and debug imports before deploying to production.

Hardcoded IP address

id: data-exposure.hardcoded-ip🔗

🧠 Asistido por IABajaPro
Idiomas analizados:JSTSTSXPythonGoPHPRubyJavaRustBash

Qué encuentra

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

Por qué importa

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

Qué hacer

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