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-75827 — Preuve de concept et labo pour CVE-2026-75827, une écriture de fichier arbitraire dans Grav via error_log de données dynamiques Blueprint, avec script de reproduction et labo Docker. | Kitploit
Outils/GitHubGitHub/abraxas/cve-2026-75827
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubabraxas/cve-2026-75827

CVE-2026-75827

Preuve de concept et labo pour CVE-2026-75827, une écriture de fichier arbitraire dans Grav via error_log de données dynamiques Blueprint, avec script de reproduction et labo Docker.

Voir le dépôt
1il y a 9h 41mPas 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

Abraxas Labs — CVE-2026-75827

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  CVE-2026-75827

CVE-2026-75827

grav 2.0.13 — getgrav

Grav avant 2.0.15 contient une vulnérabilité d'écriture arbitraire de fichier dans la validation des fonctions nues des données dynamiques des Blueprints, qui utilise une liste de refus incomplète au lieu d'une liste d'autorisation positive. Les attaquants disposant d'un accès d'édition de page ou de configuration de blueprint peuvent invoquer la fonction error_log via une directive de données pour ajouter des charges utiles PHP à des fichiers accessibles par le web, permettant ainsi l'exécution de code à distance.

CVECVE-2026-75827 · CVE.org
CWECWE-94
CVSSÉlevé : 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Produitgrav
Affectétoutes les versions jusqu'à 2.0.13 (incluse)
Corrigé2.0.15 et ultérieures
Authaucune (voir la cartographie des sources)
Lab127.0.0.1 uniquement · pack de divulgation fournisseur/client, pas un scanner

Avis (issu de la cartographie des sources)

L'écriture arbitraire de fichier se fait via error_log par le biais de data-options@ dans un blueprint de formulaire, et non par une action d'upload=. Le HTTP est GET /poc-form puis GET /poc-witness.txt.


Point d'entrée

  • Méthode : GET
  • Chemin : /poc-form
  • Routeur : Page de formulaire publique dont le blueprint contient data-options@: ['error_log', witness, 3, poc-witness.txt]. Le plugin Form Blueprint::getBlueprint() → dynamicData → call_user_func_array('error_log', ...). L'édition de page (seed du lab) a placé la directive ; le GET déclenche l'écriture. Puis GET /poc-witness.txt.
  • Notes : CVE-2026-75827 CWE-94 : Grav <=2.0.14 la branche fonction nue de Blueprint::isSafeDynamicCall() utilise la liste de refus Utils::isDangerousFunction ; error_log est omise. 2.0.15 met les fonctions nues sur liste d'autorisation. Le témoin est POCWitness75827 dans GET /poc-witness.txt (ajout via error_log, pas un shell). Ne pas écrire de PHP system()/exec().

Chaîne d'appel

  • Seed du lab : utilisateur admin + plugin Form + page 03.poc-form avec data-options@: error_log
  • GET /poc-form → Form::getBlueprint() → Blueprint::dynamicData → isSafeDynamicCall('error_log') true → error_log(witness, 3, poc-witness.txt)
  • GET /poc-witness.txt → POCWitness75827

Préconditions du lab

  • Squelette admin Grav 2.0.13 (plugin form activé)
  • Page /poc-form avec data-options@: ['error_log', 'POCWitness75827\n', 3, 'poc-witness.txt']
  • Racine web accessible en écriture pour que error_log puisse créer poc-witness.txt
  • Admin labadmin/labadmin existant (édition de page) ; le GET du formulaire est le point de chute

Témoin

Le corps de GET /poc-witness.txt contient POCWitness75827. Le HTML de la page d'accueil ou un 404 vide n'est pas le témoin d'écriture de fichier.

Échec

  • HTML générique 200 de la page d'accueil Grav sans le fichier témoin
  • 404 poc-witness.txt
  • reverse shell ou connexion sortante
  • charge utile PHP system()/exec()

Correctif / remédiation

À faire en premier : Mettre à jour grav vers 2.0.15 ou une version plus récente.

Vérifier après la mise à jour

  • Relancer CVE-2026-75827-Abraxas-Labs.py contre la version corrigée : le témoin cartographié ne doit pas apparaître.
  • Confirmer l'avis fournisseur / le changeset dans l'arborescence déployée (voir références).
  • Une signature WAF est un délai, pas un correctif.

Si vous ne pouvez pas mettre à jour immédiatement

  • Désactiver ou isoler le composant affecté.
  • Rechercher la condition témoin en production (nouveaux utilisateurs privilégiés, fichiers inattendus, lignes injectées — tout ce que la cartographie de cette CVE nomme).

Reproduction (lab autorisé)

Ciblez uniquement http://127.0.0.1:8088 (ou le loopback que vous avez lié). Ne pointez pas ce script vers Internet.

root@kitploit:~
python3 CVE-2026-75827-Abraxas-Labs.py

Le succès correspond au témoin ci-dessus dans le corps de la réponse. Un HTML 200 générique ne l'est pas.


Images du lab

Pile loopback utilisée pour la reproduction. Images officielles sauf si un Dockerfile dans ce dossier construit depuis les sources.

  • lab/docker-compose.yml
  • lab/docker-compose.override.yml
  • lab/php-lab.ini
  • lab/Dockerfile
root@kitploit:~
cd lab
docker compose up --force-recreate

Liez l'arborescence du produit vulnérable à côté de Compose si le YAML monte un répertoire local (zip du plugin / tag source issu du tableau des versions). Ne publiez rien d'autre que 127.0.0.1.


Références

  • CVE-2026-75827 · NVD

  • CVE-2026-75827 · CVE.org

  • github.com/getgrav/grav/security/advisories/GHSA-f8wv-xp27-6gq7

  • www.vulncheck.com/advisories/grav-before-arbitrary-file-write-via-error-log

  • github.com/CVEProject/cvelistV5/tree/main/cves/2026/75xxx/CVE-2026-75827.json

  • nvd.nist.gov/vuln/detail/CVE-2026-75827

  • github.com/advisories/GHSA-f8wv-xp27-6gq7

  • Abraxas Labs : abraxaslabs.tech · github.com/abraxas · @abraxas_null


Enregistrements (structurés)

root@kitploit:~
# CVE-2026-75827  (structured records)

- input: `https://nvd.nist.gov/vuln/detail/CVE-2026-75827`
- CWE: CWE-94
- published: 2026-08-18T12:19:32.553

## NVD description

Grav before 2.0.15 contains an arbitrary file write vulnerability in the Blueprint dynamic-data bare-function validation that uses an incomplete denylist instead of a positive allowlist. Attackers with page-edit or blueprint-config access can invoke the error_log function through a data directive to append PHP payloads to web-accessible files, achieving remote code execution.

## MITRE description

Grav before 2.0.15 contains an arbitrary file write vulnerability in the Blueprint dynamic-data bare-function validation that uses an incomplete denylist instead of a positive allowlist. Attackers with page-edit or blueprint-config access can invoke the error_log function through a data directive to append PHP payloads to web-accessible files, achieving remote code execution.

## Affected

- getgrav grav 0 affected, 2.0.15 unaffected
- OSV: 

## References (JSON sources only)

- https://github.com/getgrav/grav/security/advisories/GHSA-f8wv-xp27-6gq7
- https://www.vulncheck.com/advisories/grav-before-arbitrary-file-write-via-error-log
- https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/75xxx/CVE-2026-75827.json
- https://nvd.nist.gov/vuln/detail/CVE-2026-75827
- https://github.com/advisories/GHSA-f8wv-xp27-6gq7

## GitHub advisory

Grav: Blueprint dynamic-data bare-function branch is denylist-gated and omits error_log, giving arbitrary file write

## Affected versions and vulnerable location

- Confirmed on grav core at `78ebfc1` (tag 2.0.13).
- Sinks:
  - `system/src/Grav/Common/Data/Blueprint.php:455-458` `call_user_func_array($o, $params)` (bare-function dynamic-data provider).
  - Twin: `system/src/Grav/Framework/Flex/FlexDirectory.php:936-938` `call_user_func_array($function, $params)`.
- Validation gate: `Blueprint::isSafeDynamicCall()` at `Blueprint.php:514-536`.
  - `Class::method` branch (`:514-527`) uses a strict positive allowlist `self::$allowedDynamicCallables`.
  - Bare-function branch (`:530-534`) uses only a denylist: `if (is_string($function) && Utils::isDangerousFunction($function)) return false; return !self::paramsContainDangerousCallable($params);`.
- Denylist: `Utils::isDangerousFunction()` (`system/src/Grav/Common/Utils.php`, list around `:2020-2270`).

## Root cause

GHSA-7pgq/CVE-2026-64850 hardened the `Class::method` half of the dynamic-callable validation to a positive allowlist because a page-edit account could otherwise name any static method as a provider and reach file/secret gadgets. The bare-function half was left on a denylist (`isDangerousFunction`). Any bare PHP function not on that list executes.

`error_log` is not on the denylist (verified: no occurrence in `Utils.php`). `error_log($message, 3, $destination)` appends attacker-controlled `$message` to attacker-controlled file `$destination`, an arbitrary-file-append primitive. `paramsContainDangerousCallable()` (`:587-603`) only scans params for dangerous callable strings, so a PHP payload string and a destination path both pass. (`stream_socket_client`, `dl`, and `mb_send_mail` are likewise absent, giving SSRF/other primitives.)

## Attacker model

The same surface the published dynamic-data advisories accept as reachable: a `data-*@` directive in a form blueprint the Form plugin assembles from page frontmatter (GHSA-fj2p), or a `data@` field in a Flex directory/pages/users blueprint (GHSA-c4wf). A page-edit / blueprint-config account, no shell.

## Reachability trace

1. Author a blueprint field with a bare-function data directive, e.g.
   `data-options@: ['error_log', '<?php system($_GET[0]); ?>', 3, 'user/data/x.php']`.
2. `Blueprint::init()` resolves the directive; `isSafeDynamicCall('error_log', $params)` reaches the bare-function branch (`:530`), `isDangerousFunction('error_log')` is false, `paramsContainDangerousCallable([...])` is false (no callable strings),

Avertissement

Ce pack est destiné au fournisseur, au propriétaire du site et aux labs sous licence. Le script communique avec 127.0.0.1. L'utiliser contre des systèmes que vous ne possédez pas n'est pas autorisé par Abraxas Labs. Aucune garantie.

abraxaslabs.tech · github.com/abraxas · @abraxas_null

Télécharger l’outil