Misiones públicas y directrices

Codificación segura hecha práctica

Explore las pautas de codificación segura para comprender y mitigar las vulnerabilidades del software, como las 10 principales de OWASP, y sumérjase en las misiones de capacitación guiadas para practicar en simulaciones de aplicaciones del mundo real.

배울 BG

Explora todas las misiones

더 보기
생산성을 높이세요
Inyección SQL
Recibimos informes de un usuario que decía que había podido aprovechar una vulnerabilidad de inyección SQL en la función de búsqueda de transacciones de la solución de banca por Internet. Afirmaron que podían ver las transacciones que pertenecían a otros usuarios y señalaron que esta vulnerabilidad podría permitir a un atacante hacer todo tipo de acciones dañinas en la base de datos, como borrar tablas, ver datos de otras tablas, insertar datos, etc. Intenta replicar lo que hizo el usuario en esta misión.
생산성을 높이세요
Spring MVC Request Matchers
En marzo de 2023, Spring publicó una solución para una vulnerabilidad descubierta internamente, denominada CVE-2023-20860, en la que el uso de un comodín doble ** en MVCRequestMatchers podía provocar un desajuste de patrones entre Spring Security y Spring MVC. En última instancia, esto podría provocar que los usuarios obtuvieran acceso no autorizado a ciertos puntos finales. Hemos creado una aplicación bancaria muy simplificada con unos pocos terminales. Siga las instrucciones e intente reproducir el impacto de esta vulnerabilidad de control de acceso.
생산성을 높이세요
Firmas psíquicas: uso de componentes vulnerables conocidos
CVE-333321449 tiene el alias más genial para una vulnerabilidad, Psychic Signatures en Java. ¿Cómo obtuvo ese nombre? Es una referencia a los documentos psíquicos de Doctor Who. Cuando se le muestran a alguien, estos trozos de papel en blanco se rellenan con lo que esperan ver. Algo similar ocurrió en la implementación en Java (versiones 15 a 18) del algoritmo ECDSA, que repercute en la verificación de firmas de los JWT. Podemos enviar una firma no válida, pero Java pensará que es válida. ¿Quieres ver cómo funciona? Vamos a empezar.
생산성을 높이세요
Apache Path Traversal: uso de componentes vulnerables conocidos
El 4 de octubre de 2021, el equipo de Apache publicó la versión 2.4.49 de Apache para solucionar una vulnerabilidad de cruce de rutas y ejecución remota de código en Apache 2.4.48, también conocida como CVE-2021-41773. El 7 de octubre de 2021, publicaron la versión 2.4.51 debido a que la corrección de la revisión 2.4.50 no estaba completa. Esta vulnerabilidad se registró como CVE-2021-42013. Pruebe esta misión para comprobar por sí mismo cómo se puede aprovechar esta vulnerabilidad.
생산성을 높이세요
Log4j: uso de componentes vulnerables conocidos
El anuncio a principios de diciembre de 2021 de un exploit de 0 días (CVE-2021-44228) en la popular biblioteca de registro Log4j supuso una bomba en la comunidad Java. El exploit, denominado Log4Shell, afecta a las versiones 2.0-beta9 a 2.14.1 de Log4j v2 y podría provocar la ejecución remota de código. Hemos creado un entorno para simular el exploit, de modo que puedas ver el impacto de primera mano. Pruébalo ahora.
생산성을 높이세요
Trojan Source: uso de componentes de fuentes no confiables
Uno de nuestros desarrolladores de Viking Bank copió ingenuamente un código de una fuente no confiable en Internet, que podría contener componentes vulnerables, para ayudar a escribir una verificación de autorización administrativa para administrar las tarjetas de crédito. Nos hemos dado cuenta de que los usuarios han cambiado el límite de sus tarjetas de crédito, aunque solo los administradores deberían tener este privilegio. Creemos que hay algún problema con ese código. Prueba la misión de investigar el código.
생산성을 높이세요
Codestashbin - Función de restablecimiento de contraseña insegura
CodeStashBin es una de las empresas de alojamiento de control de versiones de código más grandes del mundo. Se rumorea que el proceso de olvidar la contraseña es defectuoso y presenta una vulnerabilidad insegura en la función de restablecimiento de contraseña. Es posible cambiar la contraseña de un usuario privilegiado y acceder a su cuenta. Participa en esta misión para investigar el problema.
생산성을 높이세요
Secuencias de comandos entre sitios (XSS) en 'ChatterGPT'
Esta misión revela la interfaz familiar de un LLM popular y utiliza un fragmento de código real generado a finales de noviembre de 2023. Los usuarios pueden interpretar este fragmento e investigar cualquier posible problema de seguridad si se utilizara para el propósito previsto.

Consulta todas las directrices

탐색:
필터 숨기기
선정
필터 표시
선정
필터 지우기
에티켓
슈퍼 아이콘 [★]
테마
더 보기

Registro y supervisión insuficientes

Mejores prácticas:

Registro de auditoría para funciones sensibles
Registro de errores
Almacenamiento de registros en una ubicación centralizada
Conserve los registros durante un período de tiempo definido
Audite regularmente los registros de PII

El registro y la supervisión suelen ser una idea tardía cuando algo ya ha salido mal, pero en realidad, no garantizar que se lleve a cabo un registro y una supervisión adecuados puede resultar muy costoso. Por un lado, cuando se produce un incidente (ya sea relacionado con la seguridad o no), tener pocos registros o ninguno hace que sea imposible averiguar qué es lo que realmente ha ocurrido. En el otro extremo, registrar demasiados datos puede generar problemas de privacidad y, a su vez, provocar problemas con los reguladores. Lea nuestra guía sobre las mejores prácticas para evitar un registro y una supervisión insuficientes.

Ver las directrices

알려진 취약점이 있는 구성 요소 사용

{
«dependencias»: {
«foo»: «1.0.0 - 2.9999.9999",
«barra»: «>=1.0.2 <2.1.2»
}
}

La mayoría de las aplicaciones utilizan grandes cantidades de componentes de terceros. Estos componentes proporcionan todo tipo de funciones, desde el registro, la creación de plantillas, el acceso a las bases de datos y mucho más. Esto facilita mucho el desarrollo de software y ahorra mucho tiempo. Pero también están hechos por personas, lo que significa que algunos inevitablemente contendrán vulnerabilidades. Lea la guía para obtener más información.

Ver las directrices

Inyección SQL

importar mysql.connector
db = mysql.connector.connect
Práctica #Bad. ¡Evita esto! Esto es solo para aprender.
(host="localhost», user="newuser», passwd="pass», db="sample»)
cur = db.cursor ()
name = raw_input ('Ingresar nombre: ')
cur.execute («SELECT * FROM sample_data WHERE Name = '%s';»% name) para la fila de cur.fetchall (): print (row)
db.cerrar ()

La inyección SQL (SQLi) inyecta código en las sentencias SQL para atacar y recopilar información importante de una aplicación. Es una vulnerabilidad de seguridad web. Es la técnica de hackeo más común que manipula la base de datos y extrae información crucial de ella.

Ver las directrices

Configuración incorrecta de seguridad

Muchos marcos también tienen un conjunto de puntos finales que se pueden habilitar para monitorear la aplicación, ya sea en un entorno de producción o de prueba/desarrollo. Estos pueden incluir:

Métricas (Prometheus)
Registros
Información sobre el entorno
Mapeos de ruta/URL

La configuración incorrecta de seguridad es una especie de término general que abarca las vulnerabilidades comunes que entran en juego debido a los ajustes de configuración de una aplicación, en lugar de a un código incorrecto. Se trata de un tema muy amplio y depende en gran medida de factores como la tecnología de que dispongas. A menudo, abordar estos problemas es algo que parece sencillo, como cambiar un archivo de configuración o incluso una sola línea de código, pero el impacto y las consecuencias de estas vulnerabilidades pueden ser graves. Lea nuestra guía para obtener más información sobre esta vulnerabilidad y cómo mitigarla.

Ver las directrices

Falsificación de solicitudes del lado del servidor

ts
let url = request.params.url;

let response = http.get (url);
let render = response.render ();

devuelve render.export ();

Las vulnerabilidades de falsificación de solicitudes del lado del servidor se producen cuando un usuario puede hacer que una aplicación realice solicitudes HTTP a un dominio determinado por el atacante. Si una aplicación tiene acceso a redes privadas o internas, un atacante también podría provocar que la aplicación realizara solicitudes a servidores internos. En esta guía, analizaremos esto más detenidamente con algunos ejemplos para entender mejor cómo se ve en acción.

Ver las directrices

Almacenamiento de contraseñas

기능 암호화 해시 암호 해시 속도 매우 빠름 의도적으로 느림 작업 계수 조정 가능 아니오 예

Si tu aplicación es auténtica para los usuarios, lo más probable es que también se ocupe de las contraseñas. Gestionar las contraseñas de los usuarios es un asunto muy importante y gestionarlas de forma adecuada lo es aún más. Es difícil imaginar un escenario peor que el ataque a una aplicación y la filtración de las contraseñas de los usuarios a través de Internet para que todos las vean. ¿Cómo se pueden almacenar las contraseñas de forma segura y de acuerdo con las mejores prácticas? Vamos a echar un vistazo a algunas maneras.

Ver las directrices

Asignación masiva

html
<form method="POST">
<input name="Id" type="hidden" value="666">
<input name="Name" type="text" value="Bad guy">
<input name="EmailAddress" type="text" value="hacker@attacker.com">
<input name="IsAdmin" type="hidden" value="true">
<input type="submit">
</form>

La asignación masiva es una vulnerabilidad en la que los puntos finales de la API no restringen qué propiedades de su objeto asociado puede modificar un usuario. Esta vulnerabilidad se puede producir cuando se utiliza una biblioteca o marco que permite vincular automáticamente los parámetros HTTP a un modelo que, a continuación, se utiliza sin ningún tipo de validación. En ocasiones, el uso del enlace automático de una solicitud a un objeto puede resultar extremadamente útil, pero también puede provocar problemas de seguridad si el modelo tiene propiedades que no están pensadas para que el usuario pueda acceder a ellas. Lea la guía para obtener más información.

Ver las directrices

Error de configuración de seguridad: XXE detallado

xml
<?xml version="1.0" ?>
<!DOCTYPE outerElement [
   <!ENTITY externalEntity SYSTEM  "file:///etc/passwd" > ]>
<outerElement>&externalEntity;</outerElement>

La clase de vulnerabilidad «XML External Entities» (XXE) es un error de configuración de seguridad que involucra a los analizadores XML. El estándar XML incluye formas de hacer referencia a «entidades», como archivos y URL. Los analizadores suelen resolver completamente las entidades externas de forma predeterminada, lo que significa que los documentos XML pueden dar lugar a la revelación de archivos y otra información confidencial a posibles atacantes. Lea la guía completa para obtener más información.

Ver las directrices

Inyección: recorrido de trayectoria

falso
let BaseFolder = «/var/www/api/documents/»;
let path = baseFolder + request.params.filename;

devuelve el archivo.read (ruta);

Path Traversal es otro tipo de vulnerabilidad de inyección bastante común. Suelen ocurrir cuando la construcción de un URI (ya sea para una URL, una ruta de archivo u otro tipo) no garantiza adecuadamente que la ruta completamente resuelta no apunte fuera de la raíz de la ruta deseada. El impacto de una vulnerabilidad de cruce de rutas depende en gran medida del contexto en el que se produce el cruce y del grado de fortalecimiento general que se le haya aplicado. Lee la guía para obtener más información.

Ver las directrices

Autenticación y autorización

cs

//Asegúrese de que el comportamiento predeterminado es autenticar las solicitudes y comprobar si son de administrador
[Autenticar]
[Autorizar («Administrador»)]
clase pública SecureController: Controller
{

}

clase pública MyController: SecureController
{

//Anula el atributo Authorize heredado para permitir que cualquier usuario acceda a la página

Ver las directrices

Inyección - XSS

```html
<!--- UNSAFE: The htmlSnippet will get interpreted without any escaping --->
@Html .Raw (fragmento HTML)
```

El Cross-Site Scripting, también conocido como XSS, es otro tipo de vulnerabilidad de inyección que lleva a la evaluación de un script controlado por un atacante en el navegador de otro usuario. El XSS también puede considerarse una vulnerabilidad de inyección de HTML/JavaScript. Veamos los tipos de XSS que puedes encontrar.

Ver las directrices

Inyección 101

Algunos de los tipos de inyección más comunes son:

Inyección SQL
Secuencias de comandos entre sitios (HTML/Javascript injection)
Ruta transversal (inyección de ruta/URL)
Inyección de comandos
Inyección de código

Una de las clases de vulnerabilidades más conocidas suelen ser las vulnerabilidades de inyección, especialmente, y no sorprende a nadie, la indiscutible hija del póster: la inyección SQL. Es difícil evitar oír hablar de la inyección de SQL en el mundo de la tecnología, así que ahora vamos a hablar de ello. Siga leyendo para obtener una breve introducción a los defectos de la inyección.

Ver las directrices

Cargue de archivos

cadena pública Cargar imagen de perfil (archivo de formulario archivo subido)
{
//Generar la ruta para guardar el archivo subido en
var path = $». /uploads/avatars/ {request.user.id}/{UploadedFile.filename}»;

//Guarda el archivo
var localFile = archivo.openWrite (ruta);
LocalFile.write (UploadedFile.readToEnd ());
archivo local.flush ();
local.close file ();

//Actualiza la imagen de perfil
UserProfile.UpdateImagen de perfil de usuario (request.user, ruta)

ruta de regreso;
}

Es muy común que las aplicaciones, en algún momento u otro, necesiten permitir a los usuarios cargar un archivo (ya sea para usarlo o solo para almacenarlo) en algún lugar de la aplicación. Si bien parece bastante sencillo, la forma en que se implementa esta función puede ser bastante crítica debido a los posibles riesgos asociados a la forma en que se gestionan las subidas de archivos. Lee la guía para obtener más información.

Ver las directrices

Inyección de comandos

let ip = request.params.ipAddress;

sistema («ping" + ip);

Veamos Command Injection por sí solo. Nos centraremos principalmente en algunos ejemplos diferentes para que sea más fácil ver cómo se ve en acción. Por lo tanto, como repaso rápido, las vulnerabilidades de la inyección de comandos se producen cuando la entrada del usuario utiliza parte de un comando del sistema operativo. Lea la guía para obtener más información.

Ver las directrices