[php-src] Issue #23015: Matar todo el sistema

[email protected] (gmeue65-cmd) Tue, 4 Aug 2026 03:47:59 +0000
Newsgroups php.bugs
Message-ID <ATszvTf3AIwIjRdAmwD7E7A86vklOE3I591LTaL6siQ@main.internal.php.net>
Issue: https://github.com/php/php-src/issues/23015
Author: gmeue65-cmd

<?php
// 1. Verificar si el sistema ya fue apagado previamente por seguridad
if (file_exists(__DIR__ . '/panic_lock.safe')) {
    http_response_code(503);
    die("CRITICAL SECURITY ERROR: System permanently suspended by security protocols.");
}

// 2. Función para inspeccionar datos en busca de código malicioso
function detect_malicious_payload($data) {
    if (is_array($data)) {
        foreach ($data as $value) {
            if (detect_malicious_payload($value)) return true;
        }
        return false;
    }

    // Patrones regex para detectar SQLi, XSS, Path Traversal y RCE
    $patterns = [
        '/UNION\s+SELECT/i',           // SQL Injection clásico
        '/SELECT\s+.*\s+FROM/i',        // Intentos de extracción SQL
        '/(["\'])\s*(OR|AND)\s*\1\s*=\s*\1/i', // Bypass de autenticación ' OR '1'='1
        '/<script\b[^>]*>(.*?)<\/script>/is',  // XSS por etiquetas script
        '/javascript\s*:/i',           // XSS mediante esquemas URI
        '/(\.\.\/|\.\.\\\\)/',         // Path Traversal (../ o ..\)
        '/(eval|passthru|shell_exec|system|base64_decode)\s*\(/i' // Ejecución remota de comandos
    ];

    foreach ($patterns as $pattern) {
        if (preg_match($pattern, (string)$data)) {
            return true;
        }
    }
    return false;
}

// 3. Evaluar todas las entradas posibles del usuario
$is_malicious = detect_malicious_payload($_GET) || 
                detect_malicious_payload($_POST) || 
                detect_malicious_payload($_COOKIE) ||
                detect_malicious_payload($_SERVER['REQUEST_URI'] ?? '');

// 4. Si se detecta un ataque, activar el bloqueo total e inmutable
if ($is_malicious) {
    // Generar candado físico en el disco
    file_put_contents(__DIR__ . '/panic_lock.safe', 'SYSTEM_KILL_SWITCH_ACTIVATED_BY_INJECTION_ATTACK');
    
    // Opcional: Registrar detalles del atacante antes de morir (para auditoría)
    error_log("ATAQUE DETECTADO - IP: " . ($_SERVER['REMOTE_ADDR'] ?? 'UNKNOWN') . " | URI: " . ($_SERVER['REQUEST_URI'] ?? ''));

    // Destruir la ejecución
    http_response_code(503);
    die("CRITICAL SECURITY ERROR: System permanently suspended by security protocols.");
}
?>

From manual page: https://php.net/function.htmlspecialchars-decode

---