Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-104110 — Unauthentifizierte Offenlegung des internen Ordnerpfads, der Client-E-Mail und der Upload-Richtlinie für FileRise Pro Client-Portale über /api/pro/portals/get.php | Kitploit
Tools/GitHubGitHub/pervinzahidli/cve-2026-104110
SchwachstellenanalyseExploitationInformationsbeschaffungWebsicherheitAuthentifizierungPapers & ForschungFehlkonfigurationAPI-Sicherheit
GitHubpervinzahidli/cve-2026-104110

CVE-2026-104110

Unauthentifizierte Offenlegung des internen Ordnerpfads, der Client-E-Mail und der Upload-Richtlinie für FileRise Pro Client-Portale über /api/pro/portals/get.php

vor 2 TagenNoch nicht geprüft
Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Unauthentifizierte Informationspreisgabe im FileRise Pro Portal-Endpunkt (get.php)

Zusammenfassung

public/api/pro/portals/get.php gibt den vollständigen internen Datensatz eines FileRise Pro Client-Portals — einschließlich des internen Speicherordnerpfads, der Kontakt-E-Mail des Clients und der vollständigen Upload-Richtlinie — an jeden unauthentifizierten Aufrufer zurück, der den Slug des Portals kennt oder erraten kann.

Jeder benachbarte Endpunkt im selben Verzeichnis (list.php, save.php, listEntries.php, submitForm.php, submissions.php) ruft vor der Ausführung fr_pro_guard_auth(...) auf; get.php ist die einzige Ausnahme. Die Anwendung liefert bereits einen bewusst kuratierten öffentlichen Endpunkt für denselben Slug (publicMeta.php), der nur Branding-Felder zurückgibt — was beweist, dass diese Daten nicht vor der Authentifizierung offengelegt werden sollen.

Betroffene Komponente

  • Endpunkt: public/api/pro/portals/get.php
  • Codepfad: ProPortalsApiService::getPortal() → PortalController::getPortalBySlug() (src/FileRise/Http/Controllers/PortalController.php:60)
  • Vorbedingung: FileRise Pro Add-on aktiv und mindestens ein Client-Portal konfiguriert
  • Bestätigt auf: error311/FileRise @ Tag v3.23.1 (aus dem Dockerfile des Projekts selbst gebaut, frisches First-Run-Setup)

Details

get.php läuft ohne Authentifizierungssperre:

require_once __DIR__ . '/../_common.php';
require_once PROJECT_ROOT . '/src/FileRise/Domain/ProPortalsApiService.php';

try { $slug = isset($_GET['slug']) ? (string)$_GET['slug'] : ''; fr_pro_emit_result(\FileRise\Domain\ProPortalsApiService::getPortal($slug)); } catch (Throwable $e) { ... }

Es gibt keinen fr_pro_guard_auth()-Aufruf irgendwo in dieser Datei — im Gegensatz zu list.php / save.php / listEntries.php, die ihn alle zuerst aufrufen.

getPortal() gibt denselben Datensatz zurück, den ein Administrator auf dem Bildschirm Portal bearbeiten sieht, einschließlich sensibler Felder:

return [
    'slug' => ..., 'label' => ..., 'folder' => $folder, 'clientEmail' => $clientEmail,
    'sourceId' => $sourceId, 'uploadOnly' => ..., 'allowDownload' => ...,
    'uploadMaxSizeMb' => ..., 'uploadExtWhitelist' => ..., 'uploadMaxPerDay' => ...,
    'allowSubfolders' => ..., 'formDefaults' => ..., 'canUpload' => $canUpload, ...
];

Im Gegensatz dazu lädt publicMeta.php — der Endpunkt, den das Frontend (public/js/portal.js) tatsächlich für die anonyme Portal-Landingpage aufruft — aus einer separaten, minimalen portals.json-Projektion über PortalPublicMetaService::getPublicPortalMeta() und gibt nur Branding-Felder zurück:

['slug', 'label', 'title', 'introText', 'brandColor', 'footerText', 'logoFile', 'logoUrl']

Zur Vorbedingung: Der Angreifer muss lediglich einen Portal-Slug kennen oder erraten — ein kurzes, für Menschen lesbares, vom Administrator gewähltes Label, das direkt in der teilbaren Portal-URL (/portal/<slug>) verwendet wird, kein Geheimnis mit hoher Entropie. Slugs werden routinemäßig per E-Mail oder Link an Clients weitergegeben, sodass dies realistischerweise für jeden erreichbar ist, der jemals einen Portal-Link erhalten hat.

Proof of Concept

Live verifiziert gegen error311/FileRise @ v3.23.1, mit null Cookies/Session bei der anfälligen Anfrage.

Hinweis zum Testen: FileRise Pro (das lizenzierte ProPortals.php-Bundle) ist ein separates kostenpflichtiges Add-on, das nicht in diesem Repository enthalten ist. Der folgende PoC aktiviert den Pro-Modus mit einem minimalen lokalen Test-Stub, der nur die listPortals()-Schnittstelle implementiert, die der OSS-Code bereits aufruft (PortalController.php:60 → new ProPortals(FR_PRO_BUNDLE_DIR) → ->listPortals()). Dies reproduziert exakt den OSS-seitigen Codepfad, den jede echte lizenzierte Instanz ausführt; es wurde kein proprietärer Code verwendet oder benötigt.

1. Image bauen:

git clone https://github.com/error311/FileRise.git
cd FileRise
docker build -t filerise-local -f Dockerfile .

2. Minimaler lokaler Stub, um den OSS-seitigen Pro-Gating-Code auszuführen (nicht das proprietäre Bundle — gerade genug, um FR_PRO_ACTIVE / ProPortals::listPortals() zu erfüllen):

mkdir -p data/users/pro

cat > data/users/pro/bootstrap_pro.php <<'PHP' <?php define('FR_PRO_ACTIVE', true); PHP

cat > data/users/pro/ProPortals.php <<'PHP' <?php class ProPortals { public function __construct(string $dir) {} public function listPortals(): array { return ['client-portal' => [ 'label' => 'Client Portal', 'folder' => 'confidential/client-acme-contracts', 'clientEmail' => '[email protected]', 'uploadOnly' => true, 'allowDownload' => false, 'uploadMaxSizeMb' => 25, 'uploadExtWhitelist' => 'pdf,docx', 'uploadMaxPerDay' => 10, ]]; } } PHP

Tool herunterladen