🐈‍⬛
H4CKdotCL
Laboratorio
  • 🪅Bienvenidos al Book
  • Certificaciones
    • ⏳Junior Penetration Tester - eJPTv2
    • 🥉Ethical Hacking Professional Certification - CEHPC
    • 🥉Cybersecurity Awareness Professional Certification - CAPC
  • Metodología y Fases de Hacking Ético
    • Metodologías
      • Metodología OWASP (Open Web Application Security Project)
      • Metodología PTES
      • Metodología ISSAF
      • Metodología OSSTMM
    • Recopilación Pasiva de Información
      • Sublist3r
      • Httpx
      • theHarvester
      • Google Dorks
      • Wafw00f
      • Shodan
      • Whatweb
    • Recopilación Activa de Información
      • enum4linux
      • Guía de uso para Gobuster
      • Nmap (Network Mapper)
      • Wfuzz
      • SecList
      • FFUF
      • SMBClient
      • CrackMapExec
      • SMBMap
      • WPScan
      • Steghide
      • subfinder
    • SQLMap
    • Hydra
  • Utilidades
    • Docker: Potenciando Laboratorios de Pentesting
    • 📖Ejemplos de informes de Hacking Ético y auditoría de seguridad
  • Vulnerabilidades Web
    • IDOR (Insecure Direct Object Reference)
    • SSRF (Server-Side Request Forgery)
    • CSRF (Cross-Site Request Forgery)
    • File Upload Vulnerabilities
    • LFI (Local File Inclusion)
    • RFI (Remote File Inclusion)
    • XSS (Cross-Site Scripting)
    • XXE (XML External Entity)
    • Template Injections
    • Clickjacking
    • Broken Access Control
    • SQL Injection (Inyección SQL)
    • NoSQL Injection (Inyección NoSQL)
    • LDAP Injection (Inyección LDAP)
    • Log Poisoning
    • Open Redirect Bypass
Con tecnología de GitBook
En esta página

¿Te fue útil?

  1. Vulnerabilidades Web

Broken Access Control

🌐 Vulnerabilidad: Broken Access Control (Control de Acceso Roto)


🕵️‍♂️ ¿Qué es Broken Access Control?

La vulnerabilidad Broken Access Control ocurre cuando una aplicación no implementa correctamente controles de acceso, lo que permite a los usuarios realizar acciones o acceder a recursos para los cuales no tienen permisos. Esto incluye acceso no autorizado a datos sensibles, operaciones administrativas o recursos de otros usuarios.


⚙️ ¿Cómo se produce?

  1. Ausencia de validación de permisos: El servidor no verifica si el usuario tiene autorización para acceder a un recurso o realizar una acción.

  2. Controles de acceso mal implementados: Los permisos están definidos, pero no se aplican correctamente.

  3. Escalada de privilegios: Un usuario con permisos limitados manipula solicitudes para obtener acceso administrativo.

  4. Errores en la lógica de acceso: Como permitir acceso basado solo en roles mal configurados o falta de comprobación en rutas sensibles.


🛠️ Mecanismo de ataque

  1. IDOR (Insecure Direct Object Reference):

    • El atacante accede a recursos de otros usuarios manipulando identificadores.

    http://victim.com/orders/123

    Cambiado a:

    http://victim.com/orders/124
  2. Manipulación de roles:

    • El atacante modifica su rol o privilegios en la solicitud:

    {
        "role": "admin"
    }
  3. Acceso directo a rutas protegidas:

    • El atacante accede a rutas administrativas sin restricciones:

    http://victim.com/admin

🎯 Impacto

  • Exposición de datos sensibles: Información personal, financiera o corporativa.

  • Modificación no autorizada: Cambiar configuraciones, datos de otros usuarios o contenido sensible.

  • Escalada de privilegios: Permitir a usuarios sin permisos realizar acciones administrativas.

  • Eliminación de datos: Un atacante puede eliminar recursos críticos.


📉 Puntaje CVSS v3

  • Vector de ataque: Red (Explotable remotamente)

  • Complejidad del ataque: Baja

  • Impacto en confidencialidad: Alto

  • Impacto en integridad: Alto

  • Impacto en disponibilidad: Medio a alto

  • Puntaje CVSS v3: 8.0 - 10.0 (Crítico) 🔥


🧑‍💻 Ejemplo práctico

Código vulnerable en PHP:

<?php
    $user_id = $_GET['user_id'];
    $query = "SELECT * FROM orders WHERE user_id = $user_id";
    $result = $db->query($query);
    echo json_encode($result->fetch_assoc());
?>

📌 Ataque: El atacante manipula la URL para acceder a pedidos de otro usuario:

http://victim.com/orders?user_id=5

Esto devuelve datos no autorizados.


🛡️ ¿Cómo prevenir Broken Access Control?

1️⃣ Validar siempre los permisos

Verifica que el usuario tenga autorización antes de acceder o modificar recursos:

<?php
    session_start();
    $current_user_id = $_SESSION['user_id'];
    $requested_user_id = $_GET['user_id'];

    if ($current_user_id != $requested_user_id) {
        die("Acceso denegado.");
    }
?>

2️⃣ Implementar controles en el servidor

Nunca confíes en controles implementados únicamente en el cliente (JavaScript). Asegúrate de validar en el backend.

3️⃣ Usar principios de menor privilegio

Diseña roles y permisos de manera que cada usuario tenga acceso solo a lo estrictamente necesario.

4️⃣ Restringir rutas críticas

Configura reglas específicas para proteger rutas administrativas:

  • En Apache:

    <Directory "/var/www/admin">
        Require ip 192.168.1.0/24
    </Directory>
  • En Express (Node.js):

    app.use('/admin', (req, res, next) => {
        if (!req.user.isAdmin) return res.status(403).send('Access denied.');
        next();
    });

5️⃣ Auditorías y pruebas de seguridad

Realiza pruebas de control de acceso con herramientas como Burp Suite para detectar rutas o funciones desprotegidas.

6️⃣ Usar bibliotecas y frameworks seguros

Utiliza middleware o extensiones que gestionen roles y permisos de manera automatizada, como Laravel Gates o Spring Security.


💡 Dato extra: Los controles de acceso rotos son la causa principal de escaladas de privilegios y uno de los problemas más destacados en el OWASP Top 10.

🚨 Nota importante: Las rutas ocultas mediante métodos como robots.txt o enlaces no visibles en el frontend no son un sustituto para un control de acceso adecuado.

AnteriorClickjackingSiguienteSQL Injection (Inyección SQL)

Última actualización hace 6 meses

¿Te fue útil?