Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-46558 — Il sottosistema asset V2 di Plane si fidava degli slug degli spazi di lavoro e degli UUID degli asset senza applicare i giusti controlli di appartenenza, consentendo a un utente autenticato di leggere, copiare, eliminare e sovrascrivere asset in altri spazi di lavoro. | Kitploit
Strumenti/GitHubGitHub/0xmrma/cve-2026-46558
Analisi delle VulnerabilitàSfruttamento di Applicazioni WebPenetration TestingPaper e RicercaApprendimento e FormazioneRisorse Curate
GitHub0xmrma/cve-2026-46558

CVE-2026-46558

Il sottosistema asset V2 di Plane si fidava degli slug degli spazi di lavoro e degli UUID degli asset senza applicare i giusti controlli di appartenenza, consentendo a un utente autenticato di leggere, copiare, eliminare e sovrascrivere asset in altri spazi di lavoro.

Vedi Repository
22 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-46558

Il sottosistema asset V2 di Plane si fidava degli slug dei workspace e degli UUID degli asset senza imporre i necessari controlli di appartenenza, consentendo a un utente autenticato di leggere, copiare, eliminare e sovrascrivere asset in altri workspace.

Introduzione

Ho trovato questo problema mentre analizzavo Plane, la piattaforma open-source di project management, con una domanda molto specifica in mente:

Gli endpoint asset V2 impongono effettivamente i confini tra workspace, o si fidano troppo degli slug dei workspace e degli ID degli asset forniti dall'attaccante?

In questo caso, la risposta è stata no.

Il sottosistema asset V2 di Plane esponeva due falle di autorizzazione correlate che rompevano l'isolamento dei workspace per qualsiasi utente autenticato:

  • l'endpoint asset a livello di workspace non imponeva l'appartenenza al workspace di destinazione prima delle operazioni sugli asset
  • il flusso di duplicazione degli asset autorizzava solo il workspace di destinazione e si fidava dell'UUID dell'asset sorgente senza verificare l'accesso al workspace sorgente

Ciò ha reso possibile l'abuso cross-workspace degli asset.

Nel mio PoC validato, un utente normale nel workspace Bravo è stato in grado di:

  • scaricare un asset privato caricato da Alpha
  • duplicare quell'asset nel proprio workspace Bravo
  • eliminare l'asset originale di Alpha
  • sovrascrivere il logo del workspace di Alpha con contenuto controllato dall'attaccante

A quel problema è stato successivamente assegnato CVE-2026-46558.

Plane: Plane su GitHub
CVE: CVE-2026-46558

Questo ha interessato Plane, che sul suo sito ufficiale viene presentato come utilizzato da oltre 50.000 team in tutto il mondo. Plane evidenzia anche una forte adozione open-source, tra cui e , e mostra organizzazioni come , , e .

oltre 46.000 stelle su GitHub
oltre 1.000.000 di pull Docker
Tencent
Accenture
Microsoft
Amazon
photo0

Catena di Attacco

attaccante autenticato nel workspace B → route asset V2 a livello di workspace si fida dello slug del workspace di destinazione e dell'UUID dell'asset senza controlli di appartenenza adeguati → lettura / patch / eliminazione presigned contro gli asset del workspace A + la ricerca dell'asset sorgente nella duplicazione si fida dell'UUID caricato → divulgazione, copia, eliminazione e sovrascrittura del branding cross-workspace


Cosa Fa Plane

Plane è una piattaforma open-source di project management utilizzata per gestire:

  • attività
  • issue
  • sprint
  • documenti
  • triage
  • branding e asset a livello di workspace

Ciò significa che il suo sottosistema asset si trova su un vero confine di fiducia.

La domanda importante qui non era se Plane supporti i caricamenti.

La vera domanda era:

Plane impone l'isolamento dei workspace quando un utente autenticato fa riferimento ad asset di proprietà di un altro workspace?

In questo caso, non lo faceva.


Perché Questo Bug Valeva La Pena Di Essere Esaminato

Molte revisioni di applicazioni multi-tenant si concentrano prima sugli endpoint admin evidenti o sugli aggiornamenti diretti delle impostazioni.

Così facendo si perde una classe di bug molto comune e reale:

accesso a oggetti secondari attraverso sottosistemi di file o asset condivisi

I sistemi di asset sono facili da sbagliare perché spesso combinano:

  • identificatori controllati dall'utente
  • indirezione a livello di storage
  • collegamento di oggetti basato su metadati
  • generazione di URL presigned
  • più tipi di entità dietro una route condivisa

Questo è esattamente il tipo di luogo in cui i confini tra tenant si indeboliscono silenziosamente.

Questo problema non riguardava la corruzione dello storage. Non riguardava S3 in sé. Non riguardava la gestione MIME dei caricamenti.

Era un fallimento del confine di autorizzazione:

  • identificatori controllati dall'attaccante hanno attraversato il confine
  • il server ha risolto oggetti cross-workspace
  • l'autorizzazione era incompleta o mancante
  • azioni privilegiate sugli asset sono comunque riuscite

Questo è sufficiente per creare una vulnerabilità reale.


Il Confine Su Cui Mi Sono Concentrato

Non ho affrontato Plane fuzzando ciecamente endpoint casuali o indovinando UUID senza alcun modello.

L'approccio più solido è stato identificare prima il confine di isolamento più promettente.

Per Plane, quello era il sottosistema asset V2.

Perché?

Perché un sistema di asset condiviso diventa pericoloso quando:

  • esistono più workspace
  • gli oggetti caricati sono referenziati da UUID
  • gli slug dei workspace sono input di route controllati dall'attaccante
  • l'applicazione trasforma poi ricerche riuscite in percorsi di download presigned o mutazione

Quello era il confine giusto da ispezionare.

Ed era esattamente dove viveva il bug.


Causa Principale

Si trattava in realtà di due fallimenti di autorizzazione correlati nello stesso sottosistema.

Causa principale 1: route degli asset del workspace prive di controllo di appartenenza

Le route degli asset a livello di workspace erano esposte attraverso:

  • apps/api/plane/app/urls/asset.py:50-56

I gestori vulnerabili erano in:

  • apps/api/plane/app/views/asset/v2.py:314
  • apps/api/plane/app/views/asset/v2.py:379
  • apps/api/plane/app/views/asset/v2.py:400
  • apps/api/plane/app/views/asset/v2.py:409

Il problema era semplice.

WorkspaceFileAssetEndpoint accettava uno slug di workspace e un UUID di asset, quindi risolveva direttamente oggetti come:

root@kitploit:~
workspace = Workspace.objects.get(slug=slug)

e:

root@kitploit:~
asset = FileAsset.objects.get(id=asset_id, workspace__slug=slug)

senza prima imporre che il chiamante fosse effettivamente un membro autorizzato di quel workspace di destinazione.

Ciò significava che l'endpoint poteva comunque:

  • creare asset
  • finalizzare asset
  • eliminare asset
  • restituire URL di download presigned

per oggetti di un altro workspace.

Causa principale 2: la duplicazione degli asset si fidava dell'UUID dell'asset sorgente

La route di duplicazione degli asset era mappata attraverso:

  • apps/api/plane/app/urls/asset.py:100-101

La logica vulnerabile era in:

  • apps/api/plane/app/views/asset/v2.py:736-780

Il workspace di destinazione aveva un decorator di autorizzazione. Ma la ricerca dell'asset sorgente no.

L'oggetto sorgente veniva caricato con:

root@kitploit:~
original_asset = FileAsset.objects.filter(id=asset_id, is_uploaded=True).first()

Ciò significava che il chiamante necessitava solo:

  • di un accesso valido al workspace di destinazione
  • di un UUID di asset sorgente che fosse stato caricato

Non c'era alcun controllo che il chiamante appartenesse al workspace sorgente che possedeva effettivamente quell'asset.

Questa è l'intera seconda falla.


Perché Questo È Un Problema Di Sicurezza, Non Solo Una Logica Di Accesso Errata

La distinzione importante è l'impatto cross-workspace.

Molti bug di autorizzazione vengono minimizzati come:

"richiede comunque l'accesso"

Questo manca il punto.

La vera domanda non è:

"Il chiamante è autenticato?"

La vera domanda è:

"Il chiamante è autorizzato per lo specifico workspace e lo specifico asset su cui si sta operando?"

In Plane, la risposta era no.

Ciò trasforma quella che potrebbe sembrare una normale gestione di oggetti in un vero problema di sicurezza multi-tenant.

C'è una chiara differenza tra:

  • accesso autenticato all'interno del proprio workspace
  • e accesso autenticato che attraversa il confine di un altro tenant

Questo problema era saldamente nel secondo caso.


PoC

Ho validato il problema localmente contro Plane Community Edition 1.2.3 usando due utenti ordinari in due workspace non correlati:

  • Alpha nel workspace alpha-20260323072017
  • Bravo nel workspace bravo-20260323072017

Ho usato Alpha per creare un asset privato legittimo caricato in un issue di progetto.

L'ID dell'asset privato validato nella mia esecuzione era:

root@kitploit:~
6ed6ed62-d1b2-4399-8220-336c01b7d72c

Caso 1: lettura non autorizzata da un altro workspace

Come Bravo, ho richiesto:

root@kitploit:~
GET /api/assets/v2/workspaces/alpha-20260323072017/6ed6ed62-d1b2-4399-8220-336c01b7d72c/

Plane ha restituito:

root@kitploit:~
HTTP/1.1 302 Found

con un URL di download presigned per l'asset di Alpha.

L'hash del file scaricato corrispondeva esattamente all'asset privato originale di Alpha:

root@kitploit:~
originale:          0d4d070f550ba59ba6b30bee62343cf68ea221af7034f131f72f6409cf5a598e
lettura non autorizzata: 0d4d070f550ba59ba6b30bee62343cf68ea221af7034f131f72f6409cf5a598e

Ciò ha dimostrato che il percorso di lettura attraversava con successo i confini dei workspace.


Caso 2: duplicazione cross-workspace tramite fiducia nell'UUID sorgente

Come Bravo, ho quindi richiesto:

root@kitploit:~
POST /api/assets/v2/workspaces/bravo-20260323072017/duplicate-assets/6ed6ed62-d1b2-4399-8220-336c01b7d72c/

Plane ha restituito:

root@kitploit:~
HTTP/1.1 200 OK

e ha creato un asset duplicato dalla parte dell'attaccante:

root@kitploit:~
72d51497-ccc1-4546-ba14-28fae5d37dbb

Lo SHA-256 del file duplicato corrispondeva esattamente all'asset originale di Alpha:

root@kitploit:~
0d4d070f550ba59ba6b30bee62343cf68ea221af7034f131f72f6409cf5a598e

Ciò ha dimostrato che il solo UUID dell'asset sorgente era sufficiente per copiare contenuti cross-workspace in un workspace controllato dall'attaccante.


Caso 3: eliminazione non autorizzata dell'asset della vittima

Come Bravo, ho quindi inviato:

root@kitploit:~
DELETE /api/assets/v2/workspaces/alpha-20260323072017/6ed6ed62-d1b2-4399-8220-336c01b7d72c/

Plane ha restituito:

root@kitploit:~
HTTP/1.1 204 No Content

Quando Alpha ha successivamente recuperato quell'asset, il server ha restituito:

root@kitploit:~
HTTP/1.1 404 Not Found

Ciò ha dimostrato un impatto sull'integrità cross-workspace, non solo una divulgazione.


Caso 4: sovrascrittura non autorizzata del logo del workspace

Come Bravo, ho creato un asset WORKSPACE_LOGO contro il workspace di Alpha attraverso la vulnerabile route degli asset a livello di workspace, ho caricato contenuti controllati dall'attaccante e l'ho finalizzato.

Dopodiché, i metadati del workspace di Alpha puntavano all'asset logo controllato dall'attaccante:

root@kitploit:~
c1032f06-3cf5-4f7e-b139-e6976d8c567d

L'hash del logo finale scaricato corrispondeva esattamente al payload dell'attaccante:

root@kitploit:~
atteso:    b9d1ef1de88d61bf55dd18055839bacacb832a752e17a7312547f641113d0e7b
osservato: b9d1ef1de88d61bf55dd18055839bacacb832a752e17a7312547f641113d0e7b

Ciò ha dimostrato un percorso visibile di sovrascrittura cross-workspace, non solo un problema di accesso al backend nascosto.


Perché L'Intera Catena È Importante

Ciascuno dei risultati sopra sarebbe già stato sufficiente per giustificare un vero report di bug.

Ma validare l'intera catena era importante per due ragioni.

Prima

Mostrava che il problema non era limitato a un'esposizione di sola lettura.

Lo stesso confine debole abilitava:

  • divulgazione
  • copia
  • eliminazione
  • sovrascrittura

Ciò rende l'impatto molto più forte di un IDOR ristretto del tipo "può recuperare un file".

Seconda

Mostrava che i due percorsi di codice erano correlati ma indipendentemente importanti.

Una falla esponeva direttamente le operazioni sugli asset a livello di workspace. La seconda falla trasformava gli UUID degli asset caricati in una primitiva di esfiltrazione riutilizzabile tramite duplicazione.

Ciò rendeva la storia di sicurezza complessiva molto più difficile da liquidare.


Validazione dell'Ambito

L'impatto di sovrascrittura più visibile che ho validato è stato:

  • WORKSPACE_LOGO

È stato deliberato perché è facile da verificare e dimostra un evidente fallimento di integrità cross-tenant.

Ma l'endpoint non era limitato ai loghi dei workspace.

Il flusso vulnerabile degli asset a livello di workspace accettava anche diversi contesti di entità, tra cui:

  • copertine dei progetti
  • immagini degli utenti
  • contenuto degli issue
  • contenuto delle pagine
  • contenuto dei commenti

Ciò era importante perché mostrava che il bug era strutturale, non legato a un singolo campo di branding.

Ho validato direttamente il percorso del logo del workspace. Il percorso di codice più ampio suggeriva fortemente che anche altri contesti basati su asset fossero esposti allo stesso errore di autorizzazione.


Gravità e Classificazione

Questo problema è stato ragionevolmente classificato come Alto.

La classificazione dell'advisory era:

  • CWE-862: Autorizzazione Mancante
  • CWE-639: Bypass dell'Autorizzazione Tramite Chiave Controllata dall'Utente
  • CVSS:
root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L

Tale classificazione ha senso.

L'affermazione non è che un attaccante non autenticato possa compromettere Plane da zero. L'affermazione è che qualsiasi normale utente autenticato può attraversare i confini dei tenant nel sottosistema asset V2 ed eseguire operazioni sugli asset ad alto impatto contro altri workspace.

Questa è una vulnerabilità di autorizzazione multi-tenant reale e difendibile.


Perché Valeva Ancora La Pena Segnalarlo

Alcune persone sottovalutano i bug cross-tenant autenticati perché sentono:

"l'attaccante aveva già bisogno di un account"

Non è una difesa seria.

Nel software multi-workspace, gli utenti normali autenticati dovrebbero essere contenuti all'interno del proprio ambito di autorizzazione.

Se un utente con privilegi bassi nel workspace Bravo può leggere, copiare, eliminare o sovrascrivere oggetti nel workspace Alpha, allora l'isolamento dei workspace è rotto.

Questa è esattamente la proprietà di sicurezza che l'applicazione dovrebbe proteggere.

Soprattutto in una piattaforma di project management che memorizza contenuti di lavoro interni e asset di branding, questo è un problema significativo con un reale impatto sulla riservatezza e sull'integrità.


Analisi della Correzione

Il problema è stato corretto in Plane v1.3.1.

Le note di rilascio di v1.3.1 descrivevano chiaramente la correzione:

  • aggiungere @allow_permission a tutti i metodi di WorkspaceFileAssetEndpoint
  • limitare la ricerca dell'asset sorgente di DuplicateAssetEndpoint ai workspace in cui il chiamante è un membro attivo

Questa è la direzione corretta per la correzione perché affronta entrambe le proprietà di sicurezza fallite:

  1. le azioni sugli asset a livello di workspace ora richiedono un reale controllo di appartenenza
  2. gli asset sorgente nel flusso di duplicazione non sono più fidati dal solo UUID

Questo è esattamente ciò di cui questo bug aveva bisogno.

Una buona correzione qui non riguarda nascondere meglio gli UUID. Non riguarda cambiare la generazione degli URL presigned.

Riguarda il ripristino della regola corretta:

lo slug del workspace più l'UUID dell'asset non devono mai essere sufficienti senza un'autorizzazione limitata all'utente corrente

Questa è la parte che la patch ha ripristinato.


Divulgazione

Questo problema è stato segnalato privatamente tramite GitHub Security Advisories.

Il rapporto includeva:

  • analisi della causa principale per entrambi i percorsi di codice
  • un PoC end-to-end locale
  • prove HTTP grezze
  • prova basata su hash per download, duplicazione e sovrascrittura non autorizzati
  • indicazioni per la correzione

Il problema è stato successivamente pubblicato come:

  • GHSA-qw87-v5w3-6vxx
  • CVE-2026-46558

L'advisory è stato pubblicato il 15 maggio 2026. La correzione è stata rilasciata in Plane v1.3.1.


Cosa Insegna Realmente Questo Bug

La lezione chiave qui è semplice:

i sottosistemi di asset condivisi sono confini di autorizzazione, non solo aiutanti di storage

Molti sviluppatori pensano in termini di:

  • caricamento riuscito
  • oggetto esistente
  • UUID risolto
  • URL presigned funzionante

Queste cose sono dettagli implementativi.

La vera domanda di sicurezza è:

chi è autorizzato a risolvere, mutare, copiare o ricollegare quell'asset attraverso i confini dei tenant?

In Plane, quel confine non era applicato in modo coerente.

Questo è il vero insegnamento.

Questo bug rafforza anche qualcosa di importante riguardo alla revisione delle applicazioni multi-tenant:

  • i livelli di oggetti condivisi meritano una revisione di sicurezza diretta
  • gli identificatori controllati dall'attaccante sono sufficienti quando l'autorizzazione è incompleta
  • un singolo sottosistema può esporre contemporaneamente fallimenti di riservatezza e integrità

Punti Chiave

  • gli endpoint degli asset sono confini di sicurezza multi-tenant reali
  • l'accesso autenticato non è la stessa cosa dell'accesso autorizzato cross-workspace
  • gli slug dei workspace e gli UUID degli asset non dovrebbero mai essere sufficienti da soli
  • la generazione di download presigned diventa pericolosa quando l'autorizzazione a monte è debole
  • validare sia le conseguenze di lettura che di scrittura rafforza notevolmente un report di autorizzazione
  • i bug di autorizzazione strutturale nei sistemi di asset condivisi spesso interessano più di un tipo di entità

Parole Finali

Questa vulnerabilità non riguardava un comportamento di storage esotico.

Riguardava porre la giusta domanda sul confine di fiducia.

In Plane, un utente autenticato poteva fornire lo slug e gli UUID degli asset di un altro workspace, e il sottosistema asset V2 si fidava di quegli identificatori più di quanto avrebbe dovuto.

Ecco perché questo è diventato CVE-2026-46558.

Corretto in Plane v1.3.1.

Scarica lo strumento