Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
jellyfin-svg-gzip — Jellyfin Server 12.2 - Alta - Remota - SSRF - dati gzip data:image/png residuo di GHSA-cf3c recupera ancora http e file | Kitploit
Strumenti/GitHubGitHub/abraxas/jellyfin-svg-gzip
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebRaccolta InformazioniPenetration TestingLab e Pratica
GitHubabraxas/jellyfin-svg-gzip

jellyfin-svg-gzip

Jellyfin Server 12.2 - Alta - Remota - SSRF - dati gzip data:image/png residuo di GHSA-cf3c recupera ancora http e file

Vedi Repository
31 giorno 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

Abraxas Labs - jellyfin-svg-gzip

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  jellyfin-svg-gzip

jellyfin-svg-gzip

Classe: SSRF + lettura file + memex Portata: Remota (qualsiasi utente autenticato POST /UserImage; la rasterizzazione è non autenticata GET /UserImage)

Jellyfin Server 12.2 (ca0f16eb) - Jellyfin. Svg.Skia 3.7.0.

GHSA-cf3c-8m59-2vhx ha chiuso gli href esterni http e file sugli SVG del profilo. La 12.2 fissa ancora Svg.Skia 3.7.0. SvgDocument.ResolveExternalImages = ExternalType.None viene ignorato da ImageDrawable di 3.7.0. SvgSecurityValidator.ValidateDataUri restituisce allow per qualsiasi data URI il cui media type non sia esattamente image/svg+xml, prima della scansione gzip. GetImageFromDataUri di Svg.Skia: mimeType.StartsWith("image/") più la magic gzip invoca LoadSvgz senza una nuova scansione da parte di Jellyfin. Gli href http(s) / file dell'SVG interno finiscono in WebRequest.Create. Questo è il sink originale di GHSA-cf3c.

Qualsiasi utente autenticato carica un SVG racchiuso in un gzip-png. Una GET non autenticata di quell'immagine del profilo fa sì che il server recuperi http / https / file:// dell'attaccante durante la rasterizzazione.

IDnessuna CVE al momento
ClasseSSRF + lettura file + memex
PortataRemota. Qualsiasi utente POST /UserImage. La rasterizzazione è non autenticata GET /UserImage?userId=
CWECWE-918 / CWE-611 / CWE-400
CVSSAlto: 7.7 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:L
ProdottoJellyfin Server
Affetto12.2 (ca0f16eb7c195f720a1493ed469a27c4657db0c6), immagine jellyfin/jellyfin:12.2, Svg.Skia 3.7.0
AuthUpload autenticato. Rasterizzazione non autenticata.
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Residuo #2 della serie Jellyfin 12.2 leftovers. Gemello #1 Suggestions IDOR. Stesso pin: playlist ItemIds, FFmpeg colon-slash.

Cosa può fare un attaccante

L'attore è qualsiasi utente Jellyfin autenticato. L'immagine del profilo non è riservata agli admin. La rasterizzazione non richiede una sessione.

AsseMetodo + percorsoConcedeProvenienza
RicognizionePOST /UserImage (Content-Type: image/svg+xml, corpo BASE64) poi GET /UserImage?userId= non autenticataGET del server verso http/https dell'attaccante (loopback, RFC1918, link-local/IMDS) durante la rasterizzazione di SkiaProvato in lab. Hostname oracle oracle:8080, hits=1, witness nel percorso
Ricognizioneidembyte file:// dipinti nel PNG/WebP/JPEG che il richiedente scarica, se decodificano come immagineDedotto. Stesso sink WebRequest.Create di GHSA-cf3c
Disponibilitàidem, file:///dev/urandom internoLettura illimitata trattenuta sull'heap gestito. Si ripete a ogni successiva GET dell'immagine senza nuovo uploadDedotto. Misurato in GHSA-cf3c
IntegritànessunaNessuna scrittura di policy utente, nessuna installazione di plugin, nessun furto di sessioneChiuso

Resta chiuso: href diretti http/file sull'SVG esterno (lab: GET è rimasto image/svg+xml, oracle 0); data:image/svg+xml annidato (ri-scansionato, incluso gzip); DTD SYSTEM; XSS inline GHSA-vcmh (Content-Disposition: attachment più rasterizzazione); traversal delle immagini dei plugin; Magick/PDF. Non è RCE. Non è XSS di sessione. Il corpo SSRF è ciò che Skia disegna, non la risposta HTTP grezza.

Come l'ho trovato

12.2 è il tag che ha già distribuito la pre-scansione GHSA-cf3c. Ci sono comunque rimasto sopra. Le patch che aggiungono un validatore davanti a una libreria che effettua ancora il fetch sono un regalo: leggi cosa attraversa il validatore, poi chiedi cosa la libreria analizza ancora.

Directory.Packages.props fissa ancora Svg.Skia 3.7.0. A monte wieslawsoltes/Svg.Skia#448 (corretto in #501): ImageDrawable non consulta mai ResolveExternalImages. Le tre assegnazioni ExternalType.None di Jellyfin sono un no-op su questo pin. Renovate #17076 non è nel tag.

La pre-scansione è quindi l'unico gate. ValidateReference rifiuta ogni href non-fragment e non-data:. L'image/svg+xml annidato viene ri-analizzato, incluso gzip. Il commento in SvgSecurityValidator.cs:169-173 afferma che qualsiasi altro media type è raster e restituisce allow prima della scansione 0x1F 0x8B. Svg.Skia 3.7.0 GetImageFromDataUri non è d'accordo: qualsiasi image/* con magic gzip è LoadSvgz.

Vicoli ciechi già registrati: considerare GHSA-cf3c chiuso perché il controllo negativo resta image/svg+xml; gzip data:image/svg+xml annidato (ri-scansionato); DTD SYSTEM; XSS inline GHSA-vcmh; traversal delle immagini dei plugin; Magick/PDF; RemoteImages/Download dell'admin (fetch di artwork previsto); un DoS pixel-bomb che non è questo residuo; una reverse shell. Teatro.

Lab

python3 jellyfin-svg-gzip-Abraxas-Labs.py

o:

cd lab
./run.sh

Solo loopback: Jellyfin http://127.0.0.1:18780, oracle http://127.0.0.1:18781. Immagine jellyfin/jellyfin:12.2. L'oracle restituisce un PNG 1x1 e registra il percorso della richiesta. L'hostname Compose oracle:8080 è quello che Skia recupera.

Negativo: POST di un SVG del profilo il cui href dell'immagine è http://oracle:8080/negative.png. La GET resta image/svg+xml, oracle 0. Positivo: gzip di un SVG interno il cui href è http://oracle:8080/JELLYFIN-SVG-SVGSKIA-WITNESS.png, racchiuso come data:image/png;base64 sull'SVG esterno. La GET è image/png, oracle 1.

SUCCESS jellyfin-svg-gzip gzip-png-ssrf hits=1 negative=0 JELLYFIN-SVG-SVGSKIA-WITNESS

Solo testimone. Nessun payload di exploit. Nessuna reverse shell. Laboratorio autorizzato. Loopback.

La correzione

Percorrere i data URI gzip e annidati in SvgSecurityValidator anche quando il tipo di media dichiarato non è image/svg+xml. Oppure aggiornare Svg.Skia oltre l'ignoranza di ExternalType.None in ImageDrawable (upstream #448 / #501; renovate #17076 non è in questo tag). Entrambe le cose. Il flag della libreria è il kill switch previsto. Il validatore non dovrebbe mentire su ciò che la libreria analizzerà.

Riferimenti

Scarica lo strumento