Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
stirling-storage-folder-idor — Stirling-PDF v3.2.0 - Élevée - À distance - IDOR - la racine de stockage du dossier de traitement liste et écrase les PDF des pairs | Kitploit
Outils/GitHubGitHub/abraxas/stirling-storage-folder-idor
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionLabs et Pratique
GitHubabraxas/stirling-storage-folder-idor

stirling-storage-folder-idor

Stirling-PDF v3.2.0 - Élevée - À distance - IDOR - la racine de stockage du dossier de traitement liste et écrase les PDF des pairs

Voir le dépôt
3il y a 1 jourPas 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 - stirling-storage-folder-idor

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  stirling-storage-folder-idor

stirling-storage-folder-idor

Stirling-PDF 3.2.0 - Stirling Tools

Classe : IDOR. Portée : ROLE_USER distant.

POST /api/v1/processing-folders n'a pas de @PreAuthorize au-delà d'un utilisateur connecté. FolderAccessGuard implique l'intégralité du basePath du stockage local (./storage) même lorsque policies.allowedFolderRoots est vide. LocalStorageProvider écrit {ownerId}/{uuid}_{filename}. Un ROLE_USER peut définir directory: "storage/<victimUserId>", lister les PDF de ce propriétaire et les balayer sur place avec replace=true.

L'accès direct à /api/v1/storage/files/{id} est corrigé (findByIdAndOwner). Le GET de lab sur le fichier de la victime en tant que pair renvoie 403. Le résidu est la racine implicite du dossier de traitement, pas l'API CRUD de stockage.

Un ROLE_USER liste les noms des PDF stockés d'un autre utilisateur et écrase ces blobs. Le téléchargement de la victime renvoie le fichier altéré.

IDpas encore de CVE
CWECWE-639 / CWE-73
CVSS7.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:N
ProduitStirling-PDF
Affectév3.2.0 (a7e593728dd9aa81e75318a949789d3c2e9ee754), image stirlingtools/stirling-pdf:3.2.0-fat, login-on, storage.enabled=true
AuthROLE_USER sur l'équipe par défaut
LicenceGNU Affero GPL v3.0
Lab127.0.0.1:18154 uniquement

Résidu de la série Stirling-PDF v3.2.0 leftovers. Frère : stirling-h2-import-leftover (H2 CREATE OR REPLACE ALIAS). Ce pack est l'IDOR de stockage.

Ce qu'un attaquant peut faire

Tout humain ROLE_USER connecté sur un déploiement login-on proprietary/fat avec stockage local activé (valeur par défaut du template). Le compose officiel est login-off plus DISABLE_ADDITIONAL_FEATURES=true ; ce déploiement renvoie 403 sur /api/v1/storage et omet ce contrôleur. Le déploiement HIT est le template login-on plus fat.

Table des privilèges (exhaustive). Même niveau que Signal-Server Dropwizard admin.

AxeMéthode + cheminAccordeProvenance
ReconROLE_USER GET /api/v1/user/usersuserId numérique pour admin, pair et STIRLING-PDF-BACKEND-API-USERProuvé en lab
ReconPOST /api/v1/processing-folders {directory:"storage/1"} puis GET /api/v1/processing-folders/{id}/filesNom, taille, mtime du PDF stocké de l'admin (5341de35-8729-49cf-92d0-c8284e05bfc5_victim-lab.pdf)Prouvé en lab
IntégritéPOST /api/v1/processing-folders/{id}/sweep avec /api/v1/security/add-watermark puis Range GET /api/v1/storage/files/1/download de la victimeRéécriture sur place. Le 206 / 3450 octets de la victime contient STIRLING-STORAGE-FOLDER-IDOR-WITNESSProuvé en lab (replace=true)
Confidentialitémême sweep plus un outputId d'équipe / étape sortante que l'attaquant peut lireCopie des octets du PDF de la victimeDéduit. Non requis pour le listing/écrasement

Reste fermé sur ce pin

AxeMéthode + cheminPourquoi c'est fermé
ReconGET /api/v1/storage/files/{id} d'un fichier non partagé403 Access denied. Prouvé en labo sur l'id de fichier 1
Recon/api/v1/storage/** sans authentification403 lorsque la connexion est désactivée (ensureStorageEnabled)
IntégritéCRUD d'UUID de dossier entre propriétairesfindByIdAndOwner
IntégritéLocalStorageProvider .. / clé absoluePath.startsWith(basePath) après normalisation
Intégritéimage ultra-litecontrôleur de dossier de traitement propriétaire absent

GET /api/v1/user/users listant STIRLING-PDF-BACKEND-API-USER constitue un IOC supplémentaire. Je ne l'ai pas signalé comme un résidu à part entière. Le téléchargement de la victime sans plage renvoie une erreur 500 après écrasement, car FileStorageController annonce toujours le sizeBytes d'origine en base de données. Le téléchargement par plage fonctionne. Le texte du filigrane est en Identity-H dans FlateDecode ; l'oracle décompresse les flux.

Comment je l'ai trouvé

La version 3.x a ajouté le stockage local et les dossiers de traitement. Le CRUD du stockage est limité au propriétaire. FolderAccessGuard.serverStorageRoots renvoie Path.of(basePath) pour toute l'arborescence, et non basePath/{currentUserId}. storage/<victimId> commence par cette racine implicite (startsWith).

Le labo crée peeruser avec ROLE_USER, téléverse un PDF de victime en tant qu'admin, prouve que le GET direct sur le stockage renvoie 403, pointe un dossier de traitement vers storage/1, liste le nom préfixé par l'UUID, balaye un filigrane, puis télécharge par plage en tant que victime.

Fausses pistes : considérer l'IDOR direct sur le stockage comme toujours ouvert (403) ; considérer le compose officiel avec connexion désactivée comme le déploiement HIT (stockage 403, contrôleur absent) ; affirmer une copie d'octets lisible par l'attaquant sans outputId.

Labo

python3 stirling-storage-folder-idor-Abraxas-Labs.py

ou

cd lab
./run.sh

Ciblez uniquement http://127.0.0.1:18154. Image stirlingtools/stirling-pdf:3.2.0-fat. Docker requis. Connexion activée. Le lanceur fait un chdir dans lab/ et exécute run.sh.

IOC direct-storage-get http=403
IOC processing-folders-save directory=storage/1 http=202
IOC listed-peer ... victim-lab.pdf
IOC victim-download attempt=1 http=206 bytes=3450 witness=1
SUCCESS stirling-storage-folder-idor direct-storage-403=yes listed-peer-pdf=yes download-has-witness=yes STIRLING-STORAGE-FOLDER-IDOR-WITNESS

Le correctif

Limiter la racine de stockage implicite à basePath/{currentUserId} pour le disque directory sur les serveurs multi-utilisateurs. Refuser storage/<otherId> de la même manière que findByIdAndOwner refuse déjà les identifiants de fichiers étrangers. Recalculer la valeur sizeBytes annoncée après une réécriture sur place.

Relancer le client loopback contre une version corrigée : directory=storage/1 en tant que peeruser doit renvoyer 403, et la liste des pairs doit rester vide.

D'ici là, ne considérez pas « j'ai corrigé /api/v1/storage/files/{id} » comme équivalent à « j'ai limité toutes les API qui prennent un chemin de disque sous ./storage ».

Références

Télécharger l’outil